加密的算法可以分为两类:对称和非对称。
加密和解密使用相同的密钥就是对称的加密,通信双方都使用一套加密解密的方式,原文通过加密后从一方直接发送的另外一方解密后恢复原文,
这个过程中假如有中间人劫持了加密的内容,然后就可以暴力破解(不过难度很高),那么信息就会被窃取了
AES
是一种对称的加密方式
RSA是一种非对称的加密算法。假如A要获取B的信息,过程:
A生成公钥和私钥,自己保留私钥 -> 发送给公钥给B(实际上公钥也就是给公众的,大家都可见)
B拿到A发过来的公钥后用公钥加密 -> 密文 -> A
A拿到密文后用自己的私钥解密 -> 明文
一般而言,算法的密钥通常是1024位,当然还有更高的
定义:如果两个正整数,除1外,没有其他公因子,那么这两个数互质
推导:
- 任意两个质数互质
- 一个数是质数,另外一个数不是质数的倍数,双方互质
- 两个数中较大的为质数,那么二者互质
- p为大于1的质数,那么p和p-1互质
- p为大于1的偶数,那么p和p-2互质
欧拉定理和费马定理可以查看:
RSA算法原理(一)
RSA加密算法一:历史与数学原理
RSA 算法详解
选择两个素数P、Q,假设分别为53和59(实际上是很大的,为了演示选择)
公钥的一部分n=PQ=53*59=3127
3127,转换为二进制就是110000110111,密钥长度12位
公钥的另一部分e为指数,e必须是整数,且n不能被e整除,e必须在1到phi(n)之间,这里我们假设e是3,从这里可以看出公钥的两个部分n和e都是随机定的。
什么是phi
?
phi(n)=(P-1)(Q-1)=3016
私钥d=[2phi(n)+1]/e
=(2*3016+1)/3=2011
假定加密一个数据为“HI”,其中假定根据字母表顺序(当然可以随意),设H=8,I=9,
所以“HI”就是89
密文c=89^e mod n
,即c = 89^3 mod 3127 = 1394
原文=c^d mod n
,即1394^2011 mod 3127 = 89
这样就获得了想要的明文了
按照上述的过程分析,要破解密文,那么就要知道私钥d的信息
要知道私钥d的信息,就要知道e和phi(n),其中n和e是任何人都知道的,所以难点在phi(n)
要知道phi(n),就要知道P和Q
要知道P和Q,就要对n进行因式分解
所以最终的源头是:因式分解n=P*Q
,从而获取私钥d
可是有这么简单吗?
我们加密的时候已知P和Q计算出n是很简单的,但是因式分解很困难,并且只能暴力破解,无穷尽地去运算
不过当量子计算机出现后就成为了可能
1994年数学家Peter Williston Shor提出的Shor’s algorithm:找出一个给定整数N的质因子 破解RSA-2048(2048-bit)的密钥可能需要耗费传统电脑10亿年的时间,而量子计算机只需要100秒就可完成。