加密的意义与方法
加密涉及到发送者、接收者,发送者加密数据,接收者解密数据。加密的意义不在于保护数据的安全,因为如果能保护数据的安全,也就没有必要加密;加密的意义在于即使数据被窃取,第三方也无法正确地读取数据。换言之,加密是为了保证数据的隐秘性,宁为玉碎不为瓦全。
加密看上去是一个过程,实际上涉及三个部分。如果接受者(解密者)是发送者(加密者)本身,那么只需要前两个部分就行。
一、数据的转换。要将明文转为密文,也是狭义的加密。本质上是将数据的隐秘性转换为密钥的隐秘性,原本是需要保证整个数据的隐秘,现在只要保证密钥的隐秘。保密工作量大大减轻,并且使得数据本身与秘密相分离,加密后的数据可随意复制、传输。这方面以AES为首的各种对称加密可以很好地做到。
二、数据的确认。必须要确认数据是完整、正确的,即解密后的数据就是加密前的数据。虽然即使数据有一丁点的异常,根据对称加密的原理,解密后大概率也是无意义的数据,可以一眼看出来。但这样毕竟还是无法完全区分。为此,需要制作一份原始数据的清单(哈希值),将解密后的数据和清单进行比对,能够匹配说明数据正确无误。这份清单必须是未经加密的,否则又会陷入需要另一份清单来确认这份清单的循环。制作清单的就是神奇的单向映射函数,可以看作单向的不需要密钥的加密,既保证无法通过清单逆向出原始数据,同时不需要密钥,避免了循环论证。最重要的一点,加密/解密具有不可预测性,第三方无法知道修改后的数据会被接收方解密成什么数据,也就无法制作出假的清单。
三、身份的确认。最后一步,也是最难的一步,是确认密钥交付给了正确的接受者以及确认密钥是来自正确的发送者。使用对称密码难以完成身份的认证,因为发送者和接收者使用相同的密钥,如果让别人知道了这个密钥,那么就无法确认对方的身份;而如果不使用相同的密钥,就意味着每两个人之间要维持一个彼此知晓的密钥,成本实在太过高昂。而非对称密码天然具有身份验证的功能,因为私钥只私人持有,公钥可大量复制,一个人只要管理好自己的私钥,就能和所有人进行通信。神奇之处就在于将密钥拆分为公钥和私钥后,保密工作量随之再度减轻,从保证一大堆密钥的隐秘降低为保存自己一个人的私钥。由此构成了私钥(公钥)即身份的认证关系。(如果使用对称加密,无法完成这种认证,因为一个人有大量密钥,同时每个密钥至少对应了两个人)但这只是工作量的减轻,问题还是原来的问题,一开始交换密钥/公钥时,如何确认确实是对方?这是永远无法确认的事情。只能通过一个权威的机构,出来担保这个公钥就是这个人的,完成最终公钥和身份的对应。那谁来完成这个机构的身份认证的,只能不断循环证明,最终落到了用户电脑上的根证书。