11
votes

Android - Stockage sécurisé

Comment je dois stocker une clé secrète dans un appareil Android avec la seule possibilité d'utiliser la clé, pas la récupérer. Exemple: J'importe un clavier privé / générer un clavier RSA ou une clé symétrique d'une application à ce "stockage sécurisé". Maintenant, personne ne devrait pouvoir récupérer la clé secrète, pas même l'application originale. (La partie non secrète de la clé - la clé publique d'un clavier RSA - mais aucune partie d'une clé symétrique - devrait encore être récupérable, surtout si la clé est générée dans le stockage sécurisé)

Le keyStore doit maintenant agir comme une boîte noire, en fournissant une entrée pour les données cryptées et une sortie pour les données déchiffrées, par exemple, je nourris mes valeurs cryptées que je souhaite déchiffrer et récupérer les valeurs déchiffrées.

C'est un gros plus si cela est implémenté dans une puce de sécurité matérielle dans l'appareil Android, comme une puce de carte à puce, qui est inviolable, ce qui permettrait également de sécuriser les touches même si l'appareil est enraciné et cloné. < / p>

Toutes idées de téléphones mobiles Android, qui a une puce aussi résistante aux altérer? Des idées sur la manière d'utiliser un tel stockage?

a trouvé une question similaire: Stockage sécurisé Android Mais cela ne répond pas à mes questions.


2 commentaires

Dupliqué possible de Stocker une clé secrète sur Android


Donc, la seule réponse que vous avez obtenue est de vous dire que cela est totalement et totalement impossible. Peut-être devriez-vous repenser cela.


4 Réponses :


0
votes

Vous pouvez consulter certstore ou KeyStore , bien que je fasse Je ne sais pas comment ils sont mis en œuvre sur Android. J'ai fait des recherches autour mais je n'ai trouvé aucun exemples prometteurs, et j'ai trouvé un POST sur le groupe Android-Security-Discussions indiquant que cela pourrait même ne pas fonctionner sur Android.


0 commentaires

-2
votes

Ce que vous demandez est impossible. Un utilisateur avec un périphérique cassé en prison a plus de contrôle sur le périphérique que vous. Il n'y a pas d'endroit pour cacher quoi que ce soit, et il n'y aura jamais. Ce que vous recherchez est "(in) Security Bien que l'obscurité ".


2 commentaires

ROOK: Non, ce n'est pas impossible. Si un périphérique spécifique dispose d'une puce de sécurité inviolable matérielle à l'intérieur, comme une puce de carte à puce, mais incorporée dans le téléphone réel, même un téléphone brisé en prison ne peut en aucun cas extraire la clé secrète. Je cherche à la recherche de tels appareils et le possible d'utiliser la puce de sécurité de Android.


@sebastian Nielsen, alors quelles cartes à puce sont également faciles à casser. YouTube.com/watch?v=Tny7uvyafIQ



5
votes

Trouvé ce que vous devez faire pour obtenir un stockage sécurisé sur Android:

Vous devez acheter une carte MicroSD sécurisée, celle qui est conforme à la spécification ASSD (Advanced Security SD). C'est une carte MicroSD qui contient un élément sécurisé, souvent une solution PKI où vous pouvez générer une clé privée sur carte si la clé privée est impossible d'extraire, mais la clé publique peut être extraite et l'utiliser pour des choses Crypter que seule la carte MicroSD peut déchiffrer.

Deux exemples est certgate MicroSD (qui est disponible en version grand public appelé « SmartCard-HSM Android ») et qui est plus disponible en version grand public, est le G & D mobile carte de sécurité.

Cela fait un stockage sécurisé qui ne peut pas être piraté par un téléphone rooté, et il ne peut être copié, impossible par la définition. Le seul moyen est de forcer la-brutale clé privée en utilisant la clé publique comme la vérification si vous touchez correctement. Mais si vous utilisez RSA-2048, qui est trop techniquement impossible.

La raison en est que le téléphone semble fabricants verrouiller le téléphone intégré sécurisé Element aux applications approuvées du fabricant, de sorte que vous ne pouvez pas l'utiliser de façon arbitraire. La seule façon est fait ajouter un élément sécurisé au téléphone sous la forme d'une carte MicroSD.

(Cette réponse est valable uniquement pour les versions Android 5.0 avant)


0 commentaires

7
votes

8 commentaires

Oui. C'est quelque chose qui a été changé avec Android 6.0. J'ai suivi successivement la fonctionnalité de ma nouvelle application d'authentification Authentification QRSA. Lorsque cette question a été répondue, Android 6.0, et même pas 5,0 n'existait pas encore. Je modifier le statut de réponse à votre réponse en raison de la modification de l'architecture Android. C'est exactement ce que j'ai cherché lors de la pose de cette question.


Et non, permettant une "application aléatoire" d'utiliser la clé n'est pas si dangereuse, car tant que le matériau de clé n'est pas exposé en dehors du matériel sécurisé, cela signifie que l'utilisateur est censé exercer une bonne commande logique et physique de l'appareil. Si le dispositif est compromis, un stockage sécurisé des touches signifie que le dispositif peut être non compromis sans avoir à modifier ou remplacer le matériau clé. Pensez comme une clé de voiture. Tout le monde peut l'utiliser, même des individus non autorisés, mais aussi longtemps qu'il ne peut pas être copié, une clé de voiture peut être non compromise en le reprenant.


Le keyStore repose sur le système UID sécurisé. Si cela est compromis et que l'utilisateur n'a pas besoin d'entrer un secret (ou un mot de passe) pour utiliser une touche, une application spoofed peut utiliser la touche sans avoir besoin d'une entrée utilisateur. Un bon contrôle logique ou physique n'aidera pas.


La chose importante est ici la partie "non compromis". Si le système UID est compromis, oui, un attaquant peut utiliser la clé. De la même manière qu'un attaquant peut être capable d'utiliser votre clé de voiture pour utiliser votre voiture. La chose importante ici est la sécurité du matériau clé lui-même. Si le matériau clé lui-même est inaccessible, la clé elle-même est incopérable et sa facile à restaurer à partir d'un état compromis. Si toutefois, le matériau clé lui-même est compromis, la clé peut être considérée comme compromise à tout moment, même si elle est protégée par un code d'accès (comme quelqu'un aurait pu copier la clé et regardé par-dessus l'épaule)


Et ainsi, la récupération nécessite de modifier la clé, ce qui signifie que vous devez constamment changer la clé. Comparez avec la clé de voiture. Si quelqu'un aurait pu copier votre clé de voiture, vous devriez reprogrammer votre système de voiture à tout moment. Mais si la clé de voiture est incopiable, vous n'avez besoin que de vous assurer qu'elles ne peuvent être accessibles pour restaurer à partir d'un compromis. Même si quelqu'un aurait pu utiliser la clé, cela n'a pas d'importance. Dès que vous contrôlez la touche (et dans Android, allumez le mode avion par exemple et éliminez tout rat), la clé est non compromise.


Avec un secret ou un mot de passe, l'attaquant ne peut pas utiliser la clé de voiture sans le secret. En fait, si le téléphone est enraciné tout ce qu'ils ont est une clé inutile car ils n'ont pas le secret. Avec KeyStore de Android seul, ils peuvent à peu près faire tout ce qu'ils veulent. Ce que je dis ici, c'est que vous devez utiliser d'autres niveaux de sécurité en utilisant quelque chose comme le package Java.Security, vous pouvez générer des claviers, les chiffrer, puis les stocker avec le magasin de clés. Le fournisseur "AndroidKeyStore" ne vous laisse pas faire cela.


Un problème avec cette approche est que la clé est exposée en dehors du stockage sécurisé, ce qui signifie qu'un attaquant qui a à la fois le secret et la clé cryptée peut l'utiliser. Pour obtenir une sécurité matérielle, vous devez utiliser l'AndroidKeyStore. C'est le seul moyen d'obtenir la sécurité de la confiance en soi. Cependant, une bonne chose ici est de doubler chiffrer dans ce cas, par exemple, chiffrer à l'aide de Pubkey d'un fichier privé crypté, puis chiffrer à l'aide de Pubkey d'une clé AndroidkeyStore. Pour déchiffrer, vous avez tous deux besoin de la clé protégée par mot de passe et de la clé de protection matérielle AndroidKeyStore.


J'ai vérifié votre application à GitHub. Pour vos besoins, qui sont plutôt uniques, vous êtes 100% correct et les packages Java.Sécurité supplémentaires ne sont pas nécessaires. Cryptage La clé avec le mot de passe principal d'un utilisateur Avant de stocker dans le magasin de clés est destiné à un accès standard, comme si vous gardez à l'esprit un compte de messagerie, nous parlons dans le contexte du matériel sécurisé. qui signifie souvent les plus hauts niveaux de sécurité.