CMAC
OMAC1 と同じ
AES-128を利用したAES-CMAC と出力を96bitにしたAES-CMAC-96 がある
RFC 4493 AES-CMAC
RFC 4494 AES-CMAC-96
TDEA-CMAC?
NISTでは AES-192,AES-256, TDEA (TripleDES)でも利用できる
ガロア体を利用しているので初期値などを設定すれば128bit以外でも利用できそう
AES-CBC の最後をなんとかする
鍵をつくる
入力
鍵 128bit NIST SP 800-38Bでは 192bit, 256bitも可
M データ
M_1 から M_n-1 の128bitブロックと M_n の任意サイズブロックに分ける
L = AES (鍵key) で 128bit 0 を暗号化
K1 = GF128( L・2 )
K2 = GF128( K1・2 )
OMAC2 では K2 が GF128(L/2)
cbc = new CBC(AES)を作成 (AES 鍵key, CBCのIV = 0)
cbcで最後のブロックの手前M_n-1まで暗号化を進める cbcの中を遷移させる 暗号文は捨てる
AESブロック長(128bit)とM_nサイズが同じ場合
x = M_n XOR K1
短い場合、または全体の長さ0の場合 1bit 1 と 0 で Paddingする
x = ( M_n | Padding 0x80 | 00..... ) XOR K2
cbc でxを暗号化した値がCMAC値
例
亜種?
RFC 4615 AES-CMAC-PRF-128 for IKE RFC 4306 IKEv2