非对称加密对我们现在来说,其实是比较常见的,Https,git代码管理,最新的bitchain交易时,都使用到了非对称加密做核心的数据传输来完成.而数字签名,数字证书也是非对称加密的衍生品,
非对称加密
非对称加密的主要实现是通过一对私钥(privateKey)和公钥(publicKey)完成的,这个过程就是原始信息用私钥加密(公钥加密也可以),再用对应的公钥解密(对应的私钥),
这里要说明用私钥还是公钥加密两种情景都是有可能的,具体看提供方的使用情景,非对称加密的原理就是不管你用哪一个钥匙加密都无法只能用另一把才能解密出来,这个时候也就说你用私钥加密的数据,用自己手里的私钥是无法解密出来的.这就是所谓的非对称加密.
当然这个过程也能反着用,BB给AA发信息,用AA的公钥加密后发给BB,只有AA拥有的密匙能解开这套加密,目前比特币的支付过程底层就是这个,收款方提供一个公钥,付款方将自己的比特币用这个公钥加密,发给收款方,说白了这个过程只是将比特币付给了这个公钥对应的私钥,只有它能够解密这个内容.
(比特币支付原理:这里写链接内容)
那什么是数字签名呢?
数字签名
在实际的使用中整个流程是这样的:
- 假如需要AA给BB发数据,这时AA使用私钥,提供了配对的公钥.
- BB拿到AA的公钥就可以解密AA发给自己的信息了,同时为了证明这个信息是AA发送的,AA还会在原始数据中加入一条自己原始数据的hash值,这个hash值也会使用私钥加密并且一起加密发给BB,
- BB会用自己拿到的公钥解密拿到这个hash值和原始的数据,通过相同的hash算法算出原始数据的一个hash和发过的值做对比,如果相同则说明这个原始数据是没有被修改过的.
但是整个过程中其实还有不够安全,如果BB的公钥在使用前已经被CC掉包了,这时CC可以用自己的私钥伪装成AA来给BB发送数据,一样是能够走这个流程,这个问题该怎么被解决呢?
数字证书
为了避免上面说到的问题,BB要求AA去做一个数字证书公正,也就是一个简称CA的家伙,CA就相当于一个中立的公证处,CA会将AA的公钥和一些像关联的信息用自己的私钥加密,得到的东西就是AA的数字证书,这个时候BB只需要拿着CA的公钥,就能解密出AA的公钥,在那这个解密出来的公钥,去解析AA发过来的加密数据,这样就能有效的避免,之前提到的问题.
如果你用过各大银行的网上银行,他们的加密就是使用这个方式实现的,这也是https的加密原理.