威胁缓解技术
可以使用多种威胁缓解技术来更好地保护密码。 这些技术通过使用以下四种主要技术中的一种或多种来实现。
技术 | 说明 |
---|---|
CryptoAPI | CryptoAPI 提供了一组函数,可帮助你将加密例程应用于目标实体。 CryptoAPI 可以提供哈希、摘要、加密和解密来提及其主要功能。 CryptoAPI 还具有其他功能。 若要了解加密和 CryptoAPI,请参阅 加密概要。 |
访问控制列表 | ACL) (访问控制 列表是应用于对象的安全保护列表。 对象可以是文件、进程、事件或其他具有安全描述符的任何内容。 有关 ACL 的详细信息,请参阅访问控制列表 (ACL) 。 |
数据保护 API | 数据保护 API (DPAPI) 提供用于加密和解密敏感数据的以下四个函数: CryptProtectData、 CryptUnprotectData、 CryptProtectMemory 和 CryptUnprotectMemory。 |
存储的用户名和密码 | 存储功能,使处理用户的密码和其他凭据(如私钥)更简单、更一致、更安全。 有关此功能的详细信息,请参阅 CredUIPromptForCredentials。 |
这些技术并非在所有操作系统上都可用。 因此,安全性的提高程度取决于涉及的操作系统。 下面是每个操作系统中可用的技术。
操作系统 | 技术 |
---|---|
Windows Server 2003 和 Windows XP |
|
Windows 2000 |
|
以下威胁缓解技术使用四种技术中的一种或多种。 不能使用需要使用未包含在操作系统中的技术的技术。
从用户获取密码
允许用户设置密码时,强制使用强密码。 例如,要求密码的最小长度为 8 个字符或更多。 还应要求密码包括大写和小写字母、数字和其他键盘字符,例如美元符号 ($) 、感叹号 (!) 或大于 (>) 。
获取密码后, (尽可能少) 代码快速使用它,然后擦除密码的所有残留。 这可最大程度地减少入侵者“捕获”密码的时间。 此方法的权衡是必须从用户检索密码的频率;但是,应尽可能采用该原则。 有关如何正确获取密码的信息,请参阅 向用户询问凭据。
避免提供“记住密码”用户界面选项。 通常,用户需要此选项。 如果必须提供密码,至少请确保以安全方式保存密码。 有关信息,请参阅本主题后面的存储密码部分。
限制密码输入尝试。 经过一定次数的尝试而不成功后,将用户锁定一段时间。 (可选)将每次尝试的响应时间延长到最大值。 此方法旨在击败猜测攻击。
存储密码
切勿将密码以纯文本 (未加密) 存储。 加密密码可显著提高其安全性。 有关存储加密密码的信息,请参阅 CryptProtectData。 有关加密内存中密码的信息,请参阅 CryptProtectMemory。 将密码存储在尽可能少的位置。 存储密码的位置越多,入侵者找到密码的可能性就越大。 切勿将密码存储在网页或基于 Web 的文件中。 将密码存储在网页或基于 Web 的文件中,可以轻松泄露密码。
加密并存储密码后,请使用安全 ACL 来限制对文件的访问。 或者,可以在可移动设备上存储密码和加密密钥。 在可移动媒体(例如智能卡)上存储密码和加密密钥有助于创建更安全的系统。 在为给定会话检索密码后,可以删除卡,从而消除入侵者获得该密码访问权限的可能性。