Windows中是否有等效的OS X钥匙串用于存储用户密码?我将使用它来保存我的(桌面)软件使用的Web服务的用户密码。
从这个相关问题的答案(在桌面应用程序中保护用户密码(Rev 2))和众多可用的第三方密码存储工具中,我认为这种情况不存在-我是否坚持要求每次访问Web服务或只是对其进行混淆存储时都输入密码?
Windows中是否有等效的OS X钥匙串用于存储用户密码?我将使用它来保存我的(桌面)软件使用的Web服务的用户密码。
从这个相关问题的答案(在桌面应用程序中保护用户密码(Rev 2))和众多可用的第三方密码存储工具中,我认为这种情况不存在-我是否坚持要求每次访问Web服务或只是对其进行混淆存储时都输入密码?
Answers:
Windows的“传统”等效项是IE(pre IE 7),Outlook Express和其他一些程序使用的Protected Storage子系统。我相信它是使用您的登录密码加密的,可以防止某些离线攻击,但是一旦您登录,任何想要读取的程序都可以读取它。(例如,请参阅NirSoft的Protected Storage PassView。)
Windows还提供了可能有用的CryptoAPI和数据保护API。同样,我认为Windows不会采取任何措施来防止在同一帐户下运行的进程看到彼此的密码。
看起来《用户识别和认证的机制》一书提供了所有这些方面的更多详细信息。
Windows 8有一个称为“密码保险库”的钥匙串概念。Windows运行时应用程序(现代/地铁)以及托管桌面应用程序都可以使用它。根据文档:
应用程序和服务无权访问与其他应用程序或服务关联的凭据。
在Windows 8之前的版本中,数据保护API(DPAPI)最接近于钥匙串。尽管存储加密数据取决于开发人员,但可以使用此API加密任意数据。最终使用当前用户的密码对数据进行加密,但是可以包括用户或开发人员提供的“可选熵”,以进一步保护数据免受其他软件或用户的侵害。数据也可以在域中的不同计算机上解密。
可以通过对Crypt32.dll的CryptProtectData和CryptUnprotectData函数的本机调用或通过.NET Framework的ProtectedData类(对以前的函数进行有限的功能包装)来访问DPAPI 。
Passcape的文章DPAPI Secrets中提供了比您需要了解的更多有关DPAPI的信息。DPAPI中的安全性分析和数据恢复。
实际上,从MSDN看,他们建议使用的功能(而不是受保护的存储)是:
CryptProtectData
CryptUnprotectData
的链接CryptProtectData
位于CryptProtectData函数。
pOptionalEntropy
在相同的上下文中运行时,传递可以为其他应用程序读取您的应用程序数据提供某种保护。
一个免费且开源的密码管理器是“ KeePass”,它可以将所有密码保存在一处,这是Windows Credential Manager的替代产品。