J'utilise SQLCIpher pour Android. J'ai fait toutes les choses nécessaires nécessaires pour Chargement des Libs comme mentionné dans http://sqlcipher.net/sqlcipher-for-android/
J'ai observé que vous définissez le mot de passe, c'est-à-dire la clé de: p> alors comment votre mot de passe est-il sécurisé d'un pirate informatique? Comme on peut accéder à un fichier Java. ? p> Y a-t-il une façon correcte là où je peux stocker le mot de passe? p> merci,
Nibs p> p>
3 Réponses :
Ensuite, comment votre mot de passe est-il sécurisé d'un pirate informatique? P> blockQuote>
Ce n'est pas. Codage dur une phrase secrète permet de simples démonstrations, cependant. P>
Y a-t-il une manière correcte où je peux stocker le mot de passe? p> blockQuote>
L'utilisateur doit fournir la phrase secrète de la base de données de l'utilisateur via votre UI. L'utilisateur stocke ensuite la phrase secrète dans la tête de l'utilisateur, ou peut-être que vous combinez ce qui se trouve dans la tête de l'utilisateur avec quelque chose d'autre pour une authentification légère à deux facteurs (par exemple, une adresse MAC de Bluetooth pair). P>
Je ne veux pas prendre aucune entrée de l'interface utilisateur pour le mot de passe. Je veux stocker une clé qui serait utilisée pour le cryptage.
@Nibs: Depuis quiconque souhaite pouvoir accéder à cette clé stockée, quel est le point du cryptage? S'ils peuvent accéder à la base de données, ils peuvent accéder à la clé.
Je lis ceci sur le lien sqlcipher.net/design lorsqu'il est initialisé avec une phrase sqlcher dérive les données de clé à l'aide de PBKDF2 (OpenSSL's PKCS5_PBKDF2_HMAC_SHA1). Chaque base de données est initialisée avec un sel aléatoire unique dans les 16 premiers octets du fichier. Ce sel est utilisé pour la dérivation de clé et garantit que même si deux bases de données sont créées à l'aide du même mot de passe, ils n'auront pas la même clé de cryptage. La configuration par défaut utilise 64 000 itérations pour la dérivation de clé (cela peut être modifié au moment de l'exécution en utilisant "pragma kdf_iter"). Donc, je suppose que c'est bien de garder le mot de passe dans le fichier .java
@Nibs: Garder le mot de passe dans le fichier Java signifie que quiconque souhaite obtenir le mot de passe. Ce que vous décrivez, c'est empêcher les attaques de force brute lorsque l'attaquant ne i> connaît le mot de passe.
Je voudrais suggérer l'approche suivante: p>
Alors, comment fonctionne l'accès de KeyStore? Voir Entrée de blog 1 et Entrée de blog 2 et le correspondant Responsentiel GitHub . La solution est disponible pour Android Version 2.1 à 4.3. P>
grandes mises en garde: strong> p>
Ce qui est oublié est le fait que la démonstration donnée par SQLCIpher est purement de démonstration. Il appartient à l'imagination du développeur de surmonter l'évidence. Un peu moins évident est que vous ne stockiez pas la clé dans une variable locale privée, car effectuez une recherche de chaînes contre vos fichiers de classe pourraient révéler votre clé, réduisant ainsi le dictionnaire nécessaire à une attaque réussie de la force brute. Ouvrez vos classes.dex dans un éditeur hexagonal et essayez-le. P>
Ce n'est pas les fichiers .java que vous devriez vous préoccuper, car seuls vos développeurs doivent être là-bas. Ce sont les fichiers .class. Le prochain niveau d'effort est un effort d'obscusage, mais cela ne limite vraiment que l'impatient. P>
Jetez un coup d'œil à cette discussion https://groups.google.com/forum/#!topic/sqlciphher/oke0ruwxeb8 p>
Vous pouvez "le cacher en vue de la vue": Et si vous utilisiez un mot de passe non différenciable d'une chaîne de couleur? I.e.: "# Fad005" ... ou cela pourrait être similaire à un identifiant, c'est-à-dire: "0x7f070005" ... juste une idée
@Artoodetoo: Pouvez-vous expliquer plus en détail. Je ne suis toujours pas clair à ce sujet. Merci
Vous pouvez utiliser une chaîne de mot de passe qui peut facilement confondre un pirate informatique. Il voit des cordes qui représentent des couleurs, il est habitué à les voir. Mais il ne sait pas que l'une de ces "couleurs" est votre mot de passe. Ou vous pouvez le masquer dans vos strings.xml, comme si c'était une chaîne normale, disons 2.00.48 R 15 String> B> - Juste une autre idée
@Artoodetoo: Merci Artoodetoo pour l'aide. Va essayer :)
Voir, ce sont des idées simples ... Vous pouvez masquer une chaîne dans les composants Argb de certaines couleurs personnalisées, par exemple ... ou même dans un PNG (cette technique est appelée «stéganographie»).