Avec cryptage AES-256 et le Vecteur d'Initialisation
J'ai une question relative à l'utilisation d'un Vecteur d'Initialisation dans le chiffrement AES. Je suis référençant les articles suivants /posts pour intégrer le chiffrement dans mon programme:
[1] Java 256-bit AES Chiffrement par Mot de passe
[2] http://gmailassistant.sourceforge.net/src/org/freeshell/zs/common/Encryptor.java.html
J'ai été à l'origine suivants erickson de la solution à partir du premier lien, mais, de ce que je peux dire, PBKDF2WithHmacSHA1 n'est pas pris en charge sur mon œuvre. Je me suis donc tourné vers le deuxième lien pour avoir une idée pour mon propre itératif de hachage SHA-256 de la création.
Ma question vient de la façon dont le IV est créé. Une mise en œuvre ([1]) utilise des méthodes de l'Monogramme classe à dériver le IV où sont les autres ([2]) utilise la deuxième 16 octets de la table de hachage que le IV. Tout simplement, pourquoi la différence et ce qui est mieux à partir d'un point de vue sécurité? Je suis un peu confus à la dérivation et l'utilisation de l'IVs (je comprends ce qu'ils sont utilisés pour, tout simplement pas les plus subtiles différences), de sorte que toute clarification est également très bienvenue.
J'ai remarqué que le deuxième lien utilise AES-128 plutôt que le cryptage AES-256 qui pourrait suggérer que, pour moi, que je dois aller jusqu'à SHA-512, je voulais utiliser cette méthode. Cela semble comme il serait regrettable exigence de l'utilisateur mot de passe devrait être de 16 caractères de plus pour assurer une distance de hachage sécurisé et cette application est destinée à un téléphone cellulaire.
Source est disponible sur demande, si elle est encore incomplète.
Vous en remercie d'avance.
IV
lors du chiffrement.OriginalL'auteur phobos51594 | 2010-12-21
Vous devez vous connecter pour publier un commentaire.
Le IV ne doit pas être générée à partir du mot de passe seul.
Le point de la IV que même avec la même clé et le texte en clair est ré-utilisé, un autre texte chiffré sera produite. Si le IV de façon déterministe produite à partir du mot de passe, vous obtiendrez le même texte chiffré à chaque fois. Dans la cité par exemple, un sel est choisi de façon aléatoire, de sorte génération d'une nouvelle clé, même avec le même mot de passe.
Il suffit d'utiliser un générateur de nombre aléatoire pour choisir un IV. C'est ce que l'algorithme de chiffrement est en train de faire à l'interne.
Je tiens à souligner que vous avez à stocker de l'IV (si vous utilisez la première méthode) ou un sel (si vous utilisez la deuxième méthode) ainsi que le cryptogramme. Vous n'aurez pas une bonne sécurité si tout ce qui est dérivé du mot de passe; vous avez besoin d'un peu d'aléatoire dans chaque message.
Vous devez stocker les IV avec le texte chiffré. Une façon de penser de l'IV est le premier bloc de texte chiffré, donc vous pouvez l'enregistrer comme un préfixe à la sortie réelle de l'algorithme de chiffrement. Ou que ce soit. Il n'a pas besoin d'être gardé secret; il suffit de les stocker avec le reste du texte chiffré.
Ignorer le commentaire précédent, je viens de voir ton edit. Qui fait encore plus de sens. De sorte que le motif serait quelque chose le long des lignes de: Hachage de mot de passe, générer IV à l'aide de Monogramme ou une sécurité aléatoire fonctionnalité chiffrer avec mot-IV-sel, stocker des valeurs précédentes, de les décrypter avec les valeurs stockées, jetez-IV, de célébrer, de répéter.
Comme phobos51594 noté, le lien [1] ne fonctionne pas sur Android en raison de "PBKDF2WithHmacSHA1" algorithme provoquant NoSuchAlgorithmException mais "PBEWITHSHA256AND128BITAES-CBC-BC" semble fonctionner ok.
OriginalL'auteur erickson
Cryptographes devrait générer IVs sécurisé à l'aide d'un pseudo-aléatoire générateur de nombre aléatoire.
Les développeurs d'applications doivent utiliser l'existant, sur l'étagère de la cryptographie. Je vous suggère d'utiliser SSL avec les certificats pour sécuriser le trafic de votre réseau et de GPG pour sécuriser les données d'un fichier.
Il y a tellement de détails qui peuvent faire une mise en œuvre de l'insécurité, comme le timing des attaques. Lorsqu'un développeur de l'application est de la prise de décisions entre AES 128 et AES 256, il est presque toujours inutile puisque vous avez probablement laissé une attaque temporelle qui rend la clé bits inutiles.
si vous mettez une clé de cryptage et d'un fichier crypté sur le même appareil? C'est inutile.
Sont de timing des attaques vraiment un problème dans les applications en réseau. Je suppose que la vitesse du réseau de la variabilité d'effacer ces informations. Si ce n'est un simple sommeil jusqu'à ce que Xms passé chiffrer commencer à résoudre le problème.
OriginalL'auteur Spike Gronim
Ma compréhension est que le Vecteur d'Initialisation est juste au hasard d'entrée à l'algorithme de chiffrement, sinon, vous obtenez toujours le même résultat pour une même entrée. Vecteur d'initialisation est stocké avec le texte chiffré, ce n'est pas secret en quelque sorte. Juste de l'utilisation de secure fonction aléatoire pour générer vecteur d'initialisation. PBKDF* algorithmes sont utilisés pour dériver les clés secrètes de la longueur désirée pour les algorithmes de chiffrement de l'utilisateur, les mots de passe saisis.
Première mise en œuvre d'un lien hypertexte permet tout simplement de Chiffrement objet pour générer un Vecteur d'Initialisation. Puis elle récupère cette généré IV pour stocker ensemble avec le texte chiffré.
Second utilise une partie de hachage octets. Toute approche qui génère de non-répétition des IVs est assez bon.
Plus importante propriété du IV est qu'il ne se répètent pas (très souvent).
Eh bien, la clé doit rester secrète. Le IV est public. Vous ne voulez pas utiliser la clé comme votre IV, ou vous serez la diffusion de votre clé secrète de tout le monde! Pour la même raison, mais dans une moindre mesure, c'est pourquoi vous ne voulez pas que votre IV fondées sur la clé à l'aide de hachage. ([2]), Car si l'algorithme de hachage a une faiblesse découverts, un attaquant peut tirer de votre clé à partir de l'IVs.
Ok, ça a du sens. Donc, [2] est vraiment juste une mauvaise pratique.
Il est certainement peu étrange... [2] utilise la touche + sel pour générer le hachage, les extraits et IV de hachage. Maintenant, le problème de l'aléatoire dépend de sel. Si quelqu'un passe même sel à chaque fois, ils seront même IV, qui est un problème. Problème de [2], c'est que désormais vous devez vous rappeler de sel, ainsi que IV 🙂
Dans [2], depuis le IV est entièrement réalisé à partir de sel+mot de passe vous n'avez pas besoin de stocker le IV. Vous pouvez simplement stocker le sel et le combiner avec le mot de passe lors de l'exécution pour générer le IV. Mais cette conception qui fait la force de la IV revient à la force du sel. Et je ne pense pas que je vois dans le code de la longueur des garanties du sel. Il pourrait être très faible en fonction de la façon dont il est utilisé.
OriginalL'auteur Peter Štibraný
Le IV est simplement une conséquence de l'utilisation de chaînage de blocs. Je présume que c'est plus qu'une API simple question de conception. Je suppose que vous savez que le raisonnement de l'aide, il est de sorte que le même texte en clair ne sera pas apparaître comme le même texte chiffré dans plusieurs blocs.
Penser à la récursivité à partir du dernier bloc, où le n-ième bloc de texte chiffré dépend d'une certaine manière le (N-1)ème bloc, etc. Lorsque vous obtenez pour le premier bloc, 0e bloc, vous avez besoin de certaines données pour obtenir commencé. Il n'a pas d'importance ce que les données aussi longtemps que vous le savez avant de tenter de déchiffrer. À l'aide de non-secret aléatoire de données comme un vecteur d'initialisation sera la cause identique messages cryptés sous la même clé pour en sortir complètement différent du texte chiffré.
Il est semblable au concept de salage d'un hachage. Et que le code source a l'air un peu louche pour moi. IV devrait tout simplement être frais-à-chiffrement-temps bits aléatoires dépendant de rien, comme un nonce. Le IV est fondamentalement partie du message crypté. Si vous re-chiffrer les données identiques avec la même clé, vous ne devriez pas être en mesure de corréler les messages. (Hey, réfléchir sur les conséquences de la corrélation par le texte chiffré longueur ainsi.)
En essayant de contourner la charge de la transmission de la IV avec les données chiffrées de défaites le but d'avoir un IV. À l'aide d'un IV, qui est dérivé à partir d'un secret est à côté de la question, il défait le but de ce fait. Le point est que le IV est frais et imprévisible, de sorte que précédemment messages cryptés ne peuvent pas être corrélés.
parfois, de nouvelles IV est calculé comme (précédente IV) + 1, de sorte qu'il peut être prévisible. Je ne suis pas sûr si cela présente certains problèmes ou pas.
Je vois ce que tu veux dire. Mais vous avez encore le besoin de transmettre le IV dans le cadre du message, implicitement ou explicitement, même si ce n'est fait que sur la première d'une série de chiffrement dans une session. Cependant, réfléchissez un instant au sujet de donner ce conseil, en l'absence de profondeur des détails sur l'algorithme de chiffrement. Prévisible, IVs, les chances d'être en mesure de corréler les messages serait certainement plus élevé (ou le même) que pour l'aléatoire IVs.
Puzzle: de 2 instances de mon chiffrement avec la même clé, en utilisant IVs qui commencent à 0 pour chaque instance et d'un incrément. Si j'ai toujours codé le même petit nombre de messages, il y aurait des corrélations. S'il n'y avait qu'une seule instance, puis en incrémentant maximise la période jusqu'à ce que l'on sait de répéter. Donc je suppose que le facteur déterminant serait la probabilité de générer une collision si vous avez utilisé généré de façon aléatoire IVs.
OriginalL'auteur Rob
Comme tout le monde ici, j'ai toujours connu IVs à être choisi au hasard en utilisant les algorithmes standards pour le faire.
La deuxième référence fourni par vous, cependant, ne semble pas être le faire. Regarde comme il sels d'un mot de passe et les tables de hachage. Puis faut que le hachage et le divise en deux moitiés. La moitié est de la clé de chiffrement, l'un est le IV. De sorte que le IV est dérivé du mot de passe.
Je n'ai pas de forte pauses pour une telle méthode, mais c'est une mauvaise conception. Le IV devrait être indépendante et aléatoire de tout sur son propre. Peut-être que si il ya une faiblesse dans l'algorithme de hachage ou si vous choisissez un mot de passe faible. Vous ne voulez pas être en mesure de tirer le IV de quelque chose d'autre ou il est envisageable de lancer la pré-calcul des attaques.
OriginalL'auteur AltF4