单向散列加密
单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,散列计算过程是单向的,即不能对固定长度输出进行计算获得输入信息。
场景:密码加密保存
这样保存在数据库中的是用户输入的密码的密文,且不能逆向计算得到密码的明文,因此即使数据库被“拖库”,也不会泄漏用户的密码信息。
虽然不能通过算法将单向散列密文反算得到明文,但可以通过彩虹表(人们常用密码和对应密文关系表)等手段可猜测破解。
通过给散列算法加点盐(salt)。可以增加破解的难度。
常用的单向散列算法有 MD5、SHA 等。单向散列算法还有一个特点就是输入任何微小变化都会导致输出完成不同,这个特性有时也会被用来生成信息摘要、计算具有高离散程度的随机数等。
对称加密
所谓对称加密是指加密和解密使用的密钥是同一个密钥(或者可以互相推算)。
对称加密通常用在信息需要安全交换或存储的场合,如 Cookie 加密、通信加密等。
优点:加解密效率高,系统开销小,适合大量数据加密。
缺点:加解密使用同一个密钥,远程通信的情况下如何安全地交换密钥是个难题。
常用算法:DES、RC 等。
非对称加密
加密和解密使用的密钥不是同一密钥,一个公钥,一个私钥。
非对称加密技术通常用在信息安全传输,数字签名等场合。
信息发送者 A 通过公开渠道获得信息接收者 B 的公钥,对提交信息进行加密,然后通过非安全传输通道将密文信息发送给 B,B 得到密文信息后,用自己的私钥对信息进行解密,获得原始的明文信息。即使密文信息在传输过程汇总被窃取,没有解密密钥也无法还原明文。
数字签名过程则相反,签名者用自己的私钥对信息进行加密,然后发送给对方,接收方用签名者的公钥对信息进行解密,获得原始明文信息,由于私钥只有签名者拥有,因此该信息是不可抵赖的,具有签名的性质。
在实际应用中,常常会混合使用对称加密和非对称加密。先使用非对称加密技术对对称密钥进行安全传输,然后使用对称加密技术进行信息加解密与交换。而有时,对同一个数据两次使用非对称加密,可同时实现信息安全传输与数字签名的目的。
非对称加密的常用算法有 RSA 算法等。HTTPS 传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。
密钥安全管理
信息的安全是靠密钥保证的。但在实际中经常看到,工程师经常把密钥直接写在源代码中,稍好一点的写在配置文件中,线上和开发环境配置不同密钥。总之密钥本身是以明文的方式保存的,并且很多人可以接触到,至少在公司内部,密钥不是秘密。
改善密钥安全性的手段有两种:
一种方案是把密钥和算法放在一个独立的服务器,甚至做成一个专用的硬件设施,对外提供加密和解密服务,应用系统通过调用这个服务,实现数据的加解密。由于密钥和算法独立部署,由专人维护,使得密钥泄漏的概率大大降低。但是这种方案成本较高,而且有可能成为应用的瓶颈,每次加密、解密都需要进行一次远程服务调用,系统性能开销也较大。
另一种方案是将加解密方法放在应用系统中,密钥则放在独立服务器中,为了提高密钥的安全性,实际存储时,密钥被切分成数片,加密后分别保存在不同存储介质中,兼顾密钥安全性的同时又改善了性能。
应用程序调用密钥安全管理系统提供的加解密服务接口对信息进行加解密,该接口实现了常见的加解密算法并可根据需求任意扩展。加解密服务接口通过密钥服务器的密钥服务取得加解密密钥,并缓存在本地(定时更新)。而密钥服务器中的密钥则来自多个密钥存储服务器,一个密钥分片后存储在多个存储服务器中,每个服务器都有专人负责管理。密钥申请者、密钥管理者、安全审核人员通过密钥管理控制台管理更新密钥,每个人各司其事,没人能查看完整的密钥信息。