HMACを理解すると、データが処理される前に暗号化されたデータの整合性を確認することができます。復号化ルーチンに送られたデータは何らかの方法で変更されています。暗号化されたデータが常にローカルに保存され、取り出される場合は、HMACがまだ必要です
そのような場合、データを生成するアプリケーションの外部にデータが送信されない場合、暗号化方式に組み込むことに利点がありますか?私のユースケースは非常にシンプルです。ユーザーは、顧客の詳細を保存するために書いたスクリプトにデータを(平文で)送信します。私のスクリプトは、このデータを暗号化してデータベースに保存します。スクリプトは、ユーザーがデータを取得し、提供したレコードIDに基づいてデータを復号する方法を提供します。ユーザーが暗号化されたデータを暗号化ルーチンに直接送信する方法はなく、外部APIを用意する必要はありません。
したがって、同じアプリケーションがデータの書き込みと取得を担当するため、デフォルトでアプリケーションに信頼関係があると仮定することは妥当ですか? HMACをこのスキームに追加すると、このコンテキストでは冗長か、コンテキストに関係なく常にHMACを実装するのがベストプラクティスですか?私はDefuseライブラリを使うつもりですが、HMACのメリットが私のプロジェクトにどのようなものかを理解したいと思います。いいえ、他の理由のために、ログから警告を削除する場合は任意のアドバイスや入力を事前に
感謝:)
ありがとうございます。つまり、自分のアプリケーションで暗号化したデータは、データベースに保存される前に変更されないと自動的には判断できません。 HMACはデータの整合性(つまり、データベースに送信したものが正しく保存されたかどうか)に役立つと考えることができます。アプリケーションを破壊することなく(すなわち、侵害することなく)、ユーザは暗号化されたデータを直接書き込むことができず、記録更新ルーチンはスクリプトに送られたデータを暗号化し、ユーザは暗号化/復号化ルーチンを直接呼び出すことができない。 –
@NoelWhitemore攻撃者がアプリケーションを実行することなくデータベースディスクに書き込む可能性のある攻撃を概念化できますか?将来的に回答が「はい」または「はい」になる可能性がある場合(つまり、データベースへのアクセスがアプリケーションから独立している場合(たとえばデータベースがネットワーク経由でアクセスできる場合)、HMACはあなたのデータ。暗号化されたデータを解読することなく(ビットの反転、ブロックの繰り返し)、意味のある変更を行う方法はたくさんあります。それは主にHMACが防衛するものです。 – apsillers
この質問に対する答えはおそらく「いいえ」ですが、私はあなたの要点を理解しています。誰かが自分のアプリケーションを持って別のサーバーに置いたり、別のサーバーに複数のアプリケーションをコピーしたり、その場合、アプリケーションが暗号化されたデータを生成したかどうかを検証することができるため、HMACは有用です。 –