背景
是这样的,小明和小王是商业合作伙伴,一个去了深圳一个去了背北京,现在他们之间要发短信商讨商业计划,小明想要告知小王他的想法,但是又怕短信内容被监听,并且还担心短信内容被篡改,那怎么办呢?
解决办法
这里就需要用到签名和加密的技术了,那怎么用呢?首先我们先来理解下什么是Hash,什么是对称加密,什么是非对称加密?
Hash
Hash就是生成摘要,比如小明要发一段内容,然后对这段内容进行Hash就生成了这一段内容的摘要,摘要是比较锻的一串序列,常用的算法用法MD5,SHA256。
对称加密
对称加密就是相同的密钥,然后对一段内容进行加密,也可以对之进行解密,优点是速度快,常用的算法有:AES和ChaCha20。
非对称加密
字面意思理解就是密钥不相同,会有一个密钥对,公钥和私钥,公钥加密可以用私钥解密,反之私钥加密也可以用公钥解密,常用的算法有RSA、ECC。
解决办法
好了,上面了解了摘要算法,对称解密和非对称加密,那么我们用这个就可以实现安全保密传输啦,鉴于非对称加密速度比较慢,所以我们这里不要直接用非对称加密加密短信内容,应该要用对称加密来加密,然后非对称加密加密对称加密的密钥(好吧,有点绕!).
- 1)、小明和小王在去北京深圳之前先交换了彼此的公钥。
- 2)、这里有短信内容、摘要算法SHA256、私钥(明)、公钥(明)、私钥(王)、公钥(王)
- 3)、首先小明编辑好了短信内容,然后生成一个对称密钥,用该对称密钥加密短信内容生成密文
- 4)、小明用小王的公钥对该对称密钥进行加密生成加密后的对称密钥,然后把加密后的对称密钥跟密文一起生成一个摘要
- 5)、小明用自己的私钥对摘要进行签名
- 6)、把第3,4,5步骤生成的密文、加密后的对称密钥、签名打包成一个数字信封发送给小王。
当小王接受到该数字信封后,首先会对密文和加密后的对称密钥用相同的散列函数生成摘要,然后用小明的公钥对签名进行解密,看是否跟摘要相同,若相同表明这个是小明发过来的信息,绝对不会被别人串改(除非小明的私钥被人知道了),然后小王用私钥对加密后的对称密钥进行解密获得对称密钥,再用对称密钥解密密文得到原信息。
完美,因为有对信息进行签名,所以保障了不会被篡改,又对信息进行了对称加密,保证了信息不会被泄露,就算被拦截了,没有小王的私钥也不知道解密密钥是啥。
那有人可能会说,要是小王和小明没有见过面,那么怎么交换公钥呢?这个就只能靠证书认证机构(CA)了,必进做不到对公钥又进行加密签名,这样子就无限循环了~