我的 OSX 应用程序应该如何存储用户的私钥?

How should my OSX App store the user's private key?

我正在构建一个使用 RSA 非对称密钥加密的应用程序。

public 密钥已发送到我们的 API,但私钥需要安全地存储在用户的计算机上。

一种选择是遵循与 SSH 相同的模式并将密钥存储在磁盘上(权限锁定为 0600 / rw----)。

这是否适合 OSX 钥匙链? 如果是这样,您将如何存储密钥?我见过的大多数 Cocoa C API 包装器都是以密码为中心的。

login 钥匙串非常适合您的应用,至少出于以下原因:
1. 它是基于用户的——每个用户都有自己的登录钥匙串
2. 其他用户无法访问
3. 它使用从您的帐户密码生成的密钥进行加密

文件系统方法具有上述#1 和#2 的优点,但它没有#3,因此钥匙串是可行的方法。至于密钥,我建议将私有密钥存储在钥匙串中,并将 public 密钥存储在用户默认值中(不太安全,但无论如何你都会分发该密钥)。

更多关于钥匙串的信息:
- https://security.stackexchange.com/questions/756/how-secure-is-keychain-on-os-x
- https://apple.stackexchange.com/questions/53579/how-is-the-system-keychain-secured-in-os-x(更多关于系统钥匙串,而不是登录钥匙串)