问题标签 [dpapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 在具有用户存储的网络场环境中使用 DPAPI / ProtectedData
我想知道是否有人在网络农场环境中成功地将 DPAPI 与用户存储一起使用?
因为我们的应用程序是最近从 1.1 转换为 2.0 的 ASP.NET 应用程序,所以我们使用了一个直接调用CryptUnprotect
方法的自定义包装器。但这应该与ProtectedData
2.0框架中可用的方法相同。
因为我们在网络农场环境中运行,我们不能保证进行加密的机器将是解密它的机器。(也因为机器故障不应该破坏我们的加密数据)。
因此,我们拥有的是一个服务组件,它在我们每个 web 盒子上的特定用户帐户下的服务中运行。根据建议,此用户设置为具有漫游配置文件。
我们遇到的问题是,在一台机器上加密的信息无法在另一台机器上解密,这会因 win32 错误而失败:
'密钥在指定状态下无效'。
我怀疑这是因为我犯了一个错误,让加密服务以用户身份在多台机器上运行,因此让用户同时在多台机器上登录。
如果这是问题所在,那么如何在网络场环境中将 DPAPI 与用户存储一起使用?
python - 在 Python 中使用 DPAPI?
有没有办法在带有 Python 的 Windows XP 上使用 DPAPI(数据保护应用程序编程接口)?
如果有一个可以做到的,我宁愿使用现有的模块。不幸的是,我无法找到使用 Google 或 Stack Overflow 的方法。
编辑:我采用了“dF”指向的示例代码并将其调整为一个独立的库,该库可以简单地用于在用户模式下使用 DPAPI 进行加密和解密。只需调用返回加密字符串的 dpapi.cryptData(text_to_encrypt) 或返回纯文本的反向 decryptData(encrypted_data_string)。这是图书馆:
asp.net - 带有 ASP.NET 服务帐户的 DPAPI
我想在将数据保存到数据库之前对其进行加密。对数据的访问由应用程序控制。所以任何具有管理员角色的人都应该能够看到数据。我希望能够保护用于加密/解密数据的加密密钥。我不想使用 DPAPI 机器密钥,因为服务器托管多个应用程序。
我想知道是否可以创建一个服务帐户并使用该帐户的登录凭据来加密 web.config 文件中的密钥。
谢谢
c# - 为什么使用 DPAPI 加密时会得到不同的输出?
我在 C++ 中使用 DPAPI 来加密一些需要存储在文件中的数据。问题是我需要从 C# 读取该文件,所以我需要能够:
C++ 加密,C++ 解密(运行良好)
C# 加密,C# 解密(运行良好)
C++ 加密,C# 解密,反之亦然(不工作)
在 C# 中,我使用 DllImport 来 pInvoke CryptProtectData 和 CryptUnprotectData 方法,并按照此处的说明实现它们。我知道在 C# 中我可以使用 ProtectedData 类中包含的方法,但我以这种方式(使用 DllImport )来确保两个代码(c++ 和 c#)看起来和工作起来几乎相同。
现在奇怪的是,即使两个代码看起来相同,我也会得到不同的输出,例如对于这个文本:
“纯文本”
在 C++ 中,我得到:
01 00 00 00 D0 8C 9D DF 01 15 D1 11 8C 7A 00 C0 4F C2 97 EB 01 00 00 00 2E 6F 88 86 E6 16 9B 4F 9B BF 35 DA 9F C6 EC 12 00 00 00 00 02 000 00 00 00 02 000 03 66 00 00 A8 00 00 00 10 00 00 00 93 06 68 39 DB 58 FE E9 C4 1F B0 3D 7B 0A B7 48 00 00 00 00 04 80 00 00 A0 00 00 00 10 00 00 00 0D 4 4 4 00 00 0D 36 34 15 97 DC 5B 1F 6C A4 19 D9 10 00 00 00 F5 33 9F 55 49 94 26 54 2B C8 CB 70 7B FE EC 96 14 00 00 00 C5 23 DA BA C8 23 6C 0B B3 859 69 AE 06 00 76 A7 63 E4
在 C# 中我得到:
01 00 00 00 D0 8C 9D DF 01 15 D1 11 8C 7A 00 C0 4F C2 97 EB 01 00 00 00 2E 6F 88 86 E6 16 9B 4F 9B BF 35 DA 9F C6 EC 12 00 00 00 00 0 02 000 00 00 00 02 000 03 66 00 00 A8 00 00 00 10 00 00 00 34 C4 40 CD 91 EC 94 66 E5 E9 23 F7 9E 04 9C 83 00 00 00 00 04 80 00 00 A0 00 00 00 10 00 4 00 00 72E 6 62 0A D1 11 1D 4D EF 13 1D B2 6F 10 00 00 00 81 9D 46 37 D1 68 5D 17 B8 23 78 48 18 ED 06 ED 14 00 00 00 E4 45 07 1C 08 55 99 3 BC 80 A4 59 D9 3B 3 39 05 C4 BB
如您所见,第一个字符是相同的,但其余字符不同,因此,如果有人知道为什么会发生这种情况,我将不胜感激。
谢谢。
C++ 中的代码:
C# 中的代码:
(您可以在此处查看我的 C# 代码的外观,因为与此 Microsoft 示例中的代码相同)
.net - 存储密码以针对另一个系统进行身份验证
这不是常见的问题“存储纯文本用户的密码是否安全?”。不,这不安全,我们都知道。
我正在编写一个小应用程序,它应该针对外部系统进行身份验证以执行某些操作,唯一可用的身份验证方法是通过用户名和密码。它是为人类设计的,无法更改。
有多个用户可以访问我的应用程序,并且每个用户都单独进行身份验证,但是他们都针对外部系统“共享”相同的身份验证数据,理想情况下,这些数据由应用程序透明地管理。
“愚蠢”的解决方案是以纯文本形式存储用户名/密码并将其用于身份验证,但显然这并不安全。密码可以加密,但如果有人闯入系统怎么办?
可能的解决方案:使用 DPAPI 透明地加密/解密密码(甚至可能是用户名)。这是一个好主意吗?这安全吗?多台机器的设置如何(机器之间的加密兼容)?
你有什么额外的建议吗?
.net - 使用 DPAPI 保护加密密钥:明显的漏洞?
我有一个基于 Windows.Forms 的 .NET 桌面应用程序,它将特权信息存储在磁盘上的文件中(不使用 .NET 配置文件),使用对称加密算法(例如使用 MS 的 CryptoAPI 的 TripleDES)进行加密。该文件必须在多个程序运行/机器电源循环中读取/写入,也就是每次都使用相同的密钥/IV。这里明显的问题是如何保护密钥(可能还有 IV),这里的几个问题只是简单地说“使用 DPAPI”并给出一个往返加密/解密的简单示例。
我已经知道如何使用 DPAPI,但使用它来保护要馈送到另一个加密方案的密钥/IV 似乎存在一个明显的问题。考虑以下代码:
由于您必须分配一个 SymmetricAlgorithm 派生类的 Key 和 IV,攻击者不能在这一点上设置一个断点,并轻松找出 Key/IV 是什么吗?
我的问题如下:
- 我是否错过了使用 DPAPI 保护密钥的要点?你会怎么做?
- 我应该只使用 DPAPI 来加密我的文件吗?因此,不需要密钥/IV 存储。
- 我注意到存在用于非对称加密的 CspParameters。这本质上是比对称更好的选择吗?(在我的场景中,完全不对称与不对称)
谢谢!
.net - DPAPI + 熵
我们有一个 WPF 应用程序,允许我们的用户下载加密内容,我们希望提供离线解密此内容的能力。这个想法是下载密钥并使用 DPAPI 存储它们,但我在使用熵参数时遇到了问题。
有没有办法生成熵以始终用于 DPAPI 函数而无需硬编码/存储它们?
谢谢托尼
c# - 使用 DPAPI 时安全地存储可选熵
所以我正在尝试使用 DPAPI 存储对称密钥。一切都很好,但是熵怎么办?这里回答的问题确实没有提供足够的洞察力。这似乎是一个滑坡——我可以使用机器商店来存储熵,但是是什么阻止了有人这样做呢?注意:我使用用户范围存储当前密钥。
所以我的问题是 - 使用 DPAPI 存储熵的最佳方法是什么?
asp.net - 经典 ASP 与 ASP.NET 加密选项
我正在一个新页面是 ASP.NET 而旧页面是经典 ASP 的网站上工作。作为在 Windows 环境中开发的新手,我一直在研究最新的技术,即 .NET,当关于 COM 对象的遗留问题出现时,我就像头灯中的鹿一样。
网站上的安全性令人憎恶,但我已经根据 DPAPI 机器模式,根据http://www.4guysfromrolla.com/articles/021506-1.aspx轻松加密了 web.config 文件中的 connectionStrings。我知道这种方法不是最安全的,但总比没有好,这就是 ASP.NET 页面的方法。现在,我质疑如何对经典 ASP 页面使用的连接字符串进行类似的加密。
一个复杂的因素是网站托管在我没有管理员权限甚至命令行访问权限的地方,只有 FTP。此外,我想避免管理密钥。
我的研究发现:
DPAPI 与 COM 互操作。似乎这应该已经可用,但我唯一能找到讨论这个的是 CyptoUtility (请参阅http://msdn.microsoft.com/en-us/magazine/cc163884.aspx),它没有安装在托管服务器上。
还有很多其他第三方 COM 对象,例如来自 Dalun Software http://www.dalun.com的 Crypto ,但这些也不在托管服务器上,而且他们希望我要求你做某种密钥管理。
托管服务器上有 CAPICOM,但 M$ 已弃用它,许多人报告说它不是最容易使用的。我不清楚是否可以避免使用 CAPICOM 进行密钥管理,类似于对 ASP.NET 使用 DPAPI。如果有人碰巧知道,请告诉我。
我可以在 ASP.NET 中编写一个 Web 服务,并让经典的 ASP 页面使用它来获取解密的连接字符串,然后将它们存储在应用程序变量中。我不需要使用 SSL,因为我可以使用 localhost 并且不会通过 Internet 发送任何内容。以最简单的形式,我可以基于一个简单的 XML 流实现有人称之为穷人的版本,但是,我真的希望避免任何开发,因为我很难相信经典 ASP 没有像有这样的简单解决方案对于 ASP.NET。
也许我错过了一些选择...请求建议...
wcf - 加密 App.config 中的配置组 System.ServiceModel
我们正在部署一个客户端应用程序,需要加密 system.serviceModel 配置组。我一直在 StackOverflow 上搜索最好的方法,大多数响应要么是“将 app.config 重命名为 web.config,使用 ASP.NET 实用程序加密,然后部署”或“覆盖”保护部分的安装方法”。
我们正在使用 ClickOnce,因此应用程序是按用户安装的,因此我们可能会为每个用户使用 DPAPI。
我知道如何通过 Protect/Unprotect 部分加密/取消加密部分,但我不知道调用这些部分的最佳位置。
黑暗中的一些镜头:
在安装时调用保护、在应用启动时取消保护以及在应用关闭时进行保护。
安装时调用保护,取消保护是自动完成的。这让我感到困惑,因为我找不到 DPAPI 发挥其魔力的基本方式,而且我不相信我不理解的东西。