2010-05-13 11 views
2

Je travaille sur une application iphone e-banking.
J'utilise WSS avec XML-Signature pour signer les demandes au serveur SOAP du client.
Étant donné que le périphérique iPhone ne peut pas être approuvé (en raison de la prison), l'exigence du client consiste à chiffrer manuellement la paire de clés RSA (à l'aide de AES128) avant de stocker les clés dans le trousseau. D'après ce que j'ai trouvé jusqu'à présent, les clés sont automatiquement ajoutées au trousseau lors de la génération. Donc, mon idée est d'extraire les données par la suite (de la même manière que la clé publique est extraite dans l'exemple CryptoExercise), de retirer les clés du trousseau, de faire le chiffrement AES et de les stocker dans un trousseau comme NSData personnalisé.iphone - signature de données en utilisant NSData de la clé privée

1) Voyez-vous un problème avec cela?
J'ai lu quelque part que la récupération des données ou la suppression de la clé peut nécessiter une sorte de mot de passe, même si je n'ai pas eu ce mot de passe. J'essaierai ceci plus tard aujourd'hui et posterai la réponse si aucune réponse n'est postée entre-temps :)

2) Je ne peux pas trouver s'il y a un moyen d'utiliser cette clé sans implémenter plus de hacks dans le code?
Il semble que la méthode SecKeyRawSign accepte uniquement une référence SecKeyRef qui est un pointeur sur la clé dans le trousseau. Existe-t-il une autre méthode de signature utilisant le NSData de la clé?
La seule idée que j'ai dans le moment est d'utiliser la méthode SecItemAdd pour ajouter la clé non chiffrée dans le trousseau avant de la signer, et de l'enlever après la signature. Mais je n'aime pas ça car cela arrivera tout le temps, et si l'application est fermée (crash ou quelque chose) avant que la clé ne soit retirée du trousseau, elle restera là jusqu'à ce que disons la prochaine fois que l'application est démarrée.

Une idée pour une meilleure solution?

concernant

+0

Après une journée d'essais et d'échecs que je finalement réussi à faire ce qui suit: - générer une paire de clés - obtenir les octets des clés - supprimer les clés de porte-clés - ajoutez-les à nouveau en utilisant la méthode SecItemAdd - utilisez la clé privée pour signer des données Donc la seule chose qui reste à faire est de crypter la clé avant de la stocker manuellement, puis comme je l'ai dit en 2) quand j'en ai besoin, j'obtiendrai clé cryptée, décryptez-la, ajoutez-la au trousseau, faites la signature, puis supprimez la clé non signée. Si c'est trop à faire à chaque demande je pourrais le faire une fois par application. – pmilosev

+0

juste un indice si quelqu'un a des problèmes à signer les données une fois que vous avez ajouté manuellement la clé privée, n'oubliez pas de définir l'attribut kSecAttrKeyClass sur kSecAttrKeyClassPrivate lorsque vous préparez votre dictionnaire pour la méthode SecItemAdd. – pmilosev

+0

Je ne connais pas la réponse, mais la liste de diffusion Apple CDSA est un bon endroit pour poser cette question http://lists.apple.com/mailman/listinfo/apple-cdsa –

Répondre