6
votes

Qu'est-ce que PBEWithMD5AndDes?

J'apprends l'algorithme de cryptage en Java et je tombe sur cet algorithme:

  SecretKey key = SecretKeyFactory.getInstance(
                    "PBEWithMD5AndDES").generateSecret(keySpec);

Je sais que cela signifie Cryptage basé sur mot de passe avec les algorithmes MD5 et DES. Je sais que MD5 et DES sont deux clés de chiffrement d'algorithme distinctes, mais que signifie exactement PBEWithMD5AndDes en tant qu'algorithme?

Il n'y a pas beaucoup de ressources en ligne qui fournissent une bonne explication concernant cet "algorithme".

J'espérais que quelqu'un pourrait donner une explication simple et brève sur la façon dont cela diffère d'un algorithme MD5 normal ou DES normal.


7 commentaires

Il est plus sécurisé au lieu de dire en utilisant uniquement MD5?


La collision MD5 peut être trouvée assez rapidement, ne l'utilisez plus si possible


Alors, comment la combinaison de MD5 et DES résout-elle ce problème?


Cela ralentit la recherche exhaustive et rend la recherche de collisions MD5 un peu plus difficile, même si vous essayez d'utiliser un algorithme PBE plus moderne si possible, tel que PBKDF2, SHA256 avec AES, Argon2, ..


Donc PBEWithMD5AndDES devrait être évité aussi?


Parfois, vous ne pouvez pas l'éviter, comme travailler avec d'anciennes données ou de vieux systèmes. Mais si vous créez quelque chose de nouveau, ignorez-le.


Oui @Daredevil l'évite comme la peste. Insécurité et obsolète.


3 Réponses :


2
votes

PBE signifie "Password Based Encryption", une méthode où la clé de chiffrement (qui est des données binaires) est dérivée d'un mot de passe (texte).


3 commentaires

En quoi cela diffère-t-il simplement avec MD5 ou simplement DES? C'est ce que j'aimerais savoir.


@Daredevil Encryption nécessite des clés, pas des mots de passe. DES fournit un cryptage (non sécurisé), mais pour crypter, vous avez besoin d'une clé cryptographique. On peut essayer de hacher un mot de passe pour obtenir une clé de chiffrement. C'est ce qu'on appelle la dérivation de clé de base de mot de passe (PBKDF). MD5 est une fonction de hachage, mais elle n'est pas sécurisée et ne convient particulièrement pas aux PBKDF - l'une des principales exigences en matière de sécurité est que les PBKDF doivent être lents pour que les attaquants ne puissent pas les forcer brutalement. MD5 ne répond pas à cette exigence. Voir le point 6 dans littlemaninmyhead.wordpress.com/2017 / 04/22 /… .


L'implémentation de la bibliothèque jasypt de PBEWithMD5AndDes, par défaut, utilise un sel aléatoire de 8 octets plus 1000 itérations de l'algorithme de hachage. De plus, par défaut, le sel non chiffré est préfixé pour générer des octets chiffrés afin de le rendre disponible pour le déchiffrement. Il n'est pas clair pour moi que ces mesures soient suffisantes pour surmonter la faiblesse inhérente aux algorithmes MD5 et DES. C'est probablement pourquoi, PBES1 est déconseillé pour les nouvelles applications en faveur de PBES2 (voir RFC2898).



6
votes

Extension de la réponse précédente

Que signifie exactement PBEWithMD5AndDes en tant qu'algorithme?

PBE utilise une clé de chiffrement générée à partir d'un mot de passe, d'un sel aléatoire et d'un nombre d'itérations, voir les paramètres KeySpec.

KeySpec pbeSpec = new PBEKeySpec(password.toCharArray(), psswdSalt, PBKDF_INTERATIONS, SYMMETRIC_KEY_LENGTH)

L'idée est - mots de passe ont tendance à être courts et pas assez aléatoires, ils sont donc faciles à deviner. L'utilisation du nombre d'itérations devrait rendre la devinette un peu plus difficile.

PBEWithMD5AndDes utilise MD5 et DES pour générer la clé, voir le exemple de code . L'implémentation réelle devrait utiliser un nombre d'itérations beaucoup plus élevé

En quoi cela diffère-t-il simplement en utilisant MD5 ou simplement DES? C'est ce que j'aimerais savoir.

En théorie, vous pouvez utiliser du MD5 pur ou du DES, mais l'ordinateur d'aujourd'hui pourrait deviner les mots de passe très rapidement.

Veuillez noter que DES et MD5 sont obsolètes aujourd'hui. Une collision MD5 peut être trouvée en moins d'une minute sur un matériel standard et DES utilise une clé 64 bits, ce qui est assez court pour être considéré comme sécurisé aujourd'hui.


3 commentaires

Donc, c'est plus sécurisé en utilisant la combinaison de MD5etDES?


@Daredevil, la combinaison est peut-être plus sécurisée que le hachage pur, mais je ne la considérerais pas généralement comme suffisamment sécurisée sans prouver le contraire


MD5 et DES sont des algorithmes différents pour différentes choses. MD5 est un algorithme de hachage et DES est un algorithme de chiffrement symétrique. Ce n'est pas comme si vous pouviez utiliser l'un ou l'autre. Vous devez utiliser les deux. Ce que vous pouvez faire est d'utiliser un meilleur algorithme pour les deux, par exemple SHA256 + AES. En pratique, vous pouvez vérifier l'algorithme PBKDF2 pour une meilleure implémentation PBE.



1
votes

PBEWithMD5AndDES dans l'infrastructure cryptographique Java est l'algorithme décrit dans https://docs.oracle.com/javase/9/docs/specs/security/standard-names.html#cipher-algorithm-names . L'algorithme est celui décrit dans PKCS # 5 ( https: //tools.ietf .org / html / rfc2898 # section-6.1.1 ).

En gros, dans la première étape, l'algorithme transforme le mot de passe en clé. C'est ce qu'on appelle la dérivation de clé et utilise MD5 comme fonction de "brouillage". La sortie fournit un IV et une clé adaptés pour DES en mode CBC, qui sont utilisés dans la deuxième étape pour crypter.

L'algorithme n'est plus sécurisé, principalement parce que DES n'utilise que des clés de 56 bits, ce qui est trop court contre les attaques modernes (par exemple https://crack.sh/ ). Même si MD5 est sujet aux collisions, cela pourrait ne pas être un problème ici (les collisions ne donneraient que des mots de passe alternatifs pour une clé donnée, mais la clé n'est pas transmise).


0 commentaires