从产品角度看密码学的发展过程
在产品经理眼中任何产品的形成都是基于用户需求,脱离用户需求的产品终究会被淘汰,任何产品的形成和发展都是在不断的满足用户的需求,密码学的发展过程也是如此。计算机网络的初衷就数据共享,然而数据共享过程中的信息安全显得尤为重要,密码学发展了起来。
下面就以一个小例子讲述密码学的发展过程:
A和B通过网络进行数据通讯,信息内容完全暴露在网络当中,任何人都可以获取数据内容。如图C就是一个信息盗窃者。
此时,网络使用者A,B产生了需求:信息内容不能被其他人获取。
于是产生了非对称加密方式,非对称加密就是通信双方通信过程中,消息发送者利用一个叫做密钥的东西对消息进行加密,而消息接收者同样需要应用这个密钥对消息进行解密。其他人即使盗取了加密的信息,在没有密钥的情况下,不能通过任何方式获得消息内容。目前比较成熟的对称加密算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。有了对称加密后A与B的通信过程如下图
如图,非对称加密基本满足了网络使用者的需求,即使C盗取了网络数据,也不能获得A,B的消息内容。但是这种方式产生了一个新的问题,A,B间的密钥如何传递,如果密钥在传递过程中被C盗取,那之后的基于对称加密算法的通信仍是不安全的。
此时产生了新的需求,就是要安全的传递密钥,不能被其他人获取,也就是说通信过程中的第一条信息一定要确保安全。显然此时仍使用对称加密是无论如何都不能满足需求的。因为C随时可以盗取新的密钥解密加密的密钥。于是,非对称算法应运而生,在非对称加密算法中,密钥是成对出现,称为公钥和私钥,公钥公布于网络当中,私钥自己保存。使用公钥加密的消息只能通过私钥解密,使用私钥加密的消息只能通过公钥解密,目前成熟的非对称加密算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC等。
此时A,B的传递密钥的过程变为,A利用B的公钥对消息加密,B接受到加密的消息后利用B的私钥对消息进行解密,获取消息内容。如图所示:
至此密钥的传递过程完成。即使C拿到了加密后的密匙,由于C没有B的私钥,所以无法解密消息内容。上述过程看似完美,但仍然存在两个重大问题:
B的公钥由谁保管,如果C冒充此人将自己的公钥发送给A,而B使用了C的公钥加密通信密钥,那么C盗取消息后便可利用自己的私钥解密消息内容获得通信密钥。
由于B的公钥公布于网络,任何人都可以获取,那么C冒充A利用B的公钥加密通信密钥传递给B,B解密后利用该密钥进行信息加密,那么C便可轻松的获取消息的内容。
对于第1个问题的解决方法就是找到一个公认的第三方组织,保管注册用户的公钥。如果A需要B的公钥,就可以通过第三方拿到B的公钥。这样 第一问题就解决了,如果你非要说如果C黑掉了第三方组织怎么办?我只能说那就没得办了,密码学揪到最后没有安全性可言。
而第2个问题的解决方法要引入一个叫做信息摘要的东西,信息摘要也称为数字指纹,网络中任何小到一个字母a,或是一个1000G的文件都有自己独一无二的数字指纹。常见的提取数字指纹的算法就是md5, 通过md5算法。信息摘要经过加密就是我们常说的数字签名。接下来我们谈谈如何利用信息摘要解决问题2。
解决问题2的根本就在于如何证明B接受到的消息的确是A传输的。可以逆用上述的过程利用A的公钥证明A就是A!听起来有点拗口,下面详细说一下通信的过程。
A的加密过程:
A使用B的公钥加密信息M内容。
提取信息M的数字摘要。
利用自己的私钥加密M(数字签名)。
然后将这两部同时传递给B。
而B接受到消息后处理过程如下,
利用B的私钥解密消息,获得消息内容M。
提取M的数字指纹。
利用A的公钥提取解密数字签名。
对比提取的消息摘要和解密的数字签名,如果相同,说明消息的确来自于A。
至此A将密钥安全的传递到了B,后续就可以使用密钥进行通信了。这也是Https的工作过程。
最后图解: