linux

好好理解下加密及签名的技术

Contents

加密和签名

加密和签名都是为了安全性考虑,但是有一些不同。加密是为了防止信息被泄露。而签名是为了防止信息被篡改。
1. 场景1:战场上,B要给A传递一条消息,内容为某一指令。

RSA的加密过程如下:
1. A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。
2. A传递自己的公钥给B,B用A的公钥对消息进行加密。
3. A接收到B加密的消息,利用A自己的私钥对消息进行解密。
在这个过程中,只有2次传递过程,第一次是A传递公钥给B,第二次是B传递加密消息给A,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行解密,防止了消息内容的泄露。

  1. A收到B发的消息后,需要进行回复“收到”。
    > RSA签名的过程如下:
    > 1. A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。
    > 2. A用自己的私钥对消息加签,形成签名,并将加签的消息和消息本身一起传递给B。
    > 3. B收到消息后,在获取A的公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是A回复的。
    在这个过程中,只有2次传递过程,第一次是A传递加签的消息和消息本身给B,第二次是B获取A的公钥,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行签名,即使知道了消息内容,也无法伪造带签名的回复给B,防止了消息内容的篡改。

但是,综合两个场景你会发现,第一个场景虽然被截获的消息没有泄露,但是可以利用截获的公钥,将假指令进行加密,然后传递给A。第二个场景虽然截获的消息不能被篡改,但是消息的内容可以利用公钥验签来获得,并不能防止泄露。所以在实际应用中,要根据情况使用,也可以同时使用加密和签名,比如A和B都有一套自己的公钥和私钥,当A要给B发送消息时,先用B的公钥对消息加密,再对加密的消息使用A的私钥加签名,达到既不泄露也不被篡改,更能保证消息的安全性。
总结:公钥加密、私钥解密、私钥签名、公钥验签

加密

加密一般分为两种,对称加密和非对称加密。

对称加密技术

“对称密钥加密技术”,也称作“秘密密钥加密技术”,要使用这种技术,就必须事先把密钥的值作为只有发送者和接收者才知道的秘密保护好。 这种加密技术的特征是在加密和解密的过程中使用数值相同的密钥。

缺点:
1. 密码容易暴漏,拿到密匙就可以对其进行解密。
2. 密匙需要传递,传递过程可能造成密匙丢失。

AES 算法

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密匙,流程图如下:

公开密钥加密技术

在公开密钥加密技术中,用于加密的密钥可以公开给全世界,因此称为“公钥”,而用于解密的密钥是只有自己才知道的秘密,因此称为“私钥”。
这种方式下,公钥和私钥是不一样的。

RSA 算法

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

RSA创建密钥的过程

数字签名

某个人承认了文件的内容是完整有效的,才会签名。数字签名也有同样的功能。
创建数字签名的过程

【文本数据的发送者】
1. 选取一段明文
例:NIKKEI
2. 计算出明文内容的信息摘要
例:(78+73+75+75+69+73)÷100 的余数 = 43​
3. 用私钥对计算出的信息摘要进行加密
例:43 → 66(字母B 的编码)
4. 把步骤(3)得出的值附加到明文后面再发送给接收者
例:NIKKEIB
【文本数据的接收者】
1. 用发送者的公钥对信息摘要进行解密
例:B = 66 → 43
2. 计算出明文部分的信息摘要
例:(78+73+75+75+69+73)÷100 的余数 = 43
3. 比较在步骤(1)和(2)中求得的值,二者相同则证明接收的信息有效
例:因为两边都是43,所以信息有效​

这里是使用私钥进行加密、使用公钥进行解密,这与之前的用法刚好相反。

Hash

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash算法可以将一个数据转换为一个标志,这个标志和源数据的每一个字节都有十分紧密的关系。Hash算法还具有一个特点,就是很难找到逆向规律。
了解了hash基本定义,就不能不提到一些著名的hash算法,MD5和SHA-1可以说是应用最广泛的Hash算法,而它们都是以MD4为基础设计的。

采用安全性高的Hash算法,如MD5、SHA时,两个不同的文件几乎不可能得到相同的Hash结果。因此,一旦文件被修改,就可检测出来。所以通常可以用来保证数据的完整性。

MD5

MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。

SHA

参考

  1. <计算机是怎么跑起来的>
    2.AES reference
  2. baidu wiki, Hash: https://baike.baidu.com/item/Hash/390310?fr=aladdin

一条评论

发表评论

您的电子邮箱地址不会被公开。