OS X 10.9上/usr/bin/security
的手册页指出,-x
有security import
个选项可指定private keys are non-extractable after being imported
。
这是如何实施的?通过这种方式导入的私钥是否真的变得完全不可提取,或者是否还有办法通过某种内存转储来保存它们?应用程序如何仍然使用这些密钥进行加密?
答案 0 :(得分:5)
我不确定应用程序仍然使用这些密钥,但根据https://reverseengineering.stackexchange.com/questions/6043/extract-non-extractable-private-key-from-os-x-keychain,它似乎只是作为CSSM_KEYATTR_FLAGS keyAttributes
struct SecKeyImportExportParameters
的位属性实现的名为 CSSM_KEYATTR_EXTRACTABLE
。
如上所述,导入完成后,-x
选项被指定为security import
时,将特别省略此属性。
根据SecItem.h,OS X 10.6引入了 kSecAttrIsExtractable
。
随后,在尝试执行包装导出时,安全框架中的多个位置似乎检查以确保在执行任何类型的导出之前设置了此CSSM_KEYATTR_EXTRACTABLE
位,并在以下情况下返回错误属性未设置。