GF(2 ^ 3)
今天看到《密码编码学与网络安全》一书中的有限域,特别不理解在GF(2 ^ 3)上的乘法运算,索性就上网查查资料,自己摸索一下其中的奥秘。
GF(2 ^ 3)上的加法运算没得说,就是异或运算。但乘法就有些稀奇古怪了,它是怎么算的?先把表放在下面:
伽罗华域上的多项式乘法,其结果需要mod P(x)
在经过一番搜索后,发现它需要构造出一个本原多项式。什么是本原多项式?
本原多项式满足以下条件:
GF(2 ^ 8)的本原多项式是:x^8 + x^4 + x^3 + x + 1。
GF(2 ^ 3)的本原多项式是:x^3 + x + 1。
拿表中的一组数据举例:101 010 <=> (x^2 + 1) x = x^3 + x,这样它除以本原多项式后余1,正好等于表格中数据。
再举个例子:111010 <=> (x^2 + x + 1) (x) = x^3 + x^2 + x,除以本原多项式后为x^2 + 1 <=> 101 = 5,也正好等于表中的数据。
模运算:
一般地,在GF(2^n)上对于n次多项式p(x),有x^n mod p(x) = [p(x) - x^n]。——————-①
考虑GF(2^8)上的多项式:
将它乘以x可得:
如果b7 = 0,那么结果就是一个次数小于8的多项式,已经是约化后的形式,不需要进一步计算。如果b7 = 1,那么可以通过式①进行模m(x)的约化:
这表明乘以x(即00000010)的运算可以通过左移一位后再根据条件按位异或00011011(其代表x^4 + x^3 + x + 1)来实现。总结如下:
参考:
《密码编码学与网络安全—原理与实践》(第六版)
https://baike.baidu.com/item/%E6%9C%AC%E5%8E%9F%E5%A4%9A%E9%A1%B9%E5%BC%8F/3246261?fr=aladdin