安全存储密码的最佳方法
本文关键字:最佳 方法 密码 存储 安全 | 更新日期: 2023-09-27 17:57:13
计算机上保存密码以使无法访问密码的最佳方法是什么?我想将它们存储在加密的注册表中。我希望您能够重置密码,但这不适用于服务器。这是为了将它们存储在计算机上以记住它们并自动登录。
重要编辑:我需要能够从程序中检索纯文本密码,而不是其他任何地方。
CryptProtectData 和 CryptUnprotectData 是您在 Windows 上的最佳选择。它们使用登录凭据加密数据,因此密码不会受到磁盘攻击。但是,在同一用户下运行的任何程序都可以访问它们。我建议将它们存储在权限阻止其他程序访问它们的文件中(例如需要管理员权限才能访问的文件)。
托管类 ProtectedData 使用这些函数,因此可以从 C# 使用它。
您也可以使用 P/Invoke 直接使用这些函数。这里有一些示例代码可以做到这一点。
根据其他要求进行扩展:
有一种方法可以确保您的程序是唯一能够访问密码的程序,而无需使用管理员权限启动程序,尽管这将需要更多的工作。
基本思想是这样的:创建在安装应用程序时安装的 Windows 服务。当应用程序想要存储/检索用户的密码时,应按需从应用程序启动它。该服务将仅提供对具有权限集的文件的读/写访问权限,以便只有管理员才能读取/写入它。额外的安全性来自与进程的 IPC 连接,该连接将使用命名管道。然后,您可以使用 GetNamedPipeClientProcessId(抱歉,您需要 P/Invoke)通过查找连接到管道的客户端的进程 ID 来验证请求。
根据您对安全性的担忧程度,如果您有权访问有效的证书,则可以使用代码签名来验证进程 ID。或者,您可以验证可执行文件的校验和或类似性质的内容。
这是我能想到的在Windows上创建您正在寻找的安全性的唯一方法。应用程序还应使用受保护的数据对数据进行加密,然后再将数据移交给 Windows 服务,以防止硬盘攻击。
我正在寻找的是AES。这似乎是存储密码的简单方法。当然,这只是为了记住计算机上的密码,因此用户不必键入密码。
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard