目录
3.为什么在使用非对称加密算法时,正确的使用方法是公钥加密,私钥解密。
以非对称加密RSA为例,包含非对称秘钥:私钥和公钥。
1.加密和签名的过程分别为:
公钥加密,私钥解密
私钥签名,公钥验签
2.加密和签名的区别:
加密:对明文加密,只有用指定的密钥才能解密,防止数据被窃取,泄漏
签名:对明文签名,通过指定的密钥来验证签名,防止数据被篡改
误解:不要把签名也理解成加密(虽然本质上仍然是加密,但签名的目的不同,技术实现也有所不同)。不要认为只要签名了,数据就不出被泄漏了。这是一个很大的误解。
签名的作用
签名的作用不是防泄密,而是防篡改。举例说明:
你经常给你的女朋友写信,里面有绵绵情话,有个快递员很坏,喜欢偷拆看别人的信,看完后再放回去。有一天,你发现你给女朋友写信的内容被曝光了,你意识到肯定是有人偷看了你写的信,于是你决定对信件内容进行加密,你采取了一套加密算法,如明文I love you,会被转化为密文:324678967702。你把解密的密钥给了女友,这样只有她能解密信件内容,这样快递员即使偷看了信,也不知道里面写的是啥。目的就达到了。
但是这个快递员真的很坏,他心怀不满,他说你不是不让我看你的信的内容吗?那么我就把你的信件给改了,比如,把I love you的密文:324678967702给改成1234567890,你女朋友收到信后,解密出1234567890的结果可能是:你欠我的一万块钱什么时候还。你女朋友很生气的问你,你信里都写的啥呀,莫名其妙的。你意识到,信件的内容肯定是被篡改了。因此要防止别人篡改,你又有了新的想法:对信息内容追加签名。
你每次写完信,除了对信件内容进行加密外,还会针对信件明文生成一个签名(一般不会对明文直接签名,先会用对明文进行哈希得到摘要,然后对摘要进行加密,这个密文就叫签名),这套算法会保证:只要信件明文有任何改动,生成的签名都是不一样的。
这样就做到了防篡改。因为,你的女友收到信件其实包含两个密文,一个是明文加密后的内容,称之为密文;另一个是明文摘要加密后的内容,称之为签名。她收到你的信后,先要进行验签操作,即先用私钥解密密文,得到解密后的明文。那这个明文与原来的明文一致吗?她用同样的算法对收到明文做哈希,得到的摘要记为摘要2。然后再用公钥解密签名,得到摘要1。如果摘要2与摘要1相同,那么就说明信件明文或密文没有被篡改;如果两个摘要不同,那么她马上明白,密文不可信,被篡改过,即验签不通过。
这里用到的签名算法使得:1.任何人不能篡改内容,只要篡改了,签名就会不同,验签就会失败。2.不能伪造签名(中间人在篡改内容后,用自己私钥伪造一个签名),因为同样会验签失败。
而且用来做签名的密钥是一对非对称密钥,公私钥是成对的,用私钥生成的签名,只有用对应的公钥才能验签通过。
至此就理解了:签名与加密完全是两个概念,也不是必须一起都实现才安全,要根据需求而定。例如,我传输了一个下单信息:买一杯奶茶,这个信息并不是什么机密,但是要防止被人篡改改成:买2杯可乐,所以只需要对内容做签名防篡改就可以了,并不需要加密。
3.为什么在使用非对称加密算法时,正确的使用方法是公钥加密,私钥解密。
在加密场景下,私钥和公钥的关系,相当于钥匙和锁的关系。
私钥=钥匙,公钥=锁。私钥只有一把自己保存,而公钥锁可以复制很多把。
当要传输隐私数据时,就给对方一把锁,让对方把重要的隐私数据锁起来,传给你,然后你用私钥解锁。因为私钥在你手上,所以只有你能解锁。
而公钥之所以叫公钥,意思是可以公开给任何人。任何人拿到一把锁都是没有意义,所以对锁的定义就是去锁住重要的东西,用钥匙才能打开锁,即用公钥去加密重要信息,用私钥去解密,而不能用私钥加密,公钥解密。(注意,是在加密场景下,不能用私钥加密,公钥解密。而签名的场景正好相反,是私钥加密,公钥解密。不过通常会说成私钥加签,公钥验签)。无论如何,永远要记住,私钥代表着你身份和权力,要保护好私钥。
综上所述,对于签名,一定是私钥签名,公钥验签。毕竟私钥才能代表你的身份,你签名的文件,可以分发给任何人,也就是说任何人都需要拿到公钥来验证签名。如果反过来就不行了,任何拿到公钥的人都可以冒充你进行签名,那可是不行的。
参考文献: