データ暗号化方法:種類、アルゴリズム、保護の選択
データの暗号化方法は、個人情報、企業文書、支払い、通信、バックアップを第三者からの閲覧から守るために役立ちます。この記事では、どのような種類の暗号化があるのか、対称暗号と非対称暗号の違い、AES、RSA、ECC、TLSがどこで使用されるか、およびウェブサイト、アプリケーション、データベース、またはデバイスに適したアプローチを選択する方法を解説します。
暗号化はシステムを「無敵」にするものではありません。特定の課題を解決するものであり、理解できるデータを、鍵なしでは読むことができない記号のセットに変換します。したがって、実際の保護は、アルゴリズムだけでなく、鍵管理、設定、更新、アクセス制御、ユーザーの規律にも依存しています。

データ 暗号化とは何か
データの暗号化とは、元の情報、またはプレーンテキストを暗号化されたテキストに変換するプロセスです。変換にはアルゴリズムと暗号鍵が使用されます。データを元の形に戻すには、正しい復号鍵が必要です。
簡単な例:ユーザーがウェブサイトを通じて銀行のデータを送信します。接続がHTTPSで保護されている場合、ブラウザとサーバーは暗号化されたチャネルを確立します。たとえ誰かがトラフィックを傍受しても、明示的な形のカード番号ではなく、無意味なバイナリのセットを目にすることになります。
暗号化と関連メカニズムとの違いを明確にすることが重要です:
- ハッシュ化は、データの不可逆的な指紋を作成します。パスワードの保存や整合性チェックに適しています。
- エンコードは、データの形式を変更しますが、保護はしません。たとえば、Base64は簡単にデコード可能です。
- オブファスケーションは、コードやデータの分析を複雑にしますが、暗号化には代わりません。
- 署名はデータの真実性と不変性を確認しますが、常に内容を隠すわけではありません。
言い換えれば、内容を隠す必要がある場合は、暗号化が必要です。データが変更されていないことを証明する必要がある場合は、ハッシュやデジタル署名がよく使用されます。
暗号化の主要な目的
データ保護の方法は、通常、特定のリスクに基づいて選択されます。暗号化にはいくつかの重要な目的があります。
機密性
機密性は、データが許可を受け、鍵を持っている人だけにアクセス可能であることを意味します。これは医療記録、商業契約、個人データ、通信、支払い情報にとって重要です。
整合性
暗号化そのものは、データが変更されていないことを保証するものではありません。したがって、現代のスキームでは、AES-GCMやChaCha20-Poly1305などの認証済み暗号化が使用されます。これらはデータを隠すと同時に、改ざんを検出します。
認証
認証は、交換の参加者が本当にその人物であることを確認するのに役立ちます。TLSでは、これに証明書が使用され、他のシステムではデジタル署名と鍵が使用されます。
否認防止
否認防止は、送信者がメッセージの送信ま たは署名の事実を信用できる方法で否定できないことを意味します。これには、RSAやECDSAに基づくデジタル署名が使用されます。
対称暗号
対称暗号は、暗号化と復号化に同じ秘密鍵を使用します。アリスがボブにファイルを送信したい場合、彼らは共通の鍵を知っている必要があります。その鍵は第三者に開示してはいけません。
対称アルゴリズムの主な利点は、高速性です。したがって、大量のデータ(ファイル、ディスク、アーカイブ、データベース、および保護された接続が確立された後のネットワークトラフィック)に使用されます。
AES
AES(Advanced Encryption Standard)は、最も広く使用される対称アルゴリズムの1つです。HTTPS、VPN、メッセンジャー、ディスク暗号化、企業システムで使用されています。
AESは、128、192、256ビットの鍵をサポートしています。実際には、AES-128はほとんどのシナリオで耐性があると見なされ、AES-256は長期的な保護と厳しい規制要件のために選ばれることがよくあります。ただし、鍵の長さは唯一の要因ではありません。動作モードと実装の品質も重要です。
一般的なAESのモード:
- GCM - データの認証と整合性チェックを持つ現代的なモード。TLSやAPIでよく使用されます。
- CBC - ベクトルおよび整合性チェックの取り扱いに注意が 必要な古いモード。
- CTR - ブロック暗号をストリームモードに変換しますが、一意のカウンタが必要です。
- XTS - ディスクやストレージの暗号化に使用されます。
新しいプロジェクトでは、AESが安全にサポートされ、ハードウェアでAESを加速できる場合は、通常AES-GCMが選ばれます。
ChaCha20-Poly1305
ChaCha20-Poly1305は、認証暗号化の現代的なスキームです。ストリーム暗号ChaCha20とポリ1305認証コードを組み合わせています。このオプションは、モバイルデバイスやAESのハードウェア加速がないプラットフォームで特に有用です。
ChaCha20-Poly1305は、TLS、VPNプロトコル、保護されたメッセンジャーで使用されます。その利点は、ソフトウェア実装での優れたパフォーマンスと古いモードに特有のいくつかのエラーに対する耐性です。
対称暗号に適したとき
対称暗号は、大きなデータを迅速に保護する必要があるときに選ばれます。典型的なシナリオは次のとおりです:
- ファイルとフォルダーの暗号化;
- バックアップの保護;
- ノートパソコンやサーバーのディスクの暗号化;
- データベースのデータ保護;
- 鍵交換後のネットワークトラフィックの暗号化;
- アプリケーションのローカルストレージ内の秘密を保護。
主な課題は、鍵を安全に転送し、保存することです。鍵が盗まれた場合、攻撃者はデータを復号化できる可能性があります。
非対称暗号
非対称暗号は、公開鍵と秘密鍵のペアを使用します。公開鍵は他の人に渡すことができます。秘密鍵は秘密に保持する必要があります。
データが公開鍵で暗号化されている場合、対応する秘密鍵を用いてのみ復号化できます。メッセージが秘密鍵で署名されている場合、公開鍵を持つ誰でもその署名を検証できます。
実際、非対称アルゴリズムは大きなファイルを直接暗号化するためにはあまり使用されません。それらは対称アルゴリズムよりも遅くなります。したがって、非対称暗号が安全にパスするか、対称鍵の合意に使用されるハイブリッドスキームが多く採用されています。このとき、データはAESまたはChaCha20という高速アルゴリズムで暗号化されます。
RSA
RSAは、暗号化、デジタル署名、鍵交換に使用される古典的な非対称アルゴリズムです。その安全性は、大きな数字の因数分解の難しさに基づいています。
現代のシステムでは、RSAは通常2048ビット以上の鍵と共に使用されます。長期的な保護にはしばしば3072ビット以上が検討されます。とはいえ、RSAには適切なパディングスキームが必要です。たとえば、暗号化にOAEP、署名にPSSを使用します。「素の」RSAは安全なパディングなしで使用することはできません。
ECC
ECC(楕円曲線暗号)は、RSAと比較して小さな鍵サイズで高いレベルの保護を提供します。これはモバイルデバイス、IoT、TLS証明書、およびリソース制約のあるシステムに便利です。
人気のある選択肢には、鍵交換のためのECDHやデジタル署名のためのECDSAがあります。また、Curve25519やEd25519に基づく現代的なスキームも広く使用されています。
Diffie-HellmanとECDH
Diffie-Hellmanは、オープンチャネルを介して共通の秘密を合意する方法です。これはデータを直接暗号化するのではなく、2つの当事者が明示的な方法で鍵を共有せずに共通鍵を取得するのを助けます。
ECDHは、楕円曲線を用いたバージョンです。TLSでは、そのようなメカニズムがしばしばセッション鍵を生成するのを助けます。
現代の構成の重要な特性は、直接の秘密性です。サーバーの長期的な鍵が将来的に危険にさらされても、過去に記録されたセッションは自動的に暴露されるべきではありません。これを実現するために、一時的な鍵(たとえばECDHE)が使用されます。
ハッシュ化と暗号化:違い は何か
ハッシュ化はしばしば暗号化と並んで言及されますが、それは異なる操作です。暗号化は可逆的であるべきで、鍵があればデータを復号化できます。ハッシュ化は不可逆的であり、ハッシュから元のデータを通常の方法で復元することはできません。
ハッシュ関数は、整合性チェック、デジタル署名、パスワード保存、データ重複排除に使用されます。一般的な暗号化ハッシュ関数には、SHA-256やSHA-3があります。
パスワードには、追加の措置なしに一般的なSHA-256を使用することはできません。パスワードは、専門の関数(Argon2、bcrypt、またはscrypt)を使用して保存する必要があります。これらは試行錯誤を遅くし、同じパスワードが同じハッシュ値を持たないようにソルトを使用します。
データ暗号化方法の比較
以下は、特定のタスクに適した方法を迅速に選択するのに役立つ簡単な表です。

| 方法 | 適用対象 | 利点 | 制限 |
|---|---|---|---|
| AES-GCM | API、TLS、ファイル、データベース | 高速な暗号化と整合性チェック | 一意のnonceと正確な実装が必要 |
| ChaCha20-Poly1305 | モバイルアプリ、VPN、TLS | ハードウェアAESなしでの良好な速度 | ライブラリとプロトコルでのサポートが必要 |
| AES-XTS | ディスクの完全暗号化 | ブロックデバイスに適しています | 通常のメッセージやAPIには不向き |
| RSA-OAEP | 小さな秘密の保護、鍵交換 | 広い互換性 | ECCより遅く、大きな鍵を必要とする |
| ECDH/ECDHE | セッション鍵の合意 | 効率と直接的な秘密性 | 安全な曲線を選択することが重要 |
| Ed25519/ECDSA | デジタル署名 | 真実性と整合性の確認 | データの内容を隠さない |
| Argon2/bcrypt/scrypt | パスワードの保存 | ブルートフォース攻撃からの保護 | これは暗号化ではなく、パスワードを復元できない |
実用的な選択が必要とされる場合、新しいアプリケーションでは通常、認証済みの暗号化:AES-GCMまたはChaCha20-Poly1305が検討されます。鍵の伝達と保護された接続には、現代の暗号セットを使用したTLSが使用されます。
保存時、転送時、使用時のデータ暗号化
データの暗号化方法を選ぶには、データの状態を理解することが有用です。同じ情報は、ライフサイクルの異なる時点において脆弱な可能性があります。
保存時のデータ
保存時のデータは、ディスク、データベース、クラウドストレージ、アーカイブ、バックアップに保存されています。その保護には以下が使用されます:
- ディスクの完全暗号化;
- 個々のファイルの暗号化;
- データベースのテーブルや列の暗号化;
- オブジェクトストレージの暗号化;
- クラウドに送信する前のバックアップの暗号化。
ディスクの完全暗号化は、デバイスが盗難や紛失される場合に保護します。ただし、システムにすでにログインしているユーザーやプロセスからのデータを必ずしも保護するわけではありません。したがって、機密性の高い分野ではアプリケーションレベルでの暗号化を追加すると良いでしょう。
転送時のデータ
転送時のデータは、ネットワークを経由して移動します:ブラウザとウェブサイト、アプリケーションとAPI、オフィスとクラウド、クライアントとVPNサーバーの間です。ここでは、通常次のことが適用されます:
- HTTPSおよびAPIのためのTLS;
- サーバー管理のためのSSH;
- 保護されたネットワークトンネルのためのVPN;
- 安全なメールおよびメッセージ交換プロトコル。
主な ルールは、パスワード、トークン、ドキュメント、および個人データを保護されていないチャネルで送信しないことです。内部ネットワークでさえも完全に信頼できるとは見なされるべきではありません。
使用時のデータ
使用時のデータは、メモリ内にあり、アプリケーションによって処理されます。これは保護の難しい領域です。一般的な暗号化は、データを処理する前に復号化する必要があり、さもなければプログラムはそれらと連携できません。
特に厳密なシナリオでは、信頼できる実行環境、ハードウェアセキュリティモジュール、特定のタスクにはホモモーフ暗号化が適用されます。ただし、これらの技術は複雑で、すべてのプロジェクトに適しているわけではありません。
エンドツーエンド暗号化
エンドツーエンド暗号化は、データが送信者のデバイスにて暗号化され、受信者のデバイスでのみ復号化されることを意味します。仲介サービスは、内容を読むための鍵を持つべきではありません。
このアプローチは、保護されたメッセンジャー、いくつかのクラウドストレージ、および共同作業サービスに使用されます。サーバーがすでに暗号化されたデータを保存または送信する ため、サーバーのハッキングに伴うリスクを軽減します。
しかし、エンドツーエンド暗号化は実際の課題も引き起こします:
- アクセスを回復することが難しくなる;
- 内容に基づく検索が制限される可能性がある;
- デバイス間の同期において鍵の適切な管理が必要;
- 管理者はポリシー違反を簡単に確認できない。
したがって、E2EEは特にプライベートな通信や機密文書に役立ちますが、考慮されたユーザー体験を必要とします。
暗号鍵の管理
暗号化は、多くの場合、弱いアルゴリズムではなく、鍵の操作が不適切なために破られます。アプリケーションのコードに記録された鍵やメッセンジャーで送信された鍵は、最も耐性がある暗号を無力化する可能性があります。
鍵の生成
鍵は、暗号論的に安全な乱数生成器を使用して生成する必要があります。手動で鍵を考案したり、日付、名前、短いフレーズ、または標準ライブラリ内の暗号的に指名されていない通常の擬似乱数関数を使用することはできません。
鍵の保存
鍵は、暗号化されたデータとは別に保存されます。そのために次の手段が使用されます:
- クラウドインフラストラクチャ内のKMS;
- 鍵のハードウェア保護のためのHSM;
- シークレットマネージャー;
- オペレーティングシステムの安全なストレージ;
- ハードウェアトークンやTPM。
データベースと鍵が同じサーバー上にあり、追加の保護が行われていない場合、サーバーの侵害が全データを暴露する可能性があります。
鍵のローテーション
ローテーションは計画的な鍵の交換です。これにより、潜在的な侵害時の損害が軽減され、内部のセキュリティポリシーに従うのが助けられます。しかし、ローテーションは管理可能でなければなりません。どのデータがどの鍵で暗号化されているのか、鍵のバージョンがどこに保存されているのか、データ損失なしに再暗号化をどのように行うのかを理解する必要があります。
権限の分離
すべての管理者が鍵にアクセスできるべきではありません。役割を分けることが望ましく、インフラを管理する専門家や鍵を管理する専門家、ログを分析する専門家が必要です。このアプローチは、乱用やミスのリスクを削減します。
データ暗号化方 法の選択方法
以下は、ウェブサイト、モバイルアプリケーション、企業システム、または小さなサービスに適した実用的なステップバイステップのアルゴリズムです。

- データのタイプを特定します。 情報を次のカテゴリーに分割します:パブリック、内部、個人、支払い、商業機密、認証情報。
- 脅威を説明します。 何から守る必要があるのかを考えます:ノートパソコンの盗難、トラフィックの傍受、データベースのハッキング、インサイダー、クラウドアカウントの侵害。
- データの状態を特定します。 データは保存状態にあるのか、ネットワークで転送されているのか、アプリケーションでアクティブに処理されているのか。
- 信頼できるアルゴリズムを選択します。 大きなデータにはAES-GCMまたはChaCha20-Poly1305を使用します。ディスクにはAES-XTSを使用します。鍵交換にはECDHEを使います。パスワードにはArgon2、bcrypt、またはscryptを使用します。
- 既存のライブラリを使用します。 独自の暗号化を記述しないでください。成熟したライブラリと標準プロトコルを選択します。
- 鍵管理を設定します。 鍵の生成場所、誰がアクセスするのか、鍵のローテーション方 法、廃棄方法を決定します。
- 整合性チェックを追加します。 認証済みの暗号化を優先します。認証なしに機密性に依存しないでください。
- 復元を確認します。 鍵のバックアップが保護されており、復元手順が明確でテストされていることを確認します。
- 解決策を文書化します。 選択したアルゴリズム、パラメーター、ライブラリのバージョン、アクセスルールを記録します。
- 監査を実施します。 定期的にプロトコルを更新し、古い暗号セットを無効にし、アクセスログをチェックします。
このアプローチは、アルゴリズムを「名前で」選ぶのではなく、実際のデータとリスクの周りに保護システムを構築するのに役立ちます。
暗号化時の一般的な誤り
強力なアルゴリズムも、不適切に適用されると役に立ちません。以下は、特に頻繁に見られる誤りです。
自作の暗号化
独自のアルゴリズムを作成することはほぼ常に悪いアイデアです。信頼できる暗号化は何年にもわたる分析を経る必要があります。オープンな標準と確認されたライブラリを使用する方が良いです。