密码学说起:
历史:两千年前 凯撒大帝发明
base64的雏形
容易破解 【信息论】
间谍很危险
一直到1976年 迪菲、赫尔曼提出了一个构想 不通过密钥交换 1977 rsa诞生
RSA加密探究
对称加密的弊端 还有RSA的历史不在这里赘述,有兴趣的同学课自行查阅资料
在开始之前需要一定的数学知识,在这里跟大家一起复习一下:
取模运算:
3%17= 3 、 3^2 %17= 9 、3^3 %17= 10 、3^4 %17= 13 、3^5 %17= 5 。。。
3^n % 17 = 12 请问n = ?,同学们可能发现了 取模的时候我们正向很容易算出答案,但是反向不好运算且有可能有多个解。
在这里 我们管3 叫做 17的原根。
互质关系 (如果两个正整数,除了1之外没有其他公因数,我们就称这两个数为互质关系)
例如 :1跟8、 3跟8 、5跟8、7跟8
有个小问题, 小于8的并且跟8为互质关系的正整数有几个,答案当然就是4
计算该值的方式就叫做欧拉函数(给定任意正整数n,在小于n的正整数之中有多少个与n为互质关系)用φ(n)表示
φ(8) = 4;
那么再来回忆一下质数的概念 - (在大于1的自然数中,除了1和它本身以外不再有其他因数。)
所以我们就能得出结论:如果当n是质数 φ(n)=n-1 例如5: 与5互质的 1 、2、 3、4
上面就是欧拉函数的第一个特点
另外欧拉函数还有个特点就是φ(A*B)=φ(A)* φ(B) 例如 φ(56) = φ(8) * φ(7) = 4 * 6 = 24
通过上面两个特点 我就还能得出:
如果N是两个质数P1 和 P2的乘积则
φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1) 例如 φ(15) = φ(3) * φ(5) = 2 * 4 = 8
以上还算是比较简单
接下来有了欧拉函数,我们再来看欧拉定理 (如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。 -- 这是定理,大家不用想着去论证,只要知道这是真的就可以,当然不信的话可以找几个数据测试一下)
也就是 (m^φ(n) - 1) % n ≡ 0 =>
m^φ(n) % n ≡ 1
因为m 与n 互为质数 所以m的k次方与n也互为指数 于是
m^kφ(n) % n ≡ 1 =>
m^kφ(n)+1 % n ≡ m
上面的等式先留着 一会儿要用
下面讲一下模反元素的概念
如果两个正整数e和x互质,那么一定可以找到整数d,使得 ed-1 被x整除。
那么d就是e对于x的“模反元素” 举个例子5 和 3互质 (5*2 - 1) % 3 ≡ 0 那么2 就是5相对3的模反元素,当然不止一个,可以有很多个
公式表达为
e*d mod x ≡ 1也就相当于
e*d ≡ k*x + 1 这时候我们再把上面的欧拉定理推导公式拿出来
m^(kφ(n)+1) % n ≡ m
当 x = φ(n)的时候 也就是 m^e*d % n ≡ m
稍微理一下:
m < n , x = φ(n),e 与 x互质 d是e对于x的模反元素 的时候 等式成立
到这里非对称加密已经有了雏形,m经过一系列运算后还能得到m, 但是如何拆分这个公式呢
迪菲赫尔曼密钥交换
来到最初的取模运算
3 ^13mod17 = 6
6^ 15 mod17 = 10 = 3 ^ 13 ^15 mod 17
接下来做一下等式对应 m = 3 n = 17 e = 13 d = 15中间值 c = 6
于是 m^e mod n = c
c ^ d mod n = 10 = m^e^d mod n
也就是c ^d mod n = m^e^d mod n
再结合我们的推导公式m^e*d % n ≡ m
于是乎 m^e mod n = c 加密
c ^d mod n = m 解密
公钥 n 和 e
私钥 n 和 d
铭文m, 密文 c
说明:
1、n会非常大,长度一般为1024个二进制位。(目前人类已经分解的最大整数,232个十进制位,768个二进制位)
2、由于需要求出φ(n),所以根据欧函数特点,最简单的方式n 由两个质数相乘得到: 质数:p1、p2
Φ(n) = (p1 -1) * (p2 - 1)
3、最终由φ(n)得到e 和 d 。
总共生成6个数字:p1、p2、n、φ(n)、e、d
关于RSA的安全:
除了公钥用到了n和e 其余的4个数字是不公开的。
目前破解RSA得到d的方式如下:
1、要想求出私钥 d 。由于e*d = φ(n)*k + 1。要知道e和φ(n);
2、e是知道的,但是要得到 φ(n),必须知道p1 和 p2。
3、由于 n=p1*p2。只有将n因数分解才能算出。
大概原理就是这样,mac上有自带的OpenSSL 同学们可以根据指令自己耍一下