相当于Linux上的Data Protection API

Mat*_*tus 16 .net java linux windows security

Microsoft Windows 2000及更高版本公开了Data Protection API(DPAPI),它为每个用户或每个系统的上下文加密数据.呼叫者不提供用于加密数据的密钥.而是使用从用户或系统凭证派生的密钥对数据进行加密.

此API通过ProtectedData类在.NET中方便地公开:

// Encrypts the data in a specified byte array and returns a byte array
// that contains the encrypted data.
public static byte[] Protect(
    byte[] userData,
    byte[] optionalEntropy,
    DataProtectionScope scope
)

// Decrypts the data in a specified byte array and returns a byte array
// that contains the decrypted data.
public static byte[] Unprotect(
    byte[] encryptedData,
    byte[] optionalEntropy,
    DataProtectionScope scope
)
Run Code Online (Sandbox Code Playgroud)

Linux上是否有等效的API? 奖励是它可以方便地与Java集成.

如果没有,我有什么选择?

Mat*_*tus 5

Linux 上的用户级密钥存储有两个选项:

这并没有解决对系统级密钥存储的需求。

  • @rob,你能详细说明一下为什么它们不是“DPAPI 的替代品”吗?它们在架构上可能有所不同,但它们实现了相同的目标:允许应用程序安全地存储信息,而无需考虑用户身份验证。 (2认同)
  • 默认情况下,@RobertChristian dpapi 也与用户帐户绑定 - 除非您使用 localmachine 标志,这在任何意义上都是不安全的。 (2认同)

Edw*_*uck 1

它看起来并不比 PGP 或Pretty Good Privacy更先进(或更不先进) 。有一些可用于 PGP 的 API,我记得其他人称赞的 API 是Bouncy Castle

以下是某人如何使用 Bouncy Castle 的示例

根据您的具体需求,可能会有更好的 API 或解决方案。

  • @EdwinBuck“因为 DPAPI 专注于为用户提供保护,并且需要密码来提供这种保护,所以它逻辑上使用用户的登录密码进行保护。” 这里的问题是您无权访问用户的登录密码,但该功能为您提供了以密码为密钥的加密。这让您不必担心其他用户(甚至是 root)访问您的数据(在 Linux 情况下,需要注意的是该用户当前尚未登录)。 (3认同)