Modes-of-Operation
使用 XTEA 在 OMAC1/CMAC 中生成子密鑰?
到目前為止,我發現的所有 CMAC 實現都使用具有相同密鑰和塊大小的塊密碼。但是,XTEA 使用 128 位密鑰對 64 位塊進行加密。如果
E_XTEA(key,block)
是加密函式並且k
是我的主密鑰,CMACk0
從全零塊生成一個臨時密鑰:k0 = E_XTEA(k,0)
CMAC 派生另外兩個與和
k0
具有相同長度的k0
密鑰。這種推導使用了一個“完全由塊中的位數決定”的常數k1``k2``C
有兩個問題:
k
是 128 位長,但是k0
和k1
只有k2
64 位長,因為它們取決於 64 位加密函式的輸出。- 真的是
C
由塊大小而不是密鑰大小決定的嗎?我的假設是
E_XTEA(k,0)
用來生成一個偽隨機塊,我可以用它k0 = concat(E_XTEA(k,0),E_XTEA(k,1))
來生成一個大小合適的偽隨機塊。但我不知道這是否正確或C
選擇哪個。
看看鍵位如何 $ K_1 $ 和 $ K_2 $ 在CMAC中使用(pdf,第 6.2 節):
- 如果 $ M_n^* $ 是一個完整的塊,讓 $ M_n = K_1 \oplus M_n^* $ ; 否則,讓 $ M_n = K_2 \oplus (M_n^*||10^j) $ , 在哪裡 $ j = nb-Mlen-1 $ .
它們使用 XOR 與消息塊組合。因此,它們的長度必須等於密碼的塊大小,而不是密鑰大小(如果不同)。
類似地,那麼, $ C $ 由塊大小決定。