12
votes

Convertir Leet-parler au texte en clair

Je ne suis pas si la hanche sur la langue l33t au-delà de ce que j'ai lu sur Wikipedia.

Je dois ajouter un chèque de dictionnaire à notre outil de validation de mot de passe et, puisque Leet-Devel ajoute uniquement une surcharge triviale au processus de craquage du mot de passe, j'aimerais désactiver l'entrée avant de le vérifier contre le dictionnaire.

Pour clarifier le raisonnement derrière ceci: lorsque cela est nécessaire pour ajouter des symboles à leurs mots de passe, de nombreux utilisateurs feront simplement une substitution de LEet très prévisible sur un mot commun pour répondre au nombre et à la nécessité d'inclusion de symboles. Parce qu'il est si prévisible, cela ajoute très peu de complexité réelle au mot de passe pour simplement utiliser le mot dictionnaire d'origine. \ Edit

Ne pas connaître toutes les règles, en particulier les substitutions de plusieurs personnages tels que "//" pour "W", et être certain qu'il s'agit d'un problème qui a été résolu de plusieurs reprises, notamment par des projets open source.

Je recherche des échantillons de code, mais je n'ai trouvé aucun peu loin. S'il est C # code qui serait un bonus!, Mais le code de toute langue commune aidera.

En outre, il serait agréable d'avoir une approche extensible, si nécessaire, ce dialecte évolue rapidement. Ce serait bien de pouvoir ajouter certaines règles dans une année comme celles évolutives.

et non, ce n'est pas la base de mon contrôle de force de votre mot de passe. Ce n'est que la partie que je demande de l'aide dans ce poste. Nous ne sommes donc pas distraits par d'autres éléments de mot de passe et de préoccupations de sécurité, permettez-moi de décrire les préoccupations de mot de passe qui ne doivent pas avoir à voir avec Leet-Helcon:

Nous mesurons les bits d'entropie dans le mot de passe par Spécial NIST Publication 800-63 et nécessiter une mesure équivalente configurable de stratégie (56 bits par exemple) pour que le mot de passe soit valide. Cela laisse encore une place pour les mots de dictionnaire qui ont été simplement Leet-ed et d'une perspective d'entropie ne constituent pas un grand nombre de mots de dictionnaire uniformes.

Je voudrais simplement dire aux utilisateurs que "p @ s5w0rd" est trop proche d'un mot de dictionnaire, et ils pourraient probablement trouver un mot de passe plus fort.

Je sais qu'il y a beaucoup plus aux considérations de sécurité telles que l'équilibre entre les mots de passe que les humains peuvent se souvenir et les mots de passe sécurisés. Ce n'est pas cette question.

Tout ce que je demande, c'est convertir l33t au clairext qui devrait être presque aussi amusant et intéressant d'un sujet que le code du code. Quelqu'un a-t-il vu des échantillons de code?


2 commentaires

J'ai mis une réponse légèrement plus compliquée, qui résout le mot de passe XKCD "TR0UB4DOR & 3".


En réalité, cette question est une exigence de l'ISO / IEC 27002 Chapitre 9.3.1: Nous devons laisser l'utilisateur sélectionner des mots de passe de qualité qui ne sont pas conturés pour les attaques de dictionnaires. Nous voulons donc simplement éviter que l'utilisateur prend un mot normal et crée une version L33T. Ceci est juste mauvais pour les mots de passe longs qui doivent contenir plus de hasard.


5 Réponses :


12
votes

Je dois dire que je pense que c'est une mauvaise idée ... Si vous voulez qu'ils soient forts, montez de meilleures exigences. Vous devez comporter au moins 8 caractères, contenir des lettres majuscules et minuscules, contenir au moins un nombre, et au moins un caractère spécial. Implémenter un compteur de défaillance maximale d'autorisation avant de désactiver un compte. Une fois que c'est fait, qu'est-ce que tu crains?


14 commentaires

Je suis d'accord, je suis d'accord :) "De-1337-ifing" n'est pas trivial du tout. Un exemple rapide serait que «4 '==' A» en 1337, SOO, voulez-vous interdire les 4?


Je pense que l'OP veut empêcher les mots de passe comme "L33T HAXX0R", qui est assez trivial et probablement plutôt commun. Il a 8 caractères, au moins un nombre et un caractère spécial, mais n'est pas sécurisé.


@Stephen, même la question de l'OPS veut minimiser cela ... et ils obtiendraient quelque chose comme "Leet Haxxor" ou "Elite Hacker" selon les règles qu'ils suivent, ils seraient mieux à ajouter "L33T HAXX0R" au dictionnaire de mauvais mots de passe.


@Stephen Cleary, alors une meilleure idée peut être d'ajouter des expressions communes L33T-Dites comme 1337, H4X0R, etc. au dictionnaire et ne permettez pas aux mots de passe de contenir des sous-chaînes de ces mots.


Je ne pense pas que l'OP n'est intéressé que par des formulations communes de 1337, comme H4X0R, etc., mais également l'utilisation de 1337 dans un mot de passe pour se conformer à ses règles. Par exemple, si j'utilise normalement "Escobar" comme mot de passe, il ne permettra pas "Esc0b4r" - bien, au moins c'est comme ça que j'interprète sa description de problème :)


@ Jonathon: Je suis d'accord avec toi. Je soulignais simplement que cette réponse ne répond pas vraiment au problème de l'OP - il envisage déjà de définir des exigences de mot de passe fortes.


Eh bien, tout comme essayer d'aider quelqu'un dans "l'entreprise" quand vous êtes dans "ça", vous devez parfois expliquer que ce qu'ils demandent n'est pas vraiment ce qu'ils veulent.


Merci a tous. Beaucoup de ces suggestions sont déjà en cours dans le système, je ne les ai pas mentionnées parce qu'elles n'étaient pas terriblement pertinentes pour la question. J'ai une mesure de complexité en termes de bits d'entropie conformément à la publication NIST sur le sujet. Les mots de passe doivent être au moins équivalents à 56 bits (configurables par la police). Mais un chèque de dictionnaire est un complément important à cela. "P @ S5W0RD" peut passer des chèques de regex simples, et même ressembler à une bonne entropie, mais ce n'est pas un bon mot de passe, car il s'agit d'un mot de dictionnaire qui a été leuné qui ajoute une surcharge triviale à une attaque didiconaire.


@Dano: Pourquoi seriez-vous vulnérable à une attaque de dictionnaire?


J'espère que nous ne l'sommes pas. Il existe un principe dans la sécurité appelée défense en profondeur. Même si nous vous bloquons après avoir dit 5 tentatives infructueuses et que vous prenez d'autres précations, il est préférable d'avoir plusieurs couches de défense plutôt que de compter sur une seule couche ... forte comme elle peut être.


Si le problème impensable et quelqu'un a obtenu nos mots de passe hachés à partir de la base de données, ils pourraient facilement exécuter un dictionnaire de 10 000 mots contre ceux hachés pour les matchs. Ils n'ont besoin que d'un utilisateur d'avoir utilisé un mot de dictionnaire. Léification simple complémentaire (la manière dont beaucoup d'utilisateurs ajoutent les symboles requis) et l'attaquant pourrait ajouter 5 variations LEET à chaque mot de dictionnaire et ne sera toujours qu'à 50 000 hachages dont ils ont besoin d'effectuer. C'est seulement équivalent à une clé 8 bits


@Dano je vous entends et je n'essaie pas d'être difficile. J'ai ajouté du code dans une autre réponse. Je me sens comme si je dois être snarky et mentionner que si quelqu'un obtient vos mots de passe hachés, Leet Parle est le moindre de vos problèmes :)


@Dano 50 000 possibilités serait d'une clé de 16 bits non de 8 bits. Oups.


-1. Les mots leunes réduisent le caractère aléatoire des mots de passe et les rendent plus propices lorsqu'ils sont attaqués avec des dictionnaires. Il s'agit donc d'une obligation ISO / IEC 27K d'empêcher les utilisateurs d'utiliser des mots de dictionnaire et des organisations doivent simplement se conformer. Les exigences que vous avez mentionnées devraient compléter le dictionnaire LEETED, ne pas le remplacer.



10
votes

offrant également du code: xxx


5 commentaires

Je pense qu'une carte Leet => Ungeet serait meilleure, car vous n'auriez pas à taper Leetrules.add pour chaque paire.


Merci, c'est parfait. Extensible, simple. Ces substitutions pourraient être dans un fichier pour le rendre encore plus extensible. Les suffixes comme -xor et -Zorz pourraient simplement être supprimés. N'y a-t-il plus de plus à Leet que de ce chiffrement de substitution? Gaspilleur? Choix intéressant de mot de passe.


Bien que je puisse y avoir plus de grammaire impliquée avec Leet que la substitution. Traiter avec les grammaires était une partie de CS que je ne me souciais pas.


En ce qui concerne la construction de la grammaire et des remplacements supplémentaires, la fonction ne reviendrait probablement jamais seulement 1 résultat d'un mot de passe entrant. Si vous souhaitez être retourné, un tableau de chaque remplacement possible (c'est-à-dire H4CK = HACK, HAX, HAXX), je pourrais alors aider à l'élargir. Comme il est maintenant, j'ai commandé des remplacements spécifiquement pour ne pas gâcher les remplaçants qui se déroulent plus tard.


@FOSCO Même avec la commande, je ne pense pas qu'il soit possible de cartographier une séquence Leet sur une seule séquence inexploitante: \ / \ 3 peut être traduite en vb, v \ e, \ ae, \ ae, etc ... peut-être retourner un ensemble de toutes les traductions possibles serait mieux?




3
votes

Je trouve la question intéressante alors voici une réponse supplémentaire en tant qu'exturification intellectuelle; Étant donné que Leet Speak ne peut pas être mappé sur un mot unique, vous devez examiner les valeurs décodées possibles que l'on peut donner une chaîne Leet. Voici quelques échantillons de code: xxx

Le code considère que

  • Un caractère peut être conservé tel quel ( Decodonecharacter )
  • Un mot doit être décodé par la combinaison des valeurs décodées pour toutes les divisions possibles du mot ( décodemorethanonecharacter )
  • Un mot doit être décodé directement par rapport aux règles ( décodezholeword )

    La mise en cache est très utile car le code est tout à fait inefficace pour suivre quelles permutations sont inutiles: diviser "gaspfil" dans "W" et "liéfond" ou "WA" et "Steful" mèneront à certains Répétition du décodage à droite, puis éventuellement à gauche. Je n'ai pas beaucoup de données dessus, mais il a été régulièrement frappé pendant plus de 90% des décodes; pas trop minable pour une petite addition.

    puisqu'il renvoie une combinaison de toutes les chaînes de laet décodées possibles, vous voudrez peut-être y jeter un coup d'œil pour votre solution: par exemple, le code de Fosco décodera "137m3P455" à "BTMEPASS" Mais vous voudrez peut-être savoir qu'il se traduit également par "LETMEPASS" - qui devrait vous faire grincer un peu plus.


1 commentaires

Consultez ma version améliorée ci-dessous en fonction de votre démarrage.



5
votes

Basé sur la réponse de Samy ci-dessus, voici une version encore encore améliorée. Il permet de multiples règles de sortie par chargeur d'entrée, et notamment des règles configurées pour tous les caractères non alphanumériques à supprimer de la chaîne. Le résultat est que vous pouvez envoyer le mot de passe de la bande dessinée XKCD classique de TR0UB4DOR & 3 et sortez troubador.

J'utilise cela dans le même objectif que l'OP, de confirmer que le mot de passe fourni à mon système contient des données hautement sécurisées , n'est pas basé sur un mot de dictionnaire. p>

Je prends la sortie de la fonction de décodage et je l'exécute via un dictionnaire. p> xxx pré>

voici ma sortie p>

Tr0ub4dor&3
Tr0ub4dor&E
Tr0ub4dor&
Tr0ub4dor3
Tr0ub4dorE
Tr0ub4dor
Tr0ubAdor&3
Tr0ubAdor&E
Tr0ubAdor&
Tr0ubAdor3
Tr0ubAdorE
Tr0ubAdor
Tr0ubador&3
Tr0ubador&E
Tr0ubador&
Tr0ubador3
Tr0ubadorE
Tr0ubador
Tr0ubdor&3
Tr0ubdor&E
Tr0ubdor&
Tr0ubdor3
Tr0ubdorE
Tr0ubdor
TrOub4dor&3
TrOub4dor&E
TrOub4dor&
TrOub4dor3
TrOub4dorE
TrOub4dor
TrOubAdor&3
TrOubAdor&E
TrOubAdor&
TrOubAdor3
TrOubAdorE
TrOubAdor
TrOubador&3
TrOubador&E
TrOubador&
TrOubador3
TrOubadorE
TrOubador
TrOubdor&3
TrOubdor&E
TrOubdor&
TrOubdor3
TrOubdorE
TrOubdor
Troub4dor&3
Troub4dor&E
Troub4dor&
Troub4dor3
Troub4dorE
Troub4dor
TroubAdor&3
TroubAdor&E
TroubAdor&
TroubAdor3
TroubAdorE
TroubAdor
Troubador&3
Troubador&E
Troubador&
Troubador3
TroubadorE
Troubador
Troubdor&3
Troubdor&E
Troubdor&
Troubdor3
TroubdorE
Troubdor
Trub4dor&3
Trub4dor&E
Trub4dor&
Trub4dor3
Trub4dorE
Trub4dor
TrubAdor&3
TrubAdor&E
TrubAdor&
TrubAdor3
TrubAdorE
TrubAdor
Trubador&3
Trubador&E
Trubador&
Trubador3
TrubadorE
Trubador
Trubdor&3
Trubdor&E
Trubdor&
Trubdor3
TrubdorE
Trubdor


1 commentaires

En réalité, le TROBADOR est en fait intéressant, l'essai ci-dessus ne fonctionne pas lors de la correspondance contre un dictionnaire normal. J'ai ajouté plusieurs règles supplémentaires dans ma conversion, pour faire face aux ISMS britanniques, davantage de règles de Leet et de fautes de frappe communes. Chaque nouvelle règle augmente considérablement le nombre de combinaisons, mais comme les modifications de mot de passe sont relativement peu fréquentes, la charge de la pratique des permutations et du dictionnaire pour chaque permutation n'est pas un problème.