【问题标题】:How is the matrix created using Isomorphic transform fucntion and Isomorphic inverse transform function? [closed]如何在同构逆变换函数中使用同构变换函数创建矩阵? [关闭]
【发布时间】:2019-12-18 05:46:45
【问题描述】:

尝试在组合电路中实现 AES Sbox 和 InSbox。对于 Sbox,这里完成了两个操作,即乘法逆和仿射变换。对于仿射变换,使用同构变换将有限域转换为复合域,我不知道这是如何完成的。需要帮助从提到的不可约多项式 p(x) 中获取图像中显示的矩阵增量(附有问题)。

【问题讨论】:

  • @jww - 这个问题作为题外话结束了。 Stack Exchange 上是否有针对此问题的部分,如果有,是否应将其复制或重新发布到该部分?
  • 尝试在math.stackexchange.com 发布这个问题。

标签: cryptography aes finite-field


【解决方案1】:

问题中的矩阵用于反转 (1/x) 步骤。仿射变换是一个单独的步骤,通常涉及矩阵乘法,后跟 AES 算法指定的列异或。链接到 wiki 文章,注意 wiki 文章在顶部有最低有效位,而您引用的文章和其他文章在顶部有最高有效位。

https://en.wikipedia.org/wiki/Rijndael_S-box

回到这些矩阵是如何创建的,我找到了几篇文章,但它们不仅没有解释这些矩阵是如何创建的,而且还缺少关键信息,例如为 GF(2^) 选择的原始元素8) 基于 多项式 x^8 + x^4 + x^3 + x + 1 (0x11b),系数为 1 位,不可约,但不是原始的,因为它的原始元素不是 x (0x02)。

GF(2^8) 映射到 GF(((2^2)^2)^2)。从问题信息来看,GF(2^2) 使用 x^2 + x + 1(十六进制 7)和 1 位系数来生成一个 2 位字段,其中原始元素 x = 0x2。 GF((2^2)^2) 使用 x^2 + x + 2(十六进制 16)和来自 GF(2^2) 的 2 位系数来生成原始元素 x = 0x4 的 4 位字段。 GF(((2^2)^2)^2) 使用 x^2 + x + c (hex 11c) 和来自 GF((2^2)^2) 的 4 位系数来生成具有原始 x 的 8 位字段= 0x10。

对于 GF(2^8),有 128 个可能的原始元素:{0x03, 0x05, 0x06, ... , 0xff}。矩阵 δ 可用于识别为 GF(2^8) 选择了哪个原始元素,在本例中为 x^4 + x^3 + x^2 + x + 1 (hex 1f)。

矩阵 δ 的列对应于从 GF(2^8) 到 GF(((2^2)^2)^2) 逐位映射:第 1 列映射 0x80,第 2 列映射 0x40,.. .,第 7 列映射 0x02,第 8 列映射 0x01。这些列是 GF(((2^2)^2)^2) 中 0x10 的幂。例如第 7 列是 0x5f,即 GF(((2^2)^2)^2) 中的 0x10^0xa0。由于第 7 列用于映射 GF(2^8) 中的 0x02,这意味着 GF(2^8)log??(0x02) = 0xa0,并且选择的原始元素是 0x1f,因为 GF(2^8) log1f(0x02) = 0xa0。第6列是0x7c,即GF(((2^2)^2)^2)中的0x10^0x41,GF(2^8)log1f(0x04) = 0x41。

下表显示了所有 8 列的数据。

GF(2^8) log1f(0x80) = 0x64, GF(((2^2)^2)^2) 0x10^0x64 = 0xfc (1st column of matrix)
GF(2^8) log1f(0x40) = 0xc3, GF(((2^2)^2)^2) 0x10^0xc3 = 0x4b (2nd column of matrix)
GF(2^8) log1f(0x20) = 0x23, GF(((2^2)^2)^2) 0x10^0x23 = 0xb0 (3rd column of matrix)
GF(2^8) log1f(0x10) = 0x82, GF(((2^2)^2)^2) 0x10^0x82 = 0x46 (4th column of matrix)
GF(2^8) log1f(0x08) = 0xe1, GF(((2^2)^2)^2) 0x10^0xe1 = 0x74 (5th column of matrix)
GF(2^8) log1f(0x04) = 0x41, GF(((2^2)^2)^2) 0x10^0x41 = 0x7c (6th column of matrix)
GF(2^8) log1f(0x02) = 0xa0, GF(((2^2)^2)^2) 0x10^0xa0 = 0x5f (7th column of matrix)
GF(2^8) log1f(0x01) = 0x00, GF(((2^2)^2)^2) 0x10^0x00 = 0x01 (8th column of matrix)

逆映射矩阵可以使用相同的逻辑:

GF(((2^2)^2)^2) log10(0x80) = 0x67, GF(2^8) 0x1f^0x67 = 0x84 (1st column of matrix)
GF(((2^2)^2)^2) log10(0x40) = 0xbc, GF(2^8) 0x1f^0xbc = 0xf1 (2nd column of matrix)
GF(((2^2)^2)^2) log10(0x20) = 0xab, GF(2^8) 0x1f^0xab = 0xbb (3rd column of matrix)
GF(((2^2)^2)^2) log10(0x10) = 0x01, GF(2^8) 0x1f^0x01 = 0x1f (4th column of matrix)
GF(((2^2)^2)^2) log10(0x08) = 0x66, GF(2^8) 0x1f^0x66 = 0x0c (5th column of matrix)
GF(((2^2)^2)^2) log10(0x04) = 0xbb, GF(2^8) 0x1f^0xbb = 0x5d (6th column of matrix)
GF(((2^2)^2)^2) log10(0x02) = 0xaa, GF(2^8) 0x1f^0xaa = 0xbc (7th column of matrix)
GF(((2^2)^2)^2) log10(0x01) = 0x00, GF(2^8) 0x1f^0x00 = 0x01 (8th column of matrix)

请注意,在问题图像中,逆矩阵第 1 列和第 6 列的最低有效位被翻转。下面链接的 pdf 文件具有正确的矩阵。

https://github.com/bpdegnan/aes/blob/master/aes-sbox/documentation/aessbox.pdf

我创建了一个小型 pdf 文件,解释了第 4 页矩阵 (8) 和第 5 页矩阵 (10) 中看到的映射矩阵是如何生成的以及它们背后的逻辑。

https://github.com/jeffareid/finite-field/blob/master/Composite%20Field%20Mapping%20Example.pdf


为了使子字段(即复合字段数学)发挥作用,有两个主要要求。用 map() 表示从 GF(2^8) 到 GF(((2^2)^2)^2) 的映射,然后在 GF(((2^2)^2)^2)

map(a + b) = map(a) + map(b)               // addition (xor) is isomorphic
map(a · b) = map(a) · map(b)               // multiplication is isomorphic

这也可以重述为:用α表示GF(2^8)的原始元素,用β表示GF(((2^2)^2)^2)的原始元素。

if α^i + α^j = α^k, then β^i + β^j = β^k   // addition (xor) is isomporhic
if α^i · α^j = α^k, then β^i · β^j = β^k   // multiplication is isomorphic

通常 β = 100002,对 3 个常数 α、φ、δ 进行蛮力搜索,这会产生兼容的映射并最小化门数,其中 α 是 GF 的原始元素(2^8),φ 是 GF((2^2)^2) = x^2 + x + φ 的常数项,δ 是 GF(((2^2)^2)^ 的常数项2) = x^2 + x + δ。在这种情况下,α = 111112,φ = 102,δ = 11002

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2012-06-10
    • 2021-11-12
    • 1970-01-01
    • 2012-01-23
    • 2015-12-02
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多