2010-05-13 65 views
2

我正在开发一个电子银行iphone应用程序。
我正在使用带有XML签名的WSS来签署对客户的SOAP服务器的请求。
由于iPhone设备不能被信任(由于监狱破),客户 要求是密钥存储到钥匙链之前手动加密RSA密钥对(使用AES128)。iphone - 使用NSData的私钥进行数据签名

从我迄今为止发现,按键会自动生成时添加到钥匙串。
所以我的想法是事后提取数据(公共密钥在CryptoExercise例如提取方法相同),从钥匙串删除键,执行AES加密,再存放起来到钥匙链作为一个自定义的NSData。

1)你看到这个问题吗?
我在某处读取数据或删除密钥可能需要某种密码,虽然我没有得到什么密码。我会在今天晚些时候尝试这个,如果在此期间没有发布任何答案,我会发布答案。)

2)我找不到有没有什么方法可以使用这个密钥,而不需要在代码中实现更多的黑客?
它像SecKeyRawSign方法的接缝只接受一个SecKeyRef引用,它是指向钥匙串中的键的指针。有没有其他方法使用密钥的NSData进行签名?
我现在唯一的想法是在签名前使用SecItemAdd方法将未加密的密钥添加到密钥链中,并在签名后将其删除。但我不喜欢这样,因为它会一直发生,并且如果应用程序在钥匙从钥匙串中移除之前关闭(崩溃或其他),它将保持在那里,直到下一次应用程序启动。

更好的解决方案的任何想法?

问候

+0

试验和失败,我终于成功地做了以下的一整天后: - 生成密钥对 - 拿到钥匙 的字节数 - 从钥匙链 删除键 - 再次添加它们使用SecItemAdd方法 - 使用私钥签署一些数据 所以被留下的唯一的事情是我在2说关键手动,然后保存之前加密)每当我需要它,我会得到加密的密钥,将其解密,将其添加到钥匙串,执行签名,然后删除未签名的密钥。如果每次请求都做得太多,我可能会在每次运行应用程序时执行一次。 – pmilosev 2010-05-14 17:24:05

+0

只是一个提示,如果任何人有麻烦签名数据,一旦你手动添加私钥,不要忘记将kSecAttrKeyClass属性设置为kSecAttrKeyClassPrivate当您为SecItemAdd方法准备您的字典。 – pmilosev 2010-05-14 17:26:17

+0

我不知道答案,但苹果CDSA邮件列表是一个很好的地方,可以问这个问题http://lists.apple.com/mailman/listinfo/apple-cdsa – 2010-05-25 10:27:36

回答