密码学知识基础
对称加密
对称加密相较于非对称加密更加快速,但是安全性不如非对称加密
百度简介
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要
简单解释一下
假如 张三要给李四发送一个数字1,两者约定一个公钥1
那么张三给李四发送的就是 数字2(1+1=2)
李四拿到的是数字2,李四可以通过公钥处理信息(-1)最终拿到数字1
当然正常情况肯定会比较复杂
整个对称加密的关键就在于双方约定的公钥(算法可以很复杂,但是一旦被监听就存在破解的可能)
例子:AES加密
非对称加密
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
也是简单解释一下
张三想要给李四发送信息m
张三和李四约定了一个公钥e(可公开加密),同时李四自己手里有一个私钥d(不公开)。
那么张三给李四发送的信息就是经过公钥e加密后的密文c
李四拿到密文c,就可以用自己的私钥d进行解密,最终拿到信息m
由于私钥只有李四拥有,所以密文是不怕被监听的
当然公钥和私钥的设置都有规律
我们通过学习最经典的RSA来了解一下
贴上百度百科的RSA计算过程
RSA算法的具体描述如下:
(1)任意选取两个不同的大素数p和q计算乘积
(2)任意选取一个大整数e,满足
(即e和φ(n)互质0)整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用)
(3)确定的解密钥d,满足
即
是一个任意的整数;所以,若知道e和φ(n),则很容易计算出d
(4)公开整数n和e,秘密保存d
(5)将明文m(m<n是一个整数)加密成密文c,加密算法为
(6)将密文c解密为明文m,解密算法为
然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密
上边很详细的把算法过程列了出来,但是我们要理解原理
来简单理解一下
为什么最后解密时,密钥不同但却可以得到原文?
稍做变换
其中的巧妙在于如何取得ed的值
数学真是奇妙,这里涉及一个欧拉定理,即
表示为:任何一个与n互质的正整数m,提取它的φ(n)次方并除以n取余数,则结果永远等于1,其中φ(n)为欧拉函数表示为小于等于n的正整数中,有多少个与n互质的数,举一个简单的例子
我们可以将欧拉定理魔改一下
是不是有头绪了,这样看来我们就可以得出e和d的规律了
有头绪了我们顺下来
最开始我们不是选择了两个不同的素数p,q吗?
求出n=pq,φ(n)=(p-1)(q-1)
之后我们就可以确定公钥e了
随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质
确定密钥e那么我们根据魔改的欧拉定理理所当然的求出来d,至此,我们的密钥完全生成
来讲一讲为什么RSA很难被破解
我们在加密过程中出现的数字
p
q
n
φ(n)
e
d
其中公开的只有n和e
假设有人想破解私钥d,那么他必须知道φ(n),φ(n)由p,q组成,p和q又组成了n,我们看似可以通过n来确定p和q,其实不然
整个加密过程大部分都是质数的取余运算,原因就在于,取余时一种不可逆的过程,只能通过因式分解来推导,但是因式分解是一件非常困难的事情,当大φ(n)足够大的时候,想要找出p,q现在来说是不可能的事情(未来量子计算机除外)。
维基百科这样说
“对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。”
贴一些自己查的知识
https://zhuanlan.zhihu.com/p/48249182
密码学很奇妙的(思考量很大),这只是密码学的冰山一角,后续会做一些Crypto的题目