加密和解密的密钥一样,比如用123加密就是用123解密,但是实际中密码都是普通数据在互联网传输的,这样一点密码被中间人截取并破解,加密直接被攻破。
在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。
哈希函数:将任意长度的消息处理为固定长度的字符串输出。
哈希值(消息摘要):就是经过哈希函数求得的值
如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。
数字签名利用算法(不一定是非对称算法)对原文hash值加密,然后附着到原文的一段数据。
现在A向B发消息。
那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。
要解决两个问题:1. A的身份认证 2. A发送的消息完整性 那么就要用到上面所讲的基础知识。
数字签名的过程如下图:
简单解释:
A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。
B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。
对明文进行摘要运算,得到实际收到的摘要,将两份摘要进行对比,如果一致,说明消息没有被篡改(消息完整性)。
疑问:
摘要使用A的私钥加密,如果被拥有A的公钥的第三者截获,不就可以获取到摘要了么?会不会对安全造成威胁。
不会。因为摘要是不可逆推出原文的。
“公钥加密算法”和“数字签名算法”无法保证公开密钥确实来自消息的发送者。因此,就算公钥被第三方替换,接受者也不会注意。数字证书的引出就是为了保证公钥的正确性。
数字证书由Certificate Authority( CA 认证中心)颁发。
A首先需要向认证中心申请发行证书,证明公开密钥Pa确实是由自己生成。认证中心中有认证中心自己的公钥Pc和私钥Sc。
A将自己的公钥Pa和包含邮箱信息的个人资料发送给材料中心。
认证中心对收到的材料进行确认,判断是否是A本人的资料。确认完毕后,认证中心会用自己的私钥Sc,根据A的资料生成数字证书。认证中心将生成的数字证书和资料放入同一个文件中,将这个资料发给A。这个就是A的数字证书。
A将作为公钥的数字证书发给B,B收到数字证书后,确认证书里的邮件地址确实是A的地址。接着B获得了认证中心的公钥。
B对证书内的签名进行验证,判断是否是认证中心给出的签名。证书中的签名只能用认证中心的公钥Pc验证,如果验证结果无异常,就证明这个证书确由认证中心发行。
确认了证书是由认证中心发行的,且邮件地址是A的之后,B就可以从证书中却出A的公钥Pa。这样公钥便从A传到了B。
(我觉得说白了就是,A要证明自己是A。它要靠一个第三方中介来证明。当然这个第三放中介具有很大的权威咯。
A要把自己的相关信息和自己的公钥给CA。
CA将A提供的资料,用自己的私钥)
然后就可以进行通信了。
与上面的数字签名相似,不同的是,使用了对称加密。这是因为,非对称加密在解密过程中,消耗的时间远远超过对称加密。如果密文很长,那么效率就比较低下了。但密钥一般不会特别长,对对称加密的密钥的加解密可以提高效率。图解如下:
https://www.cnblogs.com/SirSmith/p/4985571.html