加解密
- 原文:也叫明文,就是被隐藏的文字
- 加密法:指隐藏原文的法则
- 密文:伪文,值对原文按照加密处理后生成可公开传递的文字
- 秘钥:在加密法中起决定性的因素,可能是数字、词汇,也可能是一些字母,或者这些东西的组合。
加密的结果生成了密文,要想让接受者能够读懂这些密文,那么就要把加密法以及密钥告诉接受者,否者接受者无法对密文解密,也就无法读懂原文
对称加密算法
加密和解密都使用同一个秘钥
优点:算法公开,计算量小,加密速度快,加密效率高
缺点:秘钥的管理和分发困难,安全性较低
在数据传送前,发送方和接收方必须商定好秘钥,然后双方都必须要保存好秘钥,如果一方的秘钥被泄露了,那么加密的信息也就不安全了。
另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的的钥匙数量巨大,秘钥管理也会成为双方的负担。
加密过程:
- 加密:原文+秘钥=密文
- 解密:密文-秘钥=原文
非对称加密
加密和解密不是同一个秘钥
在非对称加密算法每个用户都有两把钥匙,一把公钥一把私钥。公钥是对外发布的,所有人都看的到所有人的公钥,私钥是自己保存,每个人都只知道自己的私钥而不知道别人的。而也正是在非对称加密算法中有加密和解密、加签和验签的概念。
加密和解密
用该用户的公钥加密后只能用该用户的私钥才能解密;
公钥是用来加密信息的,确保只能特定的人才能加密该信息。
举列:
拿A银行和小明来举例子吧。假设这2者之间是用不对称的加密算法来保证信息传输的安全性(不被第三人知道信息的含义及篡改信息)。大致流程如下:首先小明发了一条信息给A银行“我要存500元”。这条信息小明会根据A银行的对外发布的公钥把这条信息加密了,加密之后,变成“XXXXXXX”发给A银行。中间被第三者截获,由于没有A银行的私钥无法解密,不能知道信息的含义,也无法按正确的方式篡改。所以拿这条加密信息是没办法的。最后被 A 银行接受,A银行用自己的私钥去解密这条信息,解密成功,读取内容,执行操作。然后得知消息是小明发来的,便去拿小明的公钥,把“操作成功(或失败)”这条信息用小明的公钥加密,发给小明。同理最后小明用自己的私钥解开,得知知乎发来的信息内容。其他人截获因为没有小明的私钥所以也没有用。
这里需要注意的是:小明使用的是银行的公钥进行加密。
加签和验签
还有第二种情况,公钥是用来解密信息的,确保让别人知道这条信息是真的由我发布的,是完整正确的。接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。所以这种我们称之为加签和验签。
继续拿小明和银行 A 举例子。银行 A 发布了一个银行客户端的补丁供所有用户更新,那为了确保人家下载的是正确完整的客户端,银行A会为这个程序打上一个数字签名(就是用银行A的私钥对这个程序加密然后发布),你需要在你的电脑里装上银行 A 的数字证书(就是银行对外发布的公钥),然后下载好这个程序,数字证书会去解密这个程序的数字签名,解密成功,补丁得以使用。同时你能知道这个补丁确实是来自这个银行 A,是由他发布的,而不是其他人发布的。
过程
加签验签开始前,收发双方会提前交换彼此公钥。
加签:发送方用一个哈希函数从报文文本中生成报文摘要(一般使用MD5算法:不可逆的加密算法),然后用自己的私人密钥对这个摘要进行加密,得到的就是这个报文对应的数字签名。通常来说,发送方会把数字签名和报文原文一并发送给接受者。
一般用到的算法如RSA(非对称加密算法/数字签名算法,这种加密算法的特点主要是密钥的变化,DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了)
验签:接收方得到原始报文和数字签名后,用同一个哈希函数从报文中生成摘要A,另外,用发送方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。
数字签名的作用:
一是能确定消息确实是由发送方签名并发出来的,也就是验证发送的源头,因为别人假冒不了发送方的签名。
二是数字签名能确定消息的完整性,也就是防篡改。
存在的问题及解决方案(数字信封):
很容易看得出来,数字签名技术有一个问题,就是原始报文是明文传输的,这对一些敏感内容来说通常是不合适的,所以有些时候,这两种技术会结合起来使用。
发送方用自己的私钥完成数字签名,然后再用接收方的公钥对报文进行加密,将数字签名和报文传送给接收方。
接收方在拿到密文和数字签名后,先用自己的私钥对密文进行解密,得到明文,然后再用发送方提供的公钥进行验签,确保发送方身份的准确性,以及报文并没有被篡改过。
SSL协议原理
用以保障在Internet上数据传输安全
SSL利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证。
1.身份验证机制
基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。
2.数据传输的机密性
利用对称密钥算法对传输的数据进行加密。
3.消息完整性验证
消息传输过程中使用MAC算法来检验消息的完整性。
版权归原作者 葡萄枸杞桂圆干 所有, 如有侵权,请联系我们删除。