从EAX 操作模式:
我们解释了 OMAC 定义中使用的符号。iL 的值(第 40 行:i 是 {2, 4} 和 L ∈ {0, 1} n 中的整数)是通过将 L 乘以表示数字 i 的 n 位字符串得到的 n 位字符串. 乘法是在有限域 GF(2 n ) 中使用规范多项式来表示域点的。我们选择的规范多项式是具有最小数量非零系数的 n 次不可约多项式中按字典顺序排列的第一个多项式。对于 n = 128,指示的多项式为 x 128 + x 7 + x 2 + x + 1。在这种情况下,如果 L 的第一位为 0 且 2L = (L << 1) ⊕ 0,则 2L = L << 1 12010000111 否则,其中 L << 1 表示 L 左移一个位置(第一位消失,零进入最后一位)。4L 的值就是 2(2L)。我们警告说,为了避免侧信道攻击,必须以恒定时间的方式实现加倍操作。
我基本上只是给出了在 n = 128 的有限乘法中使用的多项式是 x 128 + x 7 + x 2 + x + 1。我希望我的实现是抽象的,因为它不依赖于正在使用的密码。为了允许块大小 n 是任意数字而不是硬编码 128 或其他几个,我怎样才能让我的软件计算正确的多项式?