【发布时间】:2011-02-19 01:04:27
【问题描述】:
我正在开发一个电子银行 iphone 应用程序。
我正在使用带有 XML 签名的 WSS 来签署对客户 SOAP 服务器的请求。
由于无法信任 iPhone 设备(由于越狱),客户
要求是在将密钥存储到钥匙串之前手动加密 RSA 密钥对(使用 AES128)。
从我目前发现的情况来看,密钥在生成时会自动添加到钥匙串中。
所以我的想法是之后提取数据(与 CryptoExercise 示例中提取公钥的方式相同),从钥匙串中删除钥匙,进行 AES 加密,然后将其作为自定义 NSData 再次存储到钥匙串中。
1) 你觉得这有什么问题吗?
我在某处读到检索数据或删除密钥可能需要某种密码,尽管我没有得到什么密码。我今天晚些时候会试试这个,如果在此期间没有答案,我会发布答案:)
2) 如果没有在代码中实施更多 hack,我是否找不到任何方法来使用此密钥?
它看起来像 SecKeyRawSign 方法只接受一个 SecKeyRef 引用,它是指向钥匙串中密钥的指针。是否有其他方法可以使用密钥的 NSData 进行签名?
我目前唯一的想法是在签名前使用 SecItemAdd 方法将未加密的密钥添加到钥匙串中,并在签名后将其删除。但我不喜欢这样,因为它会一直发生,如果应用程序在从钥匙串中移除之前关闭(崩溃或其他情况),它将一直保留在那里,直到下次启动应用程序。
有更好的解决方案吗?
问候
【问题讨论】:
-
经过一整天的试验和失败后,我终于设法做到了以下几点: - 生成密钥对 - 获取密钥的字节 - 从密钥链中删除密钥 - 使用 SecItemAdd 方法再次添加它们- 使用私钥对一些数据进行签名所以唯一剩下的就是在手动存储之前加密密钥,然后正如我在 2) 中所说的,每当我需要它时,我都会得到加密的密钥,解密它,将它添加到钥匙串,进行签名,然后删除未签名的密钥。如果对每个请求都执行此操作太多,我可能会在每次应用运行时执行一次。
-
在您手动添加私钥后,如果有人在签署数据时遇到问题,只是一个提示,当您为 SecItemAdd 方法准备字典时,不要忘记将 kSecAttrKeyClass 属性设置为 kSecAttrKeyClassPrivate。跨度>
-
我不知道答案,但是 Apple CDSA 邮件列表是问这个问题的好地方lists.apple.com/mailman/listinfo/apple-cdsa
标签: iphone rsa nsdata signing keychain