说明:图例中,红框:需要保密的文本;绿框:不需要保密的文本。
所谓非对称,指的是:
- 用PrivateKey加密,就必须用PublicKey解密。
- 用PublicKey加密,就必须用PrivateKey解密。
1、加密
- 如果A需要把文件Text,通过不安全的网络 ,发送到B,则需要加密。为了解决对称加密的密码泄露的问题,使用非对称加密。
- 图中,红色框表示的B模块中的BPrivateKey和Text只有B知道,绿色框代表的BPublicKey网络上任何人都可以知道。
- A通过BPublicKey和Text利用RSA加密算法,得到 密文CipherText,则可以安全的在网络中传输。
- 密文CipherText传输到B 模块中,B通过BPrivateKey进行解密,得到文本Text。
2、签名
- B需要把文本Text发送至A,但是需要证明文本是由B发送的,则B需要进行数字签名。
- B把BPrivateKey和Text,通过RSA的加密算法,得到密文CipherText,但是此密文没有任何的保密作用,因为它是使用B的BPublicKey解的,网络上的任何人都可以解密的。
- 如果A通过BPublicKey把密文成功解密为文本Text,则证明此文本是B发送的。因为只有用B的PrivateKey加密出来的文本,才能用B的PublicKey解密,任何拿不到B的PrivateKey的第三方生成的密文,是无法通过B的
- PublicKey解密密文的,是无法进行伪造的。
因为B生成的CipherText无任何的保密作用,则直接看作为明文,因此此签名流程可以优化为:
- 因为B生成的密文CipherText在网络上谁都可以解密,因此就没有必须加密整段密文了,只需要加密一个摘要就可以了。
- 通过密码学中的的Hash算法,得到固定长度的摘要,并且跟原来的文本Text没有任何的关联,但是Hash的过程是公开的,但是此Hash过程是不可逆的。
- B利用PrivateKey对摘要进行加密,得到了一个签名,把签名附上原来的文本,一起发送给A。
- 此时A就需要验证B发来的文本,A可以通过公开的过程把文本算出摘要,再通过BPublicKey和接收到的签名计算出一个摘要,如果两个摘要是相等的话,则可以证明文本是B发送过来的。如果摘要不匹配,则是伪造的。