我正在与爱特梅尔/微芯片的ATAES132A 32K AES系列EEPROM芯片进行硬件加密和解密。这是我第一次涉足密码学。我一直在阅读数据表,并有一个关于如何生成MAC解密的问题。我在Atmel论坛上问过这个问题,但没有得到任何回应。我想这更像是一个密码学的问题,而不是一个技术性的问题。
根据数据表:
I.3 MAC生成下面的示例演示如何为只需要多达14字节的认证数据的身份验证操作计算完整性MAC。此操作涉及三次通过AES密码引擎;三次使用相同的密钥。如果有超过14个字节的纯身份验证数据,则需要另一个通过AES加密引擎。在CBC模式下,有两次通过AES加密引擎来创建明文MAC。这些块的密码引擎输入标记为B0和B1,输出分别为B‘0和B’1。·B0由以下128位组成:-1字节标志,固定值为b0111 1001。- 12字节Nonce,由Nonce命令生成。-1字节MacCount,一个用于第一代MAC。-2字节长度字段,始终为0x00,仅用于身份验证。·B1是B‘0的异或,具有以下128位:-2字节长度字段,仅验证数据的大小。-仅对14个字节数据进行身份验证。B‘1是明文MAC,必须在发送到系统之前进行加密。在CTR模式下,还有一次通过AES加密引擎来创建用于加密MAC的密钥块。这个块的密码引擎的输入被标记为A0,输出是A‘0。A‘0是作为Auth命令的输出参数发送到系统的MAC。·A0由以下128位组成:-1字节标志-- b0000 0001的固定值。- 12字节Nonce由ATAES132A在Nonce命令期间生成。-1字节MacCount -一个用于第一代MAC。-2字节计数器字段-总是0x00表示A0。·A‘0是XOR,带有明文MAC (B’1)并发送到系统。输入完整MACs的8月,计数器,KeyCreate和锁也计算使用此程序。如果输入MAC与A‘0不匹配,则命令返回一个AUTH错误。
所以我的问题是,在绒面码中,我的步骤正确吗?
B'0 = B0 XOR与秘密Key
B'1 = B1 XOR和B'0
A'0 = B'1 XOR和A0
发布于 2018-06-28 12:00:47
您正在阅读的是关于CCM在“加密元素设备”中如何执行的描述。块名是来自NIST的CCM描述。
更明确的说明如下:
N = Nonce(12)
# this implements CBC(key, IV, 79 | NONCE | 01 | 00 00 | LL LL | DATA)
# taking only the last block (AES / CBC-MAC)
IV = 00000000000000000000000000000000 # presumed, it's logical
B0 = 79 | NONCE | 01 | 00 00
B'0 = CBC(key, IV, B0)
B1 = XOR(B'0, LL LL | DATA)
B'1 = CBC(key, IV, B1)
N2 = Nonce(12) # it may be that N2 should be identical to N1, look into spec
# this implements CTR(key, A0, B'1)
A0 = 01 | N | 01 | 0000 # this is the initial counter for CTR mode
A'0 = CTR(key, A0, 00000000000000000000000000000000)
R = XOR(A'0, B'1)这是一个逐块描述CCM模式是如何在内部执行时,多达14个字节的数据只是MAC‘编辑-没有加密。如果您只得到了AES-CBC和AES-CTR,或者只是AES,您可以使用它来模拟实现。在普通计算机上,您只需使用包含CCM的现有库即可。
https://crypto.stackexchange.com/questions/60370
复制相似问题