2010-05-13 31 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

回答

相關問題