2017-03-16 2 views
1

HMACを理解すると、データが処理される前に暗号化されたデータの整合性を確認することができます。復号化ルーチンに送られたデータは何らかの方法で変更されています。暗号化されたデータが常にローカルに保存され、取り出される場合は、HMACがまだ必要です

そのような場合、データを生成するアプリケーションの外部にデータが送信されない場合、暗号化方式に組み込むことに利点がありますか?私のユースケースは非常にシンプルです。ユーザーは、顧客の詳細を保存するために書いたスクリプトにデータを(平文で)送信します。私のスクリプトは、このデータを暗号化してデータベースに保存します。スクリプトは、ユーザーがデータを取得し、提供したレコードIDに基づいてデータを復号する方法を提供します。ユーザーが暗号化されたデータを暗号化ルーチンに直接送信する方法はなく、外部APIを用意する必要はありません。

したがって、同じアプリケーションがデータの書き込みと取得を担当するため、デフォルトでアプリケーションに信頼関係があると仮定することは妥当ですか? HMACをこのスキームに追加すると、このコンテキストでは冗長か、コンテキストに関係なく常にHMACを実装するのがベストプラクティスですか?私はDefuseライブラリを使うつもりですが、HMACのメリットが私のプロジェクトにどのようなものかを理解したいと思います。いいえ、他の理由のために、ログから警告を削除する場合は任意のアドバイスや入力を事前に

感謝:)

答えて

4

最初に、攻撃者が暗号化されたデータを解読せずに変更できるようにする攻撃があることを理解する必要があります。 Security.SEの場合はIs there an attack that can modify ciphertext while still allowing it to be decrypted?、Crypto.SEの場合はMalleability attacks against encryption without authenticationを参照してください。攻撃者が暗号化されたデータへの書き込みアクセスを取得した場合(たとえ解読キーがなくても)、重大な混乱を招く可能性があります。

あなたは、暗号化されたデータは「アプリケーションの外部には決して送信されませんが、 。メモリ内の暗号化されたデータの処理を信頼することは1つのことですが、特に別のプログラム(データベースシステムなど)および/または別の物理マシン(現在または将来はシステム進化する)。

ここで重要なのは、攻撃者がアプリケーションとキーにアクセスすることなく、暗号化されたデータを代替の暗号化データで変更または置き換えることが可能になるかどうかです。攻撃者がインサイダーであり、通常のユーザーとしてプログラムを実行する場合、一般にデータを守ることはできません。プログラムが攻撃者に行うことができるものはすべてテーブル上にあります。ただし、HMACは、非ユーザ(または通常の権限を超えるユーザ)のデータへの書き込みアクセスが可能な場合に関係します。データベースが侵害された場合、攻撃者はアプリケーション自体にアクセスしなくても、データを無断で変更する可能性があります。 HMAC検証を使用すると、たとえ書き込みアクセス権を取得したとしても、データを変更する攻撃者の能力が著しく制限されます。

+0

ありがとうございます。つまり、自分のアプリケーションで暗号化したデータは、データベースに保存される前に変更されないと自動的には判断できません。 HMACはデータの整合性(つまり、データベースに送信したものが正しく保存されたかどうか)に役立つと考えることができます。アプリケーションを破壊することなく(すなわち、侵害することなく)、ユーザは暗号化されたデータを直接書き込むことができず、記録更新ルーチンはスクリプトに送られたデータを暗号化し、ユーザは暗号化/復号化ルーチンを直接呼び出すことができない。 –

+0

@NoelWhitemore攻撃者がアプリケーションを実行することなくデータベースディスクに書き込む可能性のある攻撃を概念化できますか?将来的に回答が「はい」または「はい」になる可能性がある場合(つまり、データベースへのアクセスがアプリケーションから独立している場合(たとえばデータベースがネットワーク経由でアクセスできる場合)、HMACはあなたのデータ。暗号化されたデータを解読することなく(ビットの反転、ブロックの繰り返し)、意味のある変更を行う方法はたくさんあります。それは主にHMACが防衛するものです。 – apsillers

+0

この質問に対する答えはおそらく「いいえ」ですが、私はあなたの要点を理解しています。誰かが自分のアプリケーションを持って別のサーバーに置いたり、別のサーバーに複数のアプリケーションをコピーしたり、その場合、アプリケーションが暗号化されたデータを生成したかどうかを検証することができるため、HMACは有用です。 –

1

私のOCDは通常、HMACの実装は常に良い習慣であることを指示します。

あなたのケースでは、プレーンテキストの提出の完全性を保証する以外に、HMACを実装することに明確な裏返しがあるとは思われません。あなたのスクリプトはデータを暗号化することがありますが、間違ったデータが渡された場合は役に立ちません。

+0

ありがとうございました。 aptillerが述べたように、私は自動的に、PHPスクリプトと(理論的に)悪用される可能性のあるデータベースとの間に信頼関係が存在すると想定しています。すべての暗号化/復号化はアプリケーション内で行われますが、私にとっては暗号化されたデータの整合性を検証することは、PHPとデータベースサーバー間のリンクを利用する方法を見つけた場合に役立ちます。 –

関連する問題