为什么需要加密?
密码学源于解决消息传递过程中的安全问题。
我们可以假设有这样一个情景:远在外地读书的小熊要交学费,给熊爸爸写了一封信,要熊爸爸汇款4000元到小熊的账户上。在这个过程中,有很多人都可以接触到这个信,那么假设
场景1
小熊的信件会有一些较为敏感的信息,比如身份证号,银行卡号等,被一些别有用心的坏人接触到后,可能会进行一些违法的事情 。 帮信罪
场景2
小熊将信交给邮递员,可是邮递员偷偷看了小熊的信,并悄悄改了银行账户,而这一切小熊和熊爸爸并不知情,最后熊爸爸将钱转入到他人的账户中。
场景3
经过前两次的教训,熊爸爸决定亲自将信交到小熊手里,可是却有人乔装打扮成小熊,骗过了熊爸爸,将信件骗走了。
经过上面三个场景可以知道,密码的出现其实就是为了解决下面三个问题:
1.信息保密问题
2.信息篡改问题
3.通信对象认证问题
密码系统
信息加密是指将信息转化为任何第三方都无法读懂,只有发送方和接收方能看懂的信息。例如暗号可以看作最简单的加密方式。如果存在一门外语只有通讯双方知道,那么将信息翻译成这种语言也算一种加密方式。当然,今天我们要聊的加密复杂的多。
密码系统是由 算法+密钥 所组成。明文和密钥是原材料,算法是加工的方式,产出就是密文。
什么是密钥?
密钥是一种参数,它是在明文转换为密文或密文转换为明文时算法的输入参数。可以理解成密码的钥匙。
什么是RSA?
维基百科:RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。
RSA是一种非对称加密算法,那什么是非对称加密算法呢?既然有非对称加密算法,是不是也有对称加密算法呢?
非对称加密和对称加密
1.非对称加密
非对称加密即公开密钥加密,是加密和解密使用不同密钥的一种加密方法,包括公开密钥和私有密钥。非对称加密即解密人和加密人使用不同的密码不一样,即加密人使用一个公钥将信息加密(如图右方三只小兔是加密方,类比为寄信人,去邮箱投递,使用钥匙A打开锁A寄信);解密人则使用一个私钥解密,获取信息(如图左方黑色小兔来邮箱取信,使用钥匙B打开锁B将信取出),整个过程信息是不变的,即寄出的信和收到的信其实是同一封,只是寄出与收的时候使用了不同的钥匙。但其实公钥和私钥是一对,使用公钥加密,只能使用对应的私钥来解密;如果用私钥来加密,那么只能用对应的那把公钥来解密才行
2.对称加密
对称加密即私有密钥加密,是加密和解密使用相同密钥的加密方法,加密过程和解密过程都使用同一个密钥,如图明文和密钥一起通过加密算法使其变成密文,解密时,密文也使用同一个密钥(加密解密均使用同一个密钥),解密出明文。类似逆运算。
RSA加密解密过程
RSA是现在最为使用广泛的非对称加密算法
算法原理:
就好比两个素数,让他们相乘得到了一个数,这时需要只通过这个数来得到那两个素数,就显得十分困难,如果能快速得找出两个素数,那么RSA就可以轻易破解了
加密解密原理:
RSA 加解密算法:
密文=明文^E mod N
明文=密文^D mod N
RSA 算法并不会像对称加密一样,用玩魔方的方式来打乱原始信息。RSA 加、解密中使用了是同样的数 N。公钥是公开的,意味着 N 也是公开的。所以私钥也可以认为只是 D。
我们接下来看一看 N、E、D 是如何计算的。
1、求 N
首先需要准备两个很大质数 a 和 b。太小容易破解,太大计算成本太高。我们可以用 512 bit 的数字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密钥对过程中产生的数,并不参与加解密。L 是 (a-1) 和 (b-1) 的最小公倍数
3、求 E(公钥)
E 有两个限制:
1<E<L
E和L的最大公约数为1
第一个条件限制了 E 的取值范围,第二个条件是为了保证有与 E 对应的解密时用到的 D。
4、求 D(私钥)
D 也有两个限制条件:
1<D<L
E*D mod L = 1
第二个条件确保密文解密时能够成功得到原来的明文。
由于原理涉及很多数学知识,这里就不展开细讲,我们只需要了解这个过程中用到这几个数字及公式。这是理解RSA 安全性的基础。
参考文章
加密就像玩魔方----图文详解对称加密(DES、AES) - 知乎 (zhihu.com)
图文彻底搞懂非对称加密(公钥密钥) - 知乎 (zhihu.com)
深入理解对称加密和非对称加密 - 知乎 (zhihu.com)