暗号化されたメッセージをサーバーからクライアントに、またはその逆に送信するときに、AESとHMAC(SHA-256に基づく)を適切な方法で使用する方法が少し混乱しています。
次の方法が間違っている場合は、訂正してください。
- キーファイルから安全なキーを取得します(たとえば、AES-256を使用することをお勧めしますが、すでに有効な256ビット長のキーがあります)
- AES-256のランダムIVを生成して、同じプレーンテキストの暗号化出力が異なることを確認します。
- プレーンテキストと安全なキーを使用してHMAC-SHA-256を計算します。(最初の質問:HMAC計算にIVを使用する必要がありますか?たとえば、セキュアキーに追加しますか?)
- AES-256を使用してプレーンテキストを暗号化します。
- 次のようにクライアントへのメッセージを作成します:HMAC + IV + ENCRYPTED_MESSAGE
最大の質問は、どういうわけかIVをクライアントに送信せずに、同じ方法で生成し、暗号化に対して安全である可能性があるかどうかです。それともIVを送っても大丈夫ですか?
同じプレーンテキストが異なる暗号化結果になる必要があるため、ランダムなIV生成になります。