6

在 Mac 应用程序中,我需要以安全的方式存储从服务器发送给登录用户的私钥,并在需要时以编程方式将其取回。我知道钥匙串是存储私钥的最佳位置。是否有任何示例代码可用于实现此目的?

我可以使用“Security.framework”的“SecKeychainItemImport”方法将私钥添加到钥匙串,但在从钥匙串中取回私钥时遇到问题。我尝试使用“SecKeychainItemCopyAttributesAndData”和“SecKeychainItemCopyContent”方法从钥匙串中获取私钥。但到目前为止还没有运气。

我还在博客中读过提到“.ssh”隐藏文件夹中的私钥存储。但我觉得将私钥存储在钥匙串中提供了更高级别的安全性,因此其他人无法轻松访问私钥。

4

2 回答 2

4

钥匙串的目的之一是通过不将其数据暴露给应用程序来保护私钥。为防止意外泄露私钥,CSSM_KEYATTR_EXTRACTABLE | CSSM_KEYATTR_SENSITIVE默认情况下会标记这些项目;即,只能使用 获取他们的数据SecKeychainItemExport,并且只能采用受密码保护的格式。

安全框架中有 API 使用提供的密钥项加密/解密/签名/验证等数据,而无需将原始密钥数据放入应用程序的地址空间。(这些操作通常由一个单独的特权进程完成。)

如果出于某种原因您确实需要访问私钥的原始位,则需要在将私钥导入钥匙串时为此做好准备。您需要在 的参数中设置keyAttributesCSSM_KEYATTR_EXTRACTABLE(即不带敏感位)。keyParamsSecKeychainItemImport

于 2011-10-29T20:30:31.947 回答
0

是的,钥匙串就是您在这里使用的。您想先阅读文档,然后查看 Apple 的示例代码。

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html

http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html

于 2011-06-29T13:26:06.840 回答