如何将64位IV放入128位计数器模块,用于AES-128 CTR模式,采用PIFF格式

时间:2014-05-11 23:27:13

标签: encryption aes smooth-streaming

这些文件似乎没有提供答案..

微软试图清楚地解释这个问题,但它仍然含糊不清。至少在我们的案例中。

我们有一个加密的MP4流。它包含“SampleEncryptionBox”es或“PIFF”框,其中包含加密块的 8字节= 64位初始化向量。但是:用于解密“AES-128计数器模式”加密视频数据的实际“计数器块”是 128位。我不知道在哪里将IV放入其中!!

  • PIFF document表示16字节IV是AES-CTR模式的整个计数器块(显然)。此外,对于 AES-ECB模式(第17页),8字节IV放在计数器块的开头。但对于AES-CTR模式下的 8字节IV ,它什么都没说!

  • This RFC document表示128位应包含4字节Nonce + 8字节IV + 4字节计数器。 Nonce值应取自主要128位AES密钥的额外4字节。我只能通过保护头获取128位密钥,我应该在哪里获得4字节的Nonce?

任何额外的知识都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

尝试使用NIST SP 800-38A,B.2部分。请注意,此文档是Microsoft文档引用的第一个文档:

  

满足消息中唯一性属性的第二种方法是为每个消息分配一个唯一的b / 2比特串(如果b为奇数则向上舍入),换句话说,消息随机数,并合并消息nonce进入消息的每个计数器块。 每个计数器块的前导b / 2位(向上舍入,如果b为奇数)将是消息随机数,标准递增函数将应用于剩余的m位以提供索引消息的计数器块。因此,如果N是给定消息的消息随机数,则第j个计数器块由Tj = N |给出[j] m,j = 1 ... n。任何m消息中的块数n必须满足n

请注意,您需要2 ^ 64个数据才能到达下一个"消息nonce"或IV。这只是生成计数器的示例方法;不幸的是,NIST确实没有指定任何默认的habbit。所以这也取决于协议,但上面是最常见的。

答案 1 :(得分:1)

好的,我找到了解释..它在“ ISO / IEC JTC 1 / SC 29 N ”文件中清楚写明。

  

如果IV_size字段为8,则将其值复制到InitializationVector的字节0到7,将InitializationVector的字节8到15设置为零。 IV_size标志为0x1时,IsEncrypted字段不应为0。

AES-ECB模式与它无关。