EAXやGCMなどのAEAD固有のモードで 認証された暗号化にHMAC-SHA-256を使用したAES-256-CTR を使用することを主張する人もいます。
ただし、これを行う場合、これはwhatをHMAC化する必要がありますか?そしてどうやって?具体的には:
MACは、関心のあるデータの変更、つまり復号化の結果を検出するためにあります。したがって、次の選択肢があります。
2番目のケースでは、HMAC入力にすべてを含める必要があります復号化プロセスに影響を与えます。つまり、暗号化結果自体だけでなく、そのために使用されたIVも影響します暗号化、およびプロトコル全体がアルゴリズムの俊敏性をサポートしている場合は、暗号化アルゴリズムの仕様も入力する必要があります(そうでない場合、攻撃者はメッセージのヘッダーを変更して、「AES-256」というタグを「 「AES-128」を使用すると、知らないうちに間違ったアルゴリズムで復号化されます)。
securityの場合、2番目の選択肢(暗号化、次にMAC)の方が適しています。詳細については crypto.SEに関するこの質問 を参照してください(要約すると、MACが暗号化されたデータに対して計算される場合、プレーンテキストデータに関する情報をリークすることはできません。また、復号化を試みる前に検証されるため、選択した暗号文攻撃から保護します)。 SSLはMAC-then-encryptを使用しており、これが多くの問題の原因になっています(すべての「パディングOracle攻撃」およびいわゆるBEAST攻撃は、encrypt-then-MACで回避されました)。
鍵については、理想的には、暗号化鍵とMAC鍵は [〜#〜] prf [〜#〜] を使用してマスター鍵から導出する必要があります。簡単に言うと、マスターキーをハッシュします[〜#〜] k [〜#〜]SHA-512で。結果の前半は暗号化キー、後半はHMACのキーになります。
しかし、実際には、[〜#〜] eax [〜#〜] または [〜#〜] gcm [〜#〜]を使用する必要があります。彼らはすべてを正しく行い、(それは重要なポイントです)IVの選択に関して非常に軽い要件があります:反復しないIVが必要なだけなので、単純なカウンターを使用できますが、手作りのCTRは重複しないIV範囲(ランダムな選択が均一なIVは正しいが、ランダム性は難しい要件です)(そしてCBCはさらに悪く、予測不能ランダム性が必要です)。新しいシステムでEAXまたはGCMを使用するnotの唯一の正当化(下位互換性の制約がない場合)は、おそらくEAXまたはGCM実装が利用できないことです。この場合でも、一部のAES-ECBコードをEAX実装に改造する方がよいと私は主張します。