在OS X的钥匙串中,不可提取的私钥是什么意思?

4
在 OS X 10.9 上,/usr/bin/security 的手册页面指出,security import 有一个 -x 选项,用于指定导入后的私钥不可被提取。

这是如何实现的呢?通过这种方式导入的私钥是否真的完全不可提取,还是在某种内存转储方式下仍然可以获得?应用程序如何使用这些密钥进行加密?

“通过这种方式导入的私钥真的变得完全不可提取吗…”考虑到它们进入iCloud并可以被苹果工程师恢复,我不认为它们是不可提取的。你也可能在Time Machine备份中找到它们。 - jww
一个类似的问题已经在这里讨论过:https://mail.openjdk.java.net/pipermail/jdk-dev/2021-May/005455.html,其中包括以下报告:https://bugs.openjdk.java.net/browse/JDK-8266439 - JYC
1个回答

6
我不确定应用程序如何仍然使用这些密钥,但根据https://reverseengineering.stackexchange.com/questions/6043/extract-non-extractable-private-key-from-os-x-keychain,似乎这只是作为CSSM_KEYATTR_FLAGS keyAttributes的位属性实现的,这个结构体是struct SecKeyImportExportParameters的一部分,名为CSSM_KEYATTR_EXTRACTABLE 根据上述内容,在执行导入时,当使用security import命令并指定-x选项时,该属性将被特别省略。
根据SecItem.h文件,这个kSecAttrIsExtractable属性是在OS X 10.6中引入的。
随后,在尝试进行包装导出时,安全框架内的几个地方似乎会检查以确保在进行任何类型的导出之前设置了CSSM_KEYATTR_EXTRACTABLE位,并在未设置该属性时返回错误。

很好,你去opensource.apple.com是个不错的想法。在看到你自己回答之前,我也去过那里。顺便说一下,接受自己的答案也是可以的。 - jww
@jww,我认为问题仍然存在于应用程序如何实际使用这些密钥,所以我暂时不会接受答案。 - cnst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接