12.4 小结
账号管理模块是众多系统中最重要的模块之一,用户密码则是这个模块中的最敏感的信息。倘若以明文方式将其存储在数据库或文件中,都极有可能成为泄露用户隐私的系统漏洞。
BBS、BLOG、SNS等B/S系统均以用户为核心,账号管理模块是这些系统中唯一的安全屏障。在设计这些系统时,我们需要注意合理隐蔽用户的私密信息,尽量避免敏感信息在系统中直接暴露。当用户遗失密码时,由系统根据随机信息重置密码,并以邮件方式告知用户新密码。利用消息摘要算法的单向性,我们可以隐蔽用户的敏感信息。不同的摘要算法对应的摘要值长度可能有所不同,摘要值长度与系统安全性成正比,与系统的资源的消耗成反比。我们需要考虑摘要运算时间消耗、数据库存储空间消耗,以及系统改造所需的开发工作量,最终为系统选择合适的安全实现。
Base64算法经常被用来隐藏数据,虽然算法本身不具备安全性,但同样起到了数据隐藏的作用。如果我们对一些网络交互数据进行分析,会发现大部分数据实际上仅仅是做了简单Base64编码,电子邮件亦是如此。
通过对称加密算法,我们可以很方便地对聊天数据进行加密/解密。但是,仍有一个前提:我们需要将密钥妥善地交给进行聊天会话的交互双方,使其能够使用同一份密钥进行加密/解密。如果基于该密钥及算法的软件被破译,就意味着密钥的破解,这也是对称加密算法的软肋。常规的做法是,定期同步最新密钥,保持密钥不断更新,预防密钥被破解。
如果担心加密的数据在传递过程中被拦截并篡改,我们可以使用消息摘要算法对原文提取摘要,并将该摘要与密文一同发送给接收者,并由接收者验证该消息。
当然,本书在介绍非对称加密算法时曾分析过MSNShell如何使用非对称加密算法RSA完成数据加密/解密。这个交互过程,其实是一套类似于SSL/TLS协议的交互过程。如果数据的交互双方需要使用非对称加密算法对数据加密,不如使用SSL/TLS协议并配合数字证书完成数据加密交互。
非对称加密算法通常配合数字证书使用,并以数字证书作为公钥的载体,用于数据加密/解密以及数字签名/验证。这种基于数字证书的应用通常应用在基于C/S结构的网络应用中。如今炒得火热的移动应用是标准的基于C/S结构的网络应用。手机软件作为客户端,可以捆绑数字证书与服务器进行加密交互。
单向认证和双向认证是最为常用的两种认证方式,需配合数字证书和SSL/TLS协议完成底层数据加密/解密,其核心算法是非对称加密算法。
Web Service应用基于明文协议(WSDL、SOAP协议等),是最为常用的数据交互应用系统,配合使用单向认证或双向认证可以确保数据的机密性、认证性。