之前我们提到在加解密算法中需要使用密钥。1976年,在美国斯坦福大学的迪菲(Diffie)和赫尔曼(Hellman)两人提出了公开密钥的新思想。这种思想下不仅可以对加密算法进行公开,也可以对加密用的密钥进行公开。进一步地,如果将加密密钥和解密密钥设定为不一样,并对解密密钥进行保密即可保证安全。这也就是著名的公钥密码体系,也称作非对称密码体制。
在这种思想基础上,麻省理工学院的里维斯特(Ronald Rivest)、沙米尔(Adi Shamir)和阿德勒曼(Len Adleman)提出第一个较完善的公钥密码体制——RSA体制。它是由三位发明人的姓氏首字母命名,是一种建立在大数因子分解基础上的算法。它是第一个成熟的、迄今为止理论上最成功的公钥密码系统。
公钥私钥在加解密中的应用示意图
公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密。
每支钥匙产生一个被使用来改变属性的功能。私有的钥匙产生一个私有改变属性的功能,而公开的钥匙 产生一个 公开改变属性的功能。如果一个功能是用来加密消息,另外一个功能则被用来解密消息。公开钥匙系统的优势是两个用户能够安全的沟通而不需交换秘密钥匙。因此它非常适合于提供认证,完整和不能否认的服务,所有的这些服务即是我们所知的数字签名。
数字签名,顾名思义,就是普通签章的数字化,它的特性是可以轻易被制造签章,但他人却难以仿冒。在数字签名算法中主要包括签署和验证。签署采用了私密钥处理信息或者信息的hash值而产生签章。验证则是使用公开钥匙验证签章的真实性。
值得指出的是,在密码学史上,还有一种叫做Steganography(隐写术)的信息隐藏技巧。它并非属于加密的范畴,但却起到了加密的效果。Steganography,来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganographia,该书书名源于希腊语,意为“隐秘书写”。
隐写的信息看起来像一些其他的东西,例如一张购物清单,一篇文章,一篇图画或者其他“伪装”的消息。 在当代,则更多的意味着将加密的数据进行隐藏。著名的有OpenStego应用工具。这是一款可以帮助用户将文件、加密数据隐藏在图片中的工具。
编后语:
从以上的介绍中我们不难发现,早期的加解密主要是通过机械、初级电子设备来实现。它们工作速度很慢、笨重,而现代的加解密则完全不同,更多的是依赖计算机和软件来实现。
通过计算机和软件的技术来实现加密,但也不意味着有更高的安全性,因为破解密码者同样可以通过计算机和软件来进行攻破。一个可靠的加密系统应该是采用了随机并且足够长的密钥来实现,此外还需要通信双方之间的沟通渠道有足够安全的保障机制。