Python在GF(2⁸)有限域上求解多项式的乘法逆元——基于扩展欧几里得算法

一、前言

在写这篇博客前,笔者刚赶完密码学与信息安全的实验报告,用了一天把这个问题涉及的算法仔仔细细啃了一遍,忍不住想写一篇博客。为什么呢?因为笔者昨天在查找资料时真的吐槽到无力!!各大博客网站的博文基本就那几篇,搬来搬去也不加自己的理解,甚至代码都没自己调通一遍。。。另外S_box相关问题的博文倒有几篇不错的,可惜基本都是C或者Java写的,终于看到一个Python的了,那代码冗杂得完全就是C直接翻译过来的,重点还是错的。。。最后,声明一下,笔者上课基本睡觉,涉及的知识基本就这两天看的William Stallings的那本密码编码学P86页,所以知识水平不高,以下写的内容,目标都是编出能用且优雅的代码,Heavy Math只说明不解释。

笔者期望好好写篇关于AES乘法逆元的博文,力求讲清楚每个算法,以免后来人爬我爬过的坑,如果你在这篇文章找到了解决方案,点个赞再走呗(づ ̄3 ̄)づ╭❤~

二、数学基础

1、GF(2⁸)有限域内的多项式

规定GF(2⁸)中的多项式
f ( x ) = a 7 x 7 + a 6 x 6 + ⋯ + a 1 x + a 0 = ∑ i = 0 7 a i x i f(x)=a_{7}x^{7}+a_{6}x^{6}+\cdots+a_1x+a_0=\sum_{i=0}^{7}a_ix^i f(x)=a7x7+a6x6++a1x+a0=i=07aixi
其系数 a i a_i ai 只能为1或者0,则该多项式可以由组成它的二进制系数 ( a 7 , a 6 , a 5 , a 4 , a 3 , a 2 , a 1 , a 0 ) (a_7,a_6,a_5,a_4,a_3,a_2,a_1,a_0) (a7,a6,a5,a4,a3,a2,a1,a0) 组成。将这些数字按高位到低位排列,则可以形成一个二进制整数,整数的范围为0~256,代表了有限域中的256个多项式。

2、不可约多项式

大部分场景,包括S_box问题中,都遇到一个特殊的多项式 m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1 ,称之为不可约多项式。

简单来说,相当于自然数中的质数,也就是它的的因式只有1和它本身,所以称为不可约多项式。

3、多项式模运算

到了这里,笔者开始飞炸,觉得自己15年读了个假数学。。。认真看了会书,笔者才看懂,原来多项式运算分为3种:

  • 使用代数基本规则的普通多项式运算
  • 系数运算是模 p p p 运算的多项式运算,即系数在 G F ( p ) GF(p) GF(p)
  • 系数在 G F ( p ) GF(p) GF(p) 中,且多项式被定义为模一个 n n n 次多项式 m ( x ) m(x) m(x) 的多项式运算

所以,我们的乘法逆元要用到的就是第三种,也就是按正常运算完后再对一个 m ( x ) m(x) m(x) 取余数,才是最终运算结果。惊了吧,15年就只学了个普通数学!!!

接下来笔者就举一个例子,各位读者。。爱看不看。。

现在假设这个 m ( x ) m(x) m(x) 就是我们刚才说的不可约多项式 m ( x ) = x 8 + x 4 + x 3 + x + 1 m(x)=x^8+x^4+x^3+x+1 m(x)=x8+x4+x3+x+1,对于多项式 f ( x ) = x 6 + x 4 + x 2 + x + 1 f(x)=x^6+x^4+x^2+x+1 f(x)=x6+x4+x2+

  • 49
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值