75.6. ハッシュメッセージ認証コード (HMAC)

転送中の暗号化されたデータに対する攻撃を回避するために、CryptoDataFormat は、設定可能な MAC アルゴリズムに基づいて、暗号化されたエクスチェンジコンテンツのメッセージ認証コードを計算することもできます。計算された HMAC は、暗号化後にストリームに追加されます。復号化フェーズでストリームから分離されます。MAC は再計算され、送信されたバージョンに対して検証され、送信中に改ざんされていないことが保証されます。メッセージ認証コードの詳細については、http://en.wikipedia.org/wiki/HMAC を参照してください。

KeyGenerator generator = KeyGenerator.getInstance("DES");

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());
cryptoFormat.setShouldAppendHMAC(true);

from("direct:hmac")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

または Spring 付き。

<crypto id="hmac" algorithm="DES" keyRef="desKey" shouldAppendHMAC="true" />

デフォルトでは、HMAC は HmacSHA1 mac アルゴリズムを使用して計算されますが、これは別のアルゴリズム名を指定することで簡単に変更できます。設定されたセキュリティープロバイダーを通じて利用可能なアルゴリズムを確認する方法については、こちらを参照してください。

KeyGenerator generator = KeyGenerator.getInstance("DES");

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());
cryptoFormat.setShouldAppendHMAC(true);
cryptoFormat.setMacAlgorithm("HmacMD5");

from("direct:hmac-algorithm")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

または Spring 付き。

<crypto id="hmac-algorithm" algorithm="DES" keyRef="desKey" macAlgorithm="HmacMD5" shouldAppendHMAC="true" />