模运算——开启密码学学习之路
综述:学完高数,线性代数,概率论,数学已经学了一大半,本以为数学的知识也就到此结束,但没有想到这只是自己自欺欺人。开始看导师密码学的论文的时候,第一眼就吓傻眼,模运算mod
,没想到还有数论这种东西存在,而且用处广泛。其中《密码编码学与网络安全》书中,我就见证其用处是无处不在,从奇偶数的判别到素数的判别,从模幂运算到最大公约数的求法,从费马定理到欧拉定理,从孙子问题到凯撒密码问题,从RSA密钥到椭圆曲线。无不充斥着模运算的身影,只怪自己是井底之蛙。于是乎要理解密码学和椭圆曲线,就得学习模运算。基本概念:
概念:就是求余数,11 Mod 2,余数值为1;数学上的定义:给定一个正整数p ,任意一个整数
n(正数,负数,0都行) ,一定存在等式n
= p*k+r (0≤r)(备注,这个式子很重要,后面许多性质都要用到这个等式) 例子:-11
mod 7 = 3;部分且重要性质:(这里只列了几个需要证明的性质)1.同余式:正整数a,b对p取模,它们的余数相同,记做
a ≡ b % p或者a
≡ b (mod p)。2.若p|(a-b),则a≡b
(mod p) 备注:(|是整除性符号,也就是(a- b)是p的因子)证明:令a-b=kp;那么a=kp+b1;所以a mod p = kp+b mod
p =b mod ;所以a≡b (mod p)3.结合率((x+y )mod p +c)mod p =(x+
(y +c mod) p)mod p ;
证明:存在x= k1p +r1,y
= k2p+r2;c=k3p+r3;则代入等式左边,等于r1+r2+r3,等式右边也等于r1+r2+r3
。4.非常重要的运算:加法逆元和乘法逆元定义:加法逆元(x+y)mod p =0
乘法逆元(x*y)mod p =1 举例:模8加法和乘法逆元w-wW-100不存在17126不存在35344不存在53562不存在717重大运算规则:费马定理:若p是素数,且a是正整数不能被p整除,意思是a,p
互素。ap-1 ≡
1 mod p 构造素数 p
的完全剩余系 P ={1,2,3,4...p-1}用a乘以集合中所有元素并对p去模,则得到X ={1a,2a,3a,4a...(p-1)a}也是p的一个完全剩余系。由完全剩余系的性质,1*2*3*...(p-1)=a*2a*3a*...a(p-1)即 (p-1)!=(p-1)!ap-1
(mod p)易知,同余式两边可约去(p-1)! ,得到ap-1
≡1
(mod p)欧拉定理;欧拉定理是在费马定理上进一步的扩展所以证明和推理是一样的,但涉及到欧拉函数(解决给定一个正整数,在其内与它互为素数的个数)aφ(n)≡1
(mod n)在欧拉函数中,当n为质数时,φ(n)=n-1;很好验证,比如你n=5,那么5以内有
1,2,3,4和5为互质,所以φ(5)=4;中国剩余定理:听说这个定理又叫做孙子定理,比较难懂,用来简化模计算,很牛逼的一个定理,可惜看了两遍没看懂它的证明过程。熟悉的应用:(1)加密解密的证明对于明文分组M和密文分组C,加密和解密过程中C =Me mod n; 式子(1)M=Cd mod n; 式子(2)其中收发双方均是已知n,发送方已知是e,只有接收方有d,公钥{e,n},私钥{e,n},主要是为了证明如何证明式子(2),也就是接收方如何还原数据。要证明这个M=Cd mod n=(Me mod
n)d mod n成立,先证明Cd mod n=(Me mod
n)d mod = (Me)d
mod n根据模的定义数学上的定义:给定一个正整数p ,任意一个整数
n(正数,负数,0都行) ,一定存在等式n
= p*k+r 令Me
=k*n+r
所以 (Me mod n)d
mod n = rd mod n (Me)d=(k*n+r)d泰勒展开,会发现除了rd,所有项都有k*n。所以(Me)d
mod n=(k*n+r)d
mod n =rd mod n所以 (Me mod n)d
mod = (Me)d
mod n接下来在证明 (Me)d
mod n = M因为n = pqe满足gcd(φ(n),e)=1;1φ(n)ed ≡
1 mod
φ(n);d ≡
e-1mod (φ(n));d和e是模φ(n)的乘法逆元所以 (Me)d
mod n = Mkφ(n)+1mod n=(M*Mkφ(n))
mod n由欧拉定理得:aφ(n)+1≡
1 mod n所以(M*Mkφ(n)) mod n = M所以 (Me)d
mod n = M结合之上所证明得:M=(Me)d
mod n=(Me mod n)d
mod=Cd mod n所以解密的式子(2)成立。应用(2)-解决实际问题(循环类)以下是朋友问我的一道经典题目,当时正好想到用模数的方法解决问题:如图4个带指针的时钟A,B,C,D,每转动一个方位时,临近的两个时钟也会随之转动方位,例如A顺时针转90°,那么B,C,也会顺时针转动90°,那么问该怎么转动四个时钟,使四个指针都朝上。解:这个问题挺有趣的但又不能一个个去尝试,而且这个问题有一定的可循环性。分析可得,A总的要比其他三个多转动4k+1(这里假设都是顺时针)。假设A转动a次,B转动b次,C转动c次,D转动d次。由(a+b+c)mod 4 = 1(a+b+d)mod 4 =
(c+b+d)mod 4 =
(c+a+d)mod 4 =0故:a+b+c = 4k+1
a+b+d=4n
a+c+d =4m
b+c+d=4t
化简: b-c =4(n-m)
a-c=4(n-t)n-t
a-b =4(m-t)求得其中的一个解:b =11,c= 3,a =7,d =2;