最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

AES

旗下网站admin28浏览0评论

AES

AES

Rob*_*ier 5

问题是维基百科对 GCM 的工作方式有点误导。“计数器 0”不像在点击率中那样是一堆零。它是“预计数器”块(J0)。如NIST 800-38d 中所述:

在步骤 2 中,从 IV 生成预计数器块 (J0)。特别地,当IV的长度为96位时,则将填充串0³¹||1附加到IV以形成预计数器块。否则,IV 用最少数量的“0”位填充,可能没有,因此结果字符串的长度是 128 位(块大小)的倍数;这个字符串依次附加了 64 个额外的“0”位,然后是 IV 长度的 64 位表示,并且 GHASH 函数应用于结果字符串以形成前置计数器块。

在您的示例中,您传递了一个 128 位块,因此:

不添加填充(已经是 128 位)附加 8 个字节的 0附加IV的长度(16):0x0000000000000010

然后通过 GHASH 函数运行所有这些。这为您提供了 J0,在图形上称为“计数器 0”。

获取计数器 1:

在步骤 3 中,将 32 位递增函数应用于预计数器块以生成初始计数器块,用于在明文上调用 GCTR 函数。

32 位递增函数基本上意味着“递增最右边的 32 位”。

这就是输入 AES 的内容。这将是非常随机的,当然不会像您的 CTR 案例中那样为“1”。这样做允许任意长度的随机数。

但还有另一种特殊情况:GCM 的 96 位随机数,这是推荐的配置。在这种情况下,J0 要简单得多。这只是附加了 32 位 01 的随机数。这是通过 increment 函数传递的,这意味着“第一个”块将是 02。

如果您对 GCM 使用 96 位随机数,并将其与 CTR 的第三个块进行比较,它们将匹配。

aes1 = AES.new(key,AES.MODE_CTR,nonce=bytes.fromhex('000000000000000000000000000000'))print("AES-CTR Result, Counter 0: "+str(binascii.hexlify(aes1.encrypt(msg))))print("AES-CTR Result, Counter 1: "+str(binascii.hexlify(aes1.encrypt(msg))))print("AES-CTR Result, Counter 2: "+str(binascii.hexlify(aes1.encrypt(msg)))+"\n")aes1 = AES.new(key, AES.MODE_GCM, nonce=bytes.fromhex('000000000000000000000000'))print("AES-GCM Result, Counter 0: "+str(binascii.hexlify(aes1.encrypt(msg))))==>AES-CTR Result, Counter 0: b'4a85984511e5ca3f03297d84c69584c4'AES-CTR Result, Counter 1: b'24c82c75b5546a77d20c9868503767b4'AES-CTR Result, Counter 2: b'c8f656193e3bb5b6117d49e3c6799864' <===AES-GCM Result, Counter 0: b'c8f656193e3bb5b6117d49e3c6799864' <===

AES

发布评论

评论列表(0)

  1. 暂无评论