暗号化とハッシュについて説明する

完了

一般的なサイバーセキュリティ上の脅威を軽減する方法の 1 つは、機密データや貴重なデータを暗号化することです。 暗号化 とは、未承認の閲覧者がデータを読み取り不可にし、使用できないようにするプロセスです。 暗号化されたデータを使用または読み取るには、暗号化 を解除する必要があります。そのためには、秘密鍵を使用する必要があります。 攻撃者が暗号化されたデータを傍受またはアクセスした場合でも、対応するキーがなくても役に立ちません。

暗号化の種類

暗号化には、対称と非対称の 2 種類があります。

暗号化と暗号化解除の両方に 1 つの共有キーを使用した対称暗号化と、暗号化する公開キーと暗号化解除する秘密キーを使用した非対称暗号化を示す図。

対称暗号化

対称暗号化では、データの暗号化と暗号化解除の両方に 同じキー が使用されます。 関連するキーは 1 つだけなので、対称暗号化は計算速度が速く、大量のデータ (ハード ドライブに格納されているファイルやデータベース内のレコードなど) の暗号化に適しています。

対称暗号化の主な課題は、キーの配布です。両当事者は同じ秘密鍵にアクセスする必要があり、特にネットワーク経由でそのキーを安全に共有することは困難な場合があります。

非対称暗号化

非対称暗号化では、 キー ペア (公開キーと秘密キー) が使用されます。 これらのキーは数学的に関連していますが、公開キーから秘密キーを派生させることはありません。

  • 公開キーで暗号化されたデータは、対応する秘密キーでのみ復号化できます。
  • 秘密キーで署名されたデータは、対応する公開キーを使用して検証できます。

公開キーは自由に共有できるため、非対称暗号化によって対称暗号化のキー分散の問題が解決されます。 誰でも公開キーを使用してデータを暗号化できますが、秘密キーを保持しているユーザーのみが暗号化を解除できます。 非対称暗号化は、Web サイトをセキュリティで保護する HTTPS や電子メールの暗号化など、毎日やり取りする多くのセキュリティ プロトコルで使用されます。

デジタル署名

非対称暗号化では、 データの信頼性と整合性の両方を検証するデジタル署名も有効になります。 送信者が秘密キーを使用してデータに署名すると、送信者の公開キーを持つすべてのユーザーが次のことを確認できます。

  • データは、予想される送信者 (信頼性) から取得されました。
  • データは、署名 (整合性) 後に変更されませんでした。

デジタル署名は、ソフトウェアのダウンロードの検証、電子メール メッセージの認証、電子ドキュメントとトランザクションのセキュリティ保護に使用されます。

データ状態による暗号化

保存データの暗号化

保存データは、サーバー のハード ドライブ、データベース、クラウド ストレージ アカウントなどの物理デバイスに格納されるデータです。 保存データの暗号化により、暗号化を解除するためにキーを必要とせずにデータを読み取りできなくなります。

攻撃者が暗号化されたデータが保存されているハード ドライブを入手しても、暗号化キーにアクセスできなければ、データを読み取ることができません。 この保護は、物理ストレージ メディアが盗まれた場合や、ストレージ アカウントに承認なしでアクセスされた場合でも維持されます。

転送中のデータの暗号化

転送中のデータは、インターネット経由、サービス間、プライベート ネットワーク経由など、ある場所から別の場所に移動するデータです。 転送中のデータは、ネットワーク トラフィックを監視できるユーザーによる傍受に対して脆弱です。

転送中のデータを暗号化することで、傍受や通信の盗聴から保護されます。 HTTPS は最も使い慣れた例です。HTTPS 経由で Web サイトにアクセスすると、接続はトランスポート層セキュリティ (TLS) を使用してセキュリティで保護されます。これにより、ブラウザーとサーバー間で交換されたデータを第三者が読み取れないようにします。 クラウド サービス間のデータ移動と、パブリック ネットワーク経由のトラフィックを保護する VPN 接続にも、同じ原則が適用されます。

使用中のデータの暗号化

使用中のデータとは、コンピューターのメモリ (RAM) に読み込まれたデータや CPU によって処理されているデータなど、アクティブに処理されるデータを指します。 従来の暗号化では保存データと転送中のデータが保護されますが、通常、データは処理のためにメモリに読み込まれると復号化され、潜在的な露出のウィンドウが作成されます。

使用中のデータの暗号化は、保護された実行環境 (セキュリティで保護されたエンクレーブとも呼ばれます) を作成するコンフィデンシャル コンピューティング テクノロジによって実現されます。この環境では、オペレーティング システムやハイパーバイザーに公開しなくてもデータを処理できます。 これは、異なる顧客が同じ物理ハードウェアを共有できるマルチテナント環境で特に重要です。

キー管理

暗号化は、データの暗号化に使用されるキーと同じくらい安全です。 暗号化キーが盗まれたり公開されたりすると、暗号化されたデータに攻撃者がアクセスできるようになり、暗号化の目的が破られます。 キー管理では、暗号化キーの生成、格納、保護、ローテーション、最終的な廃止の方法について説明します。

主な管理のベスト プラクティスは次のとおりです。

  • 保護するデータとは別にキーを格納する: 暗号化されたデータと共にキーが格納されている場合、そのキーに自動的にアクセスする攻撃者は両方を持ちます。
  • キー ストレージに専用ハードウェアを使用する: ハードウェア セキュリティ モジュール (HSM) は、暗号化キーを格納して保護するために特別に設計された、改ざんに対する耐性のある特殊なデバイスです。
  • キーを定期的にローテーションする: 暗号化キーを変更すると、キーが侵害された場合に公開されるデータの量が定期的に制限されます。
  • キーへのアクセスを厳密に制御する: 強力な認証と最小特権のアクセス原則を使用して適用される暗号化解除キーにアクセスできるのは、承認されたユーザーとシステムだけです。

Azure Key Vault などのクラウド キー管理サービスは、暗号化キー、証明書、シークレットを格納および管理するための一元化されたマネージド サービスを提供します。 これらのサービスは、キー公開のリスクを軽減し、キーローテーション ワークフローをサポートし、他のクラウド サービスと統合して、キーマテリアルをアプリケーション コードや管理者に公開することなく暗号化を提供します。

ハッシュ関数

ハッシュでは、アルゴリズムを使用して、入力を ハッシュ (または ダイジェスト) と呼ばれる固定長文字列に変換します。 暗号化とは異なり、ハッシュは一方向のプロセスです。元の入力を回復するためにハッシュを元に戻すことはできません。 同じアルゴリズムを使用して同じ入力がハッシュされるたびに、同じハッシュ値が生成され、ハッシュはそのデータに対して信頼性の高い一意のフィンガープリントになります。

ハッシュは、キーを使用しないという点で暗号化とは異なり、ハッシュ値を元のデータに戻すことはできません。 これにより、ハッシュは、元の値を格納または読み取ることなくデータを検証する必要があるシナリオに役立ちます。

ハッシュ アルゴリズムを通過して固定長ハッシュ値を生成する元のテキストを示す図。

ハッシュによってパスワードが保護される方法

ハッシュは、保存されているパスワードを保護するために広く使用されています。 システムは、ユーザーの実際のパスワードを格納する代わりに、そのパスワードのハッシュのみを格納します。 ユーザーがサインインすると、システムは入力したパスワードをハッシュし、保存されたハッシュと比較します。 ハッシュが一致する場合、認証は成功します。システムは実際のパスワードをプレーン テキストで保存または送信することはありません。

パスワード データベースが盗まれた場合でも、攻撃者はハッシュのみを取得するため、プレーンテキスト パスワードを格納するよりも安全です。 ただし、基本的なハッシュには既知の脆弱性があります。ハッシュ関数は決定論的であるため、攻撃者は何百万もの一般的なパスワードのハッシュを事前計算し、 それらをテーブル (虹のテーブル または ディクショナリ攻撃と呼ばれる) で検索して一致を見つけることができます。

ソルト

事前計算された攻撃から保護するために、通常、パスワードはハッシュの前に 塩分けされますsalt は、個々のパスワードごとにランダムに生成され、ハッシュする前に追加された一意の値です。 すべてのパスワードが異なるソルトを取得するため、同じパスワードを持つ 2 人のユーザーがデータベースで異なるハッシュを生成します。 これにより、攻撃者は考えられるすべてのソルト値に対して個別のルックアップ テーブルが必要になるため、事前計算された虹のテーブルは効果的ではありません。

Salting は、セキュリティで保護されたパスワード ストレージの標準的なベスト プラクティスであり、適切に実装された認証システムに必要です。