Disons que j'ai besoin d'accéder à un service web à partir d'une application iPhone. Ce service web exige des clients de signer numériquement des requêtes HTTP afin de prouver que l'application "sait" un secret partagé; une clé de client. La demande de signature est stockée dans un en-tête HTTP et la demande est tout simplement envoyé via HTTP (pas de HTTPS).
Cette clé doit rester secret à tout moment mais doit être utilisé par l'application pour iPhone.
Alors, comment voulez-vous stocker de manière sécurisée cette clé étant donné que vous avez toujours dit de ne jamais stocker des données sensibles sur le côté client?
L'utilisateur moyen (99% des utilisateurs) seront heureux de vous suffit d'utiliser l'application. Il y aura quelqu'un (un ennemi?) qui veut que le secret clé du client pour le service ou la clé du client propriétaire de mal par la voie de l'emprunt d'identité. Une telle personne peut jailbreaker son téléphone, l'accès aux binaires, exécutez "chaînes" ou d'un éditeur hexadécimal et fouiner. Donc, juste le stockage de la clé dans le code source est une idée terrible.
Une autre idée est de stocker la clé dans le code, pas une chaîne littérale, mais dans un NSMutableArray créé à partir de l'octet de littéraux.
On peut utiliser le Trousseau mais depuis une application iPhone n'a jamais à fournir un mot de passe pour stocker des choses dans le Trousseau d'accès, je suis circonspect sur le fait que quelqu'un ayant accès à l'application sandbox peut et sera en mesure de simplement regarder ou trivialement décoder les éléments qui y sont.
EDIT - j'ai donc lu ce sujet le Trousseau: "Dans l'iPhone OS, une application a toujours accès à son propre trousseau éléments et n'a pas accès à toute autre application des articles. Le système génère son propre mot de passe pour le trousseau d'accès, et les magasins de la touche de l'appareil de telle manière qu'il n'est pas accessible à toutes les applications."
Donc, c'est peut-être le meilleur endroit pour stocker la clé.... Si oui, comment puis-je expédier avec la clé pré-entré dans l'application trousseau? Est-ce possible? Sinon, comment pourriez-vous ajouter la clé au premier lancement sans la clé dans le code source? Hmm..
EDIT - Déposé de rapport de bug # 6584858 à http://bugreport.apple.com
Merci.