Aller au contenu principal
Bienvenue sur Forum Puppy Linux - Toutou Linux - Astuces - Aides !
Lorsque vous n'êtes pas connectés vous pouvez visiter la totalité du forum mais avec certaines restrictions : cf le règlement pour les visiteurs non connectés. Vous êtes chaleureusement conviés à vous inscrire afin de bénéficier de toutes les fonctionnalités du forum et de participer aux échanges.
Sujet: SuperGenPass de Polo l'asticot (Lu 524 fois) sujet précédent - sujet suivant
0 Membres et 1 Invitédans ce sujet

SuperGenPass de Polo l'asticot

@Pol‍o l'asticot, ola

Sur ton site https://aidelinux.toile-libre.org/doku.php/linux/securite/supergenpass, j'ai lu avec beaucoup d'intérêt l'article relatif à SuperGenPass.

Belle trouvaille.

J'ai dû l'adapter à la marge pour qu'il fonctionnât avec Toutou Linux Slaxen.
En fait, ´xlcip -r --clipboard´ doit être réduit à sa plus simple expression, soir xclip.

Dans ton article, tu évoques la ligne 31 à adapter pour ne pas devoir resaisir son mdp.
Mais la ligne 31 est oqp par un ´continue´.
Ne serait-ce pas la ligne 21 qu'il faille adapter, mon camarade ?

En fait, ce qu'il faut garder au chaud, outre le mdp maître, cher maître, ce sont les URL, éventuellement suivies des paramètres individuels, et l'identifiant de connexion.

Les mots de passe générés sont au format alphanumérique (minus & majus).

Essayé également l'outil au format .html qui fonctionne tout seu comme un grand.

Tu peux considérer ton article comme relu.

Merci.

Fraterniteur
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #1
Aloha, maître Rantanplan

En fait, je ne voyais pas l'article comme cela, mais c'est très gentil de ta part.

Pour le paragraphe sans entrée du mot de passe, je me suis mélangé les pinceaux en prenant la ligne de l'article dans mon éditeur de texte au lieu de la ligne du script (que je ne vois pas quand j'écris).
Il s'agit de remplacer l'entrée du mot de passe par le mot de passe en dur et c'est donc à la ligne 20 que cela se passe (pas tombé loin !). C'est corrigé. Merci.

Par contre, certains services demandent en plus des chiffres et des lettres, des caractères spéciaux. Il faudrait enregistrer l'URL du service, l'identifiant et un élément auxiliaire pour ces sites sadiques (ex : µß). Cela pourrait être une simple liste sans protections puisqu'elle ne contient pas les mots de passe. Pour l'instant, je ne vois pas comment faire, mais un programme avec le tout serait idéal. On va attendre que la température descende pour faire chauffer les neurones…

Àpluch

PS : le site sur Toile-libre est d'une lenteur désespérante. Je ne suis pas sûr de prendre un abonnement chez eux. Mais il est accessible pour l'instant. Je cherche autre chose.

PS++ :  C'est même pas la chaleur, c'est la vieillesse : j'ai oublié de demander. Si une âme charitable pouvait m'expliquer à quoi sert, dans la version HTML, le mot de passe secondaire et si c'est vraiment utile,  je m'endormirai moins bête !
Cum facis quod potes, significat te facere quod debes.

Re : SuperGenPass de Polo l'asticot

Répondre #2
@Polo l’asticot

salut amiko,

Après des tests académiques plus poussés  :)), il ressort que la version html et cli fonctionnent différemment.

En html, si on inscrit comme URL http|s://....., seule la partie relative au domaine est retenue, comme par exemple toto.org.
Toujours dans la version html, lorsqu'on active la roue crantée, un champs "Mot de passe secondaire" s'affiche.
Si on y saisit des caractères, le mot de passe sera différent de celui calculé lorsque le champs "Mot de passe secondaire" reste vide.


En ligne de commande ou CLI, la chaîne "https://toto.org" est conservée pour le calcul du mot de passe.
Si le mot de passe est complété du mot de passe secondaire de cette manière "Mot-de-passe_principalMot-de-passe_secondaire" et que URL a été saisie de cette manière "toto.org", on obtient le même mot de passe que celui calculée par la version html.

Résultats des tests
HTML

Mot de passe principalMot de passe secondaireURL saisieMot de passe obtenu
totomomohttps://toto/orgqqkLPSmW8l
totohttps://toto/orghNu1Erd42J
CLI
Mot de passe principalURL saisieMot de passe obtenu
totomomototo.orgqqkLPSmW8l
totohttps://toto.orgk15qnLGd9m
totototo.orghNu1Erd42J
Oui, c'est dommage que le mot de passe calculé n'inclut pas de caractères spéciaux.
Il faudrait prévoir un sel paramétrable par l'utilisateur afin qu'il définisse lui-même les deux caractères spéciaux (1 paramètre) à inclure dans le mot de passe et leur position (2 paramètres), soit 3 paramètres de plus.
Mais peut-être y a-t-il plus simple.

Les températures baissent, enfin.

"Vieillir, ah vieillir" disait Brel.

Atchao et "Ah que coucou !"
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #3
@Rantanplan

… soit trois paramètres de plus.

Je comprends l'intérêt des paramètres. Je trouve cela très compliqué à mettre en œuvre. Mon idée était de faire un script où on choisit son URL dans une liste. On entre son mot de passe général et cela affiche l'identifiant et le mot de passe. URL et l'identifiant sont dans le même programme. Il n'y a qu'un seul fichier. Donc :

Question bête.

Si j'ai un champ libre, une entrée (pouvant être vide) ou je mets ce que je veux.
J'ajoute cela à la fin du mot de passe calculé par SGP. J'enregistre une liste avec sur chaque ligne URL, identifiant, entrée.
C'est moins costaud qu'avec les trois paramètres mais on peut changer la longueur du mot de passe à 12 ou 15.
Ex :
URL toto.org MDPgénéral totomomo Entrée øµ MDPobtenu qqkLPSmW8løµ

Cela te semble idiot ?

Le problème des trois paramètres, c'est que je peux bien tomber dans le futur sur un site qui demande 4 caractères spéciaux. Lui, il faudrait 5 paramètres. À la création du compte, cela va prendre le quart d'heure pour entrer les composantes du mot de passe. Et le calcul pour le retrouver, je ne vois pas comment faire si tout est variable.

L'asticot dans son coing

Et puis, il faut éviter le salage. Tout ce sel, c'est très mauvais pour la santé.
Cum facis quod potes, significat te facere quod debes.

 

Re : SuperGenPass de Polo l'asticot

Répondre #4
@Polo l’asticot‍ dans son coing,

c'est bon la gelée de coings...

Oui, j'imagine que l'intégration des paramètres doit être compliqué.
Ta solution est la moins pire, l'utilisateur décide des caractères spéciaux et s'il les met au début ou à la fin.
L'idéal serait que ces caractères spéciaux soient générés par le script.

Dans le fichier bash, à la ligne 27, retire la séquence ´ | base 64´.
Les mots de passe sont générés avec des caractères spéciaux, y compris l'espace ce qui pourrait poser problème. Mais pas sûr que ce soit la solution.

Que fait ´tr +/= 98A´

À ton expertise, je soumets...

Bon kawa et bon tabac dans la tabatière.

Vive Flipper le dauphin.
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #5
Hola Rantanplan,

Pas beaucoup avancé. Mais comme il est impoli de ne pas répondre…

En enlevant base64 cela donne plusieurs centaines d'erreurs sans faire de mot de passe.
Extrait :
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
grep: (entrée standard) : fichiers binaires correspondent
./supergenpass.sh: ligne 26: avertissement :substitution de commande: octet nul ignoré en entrée
grep: (entrée standard) : fichiers binaires correspondent
grep: (entrée standard) : fichiers binaires correspondent
grep: (entrée standard) : fichiers binaires correspondent

= grep, pas content ! Et fait sa feignasse.

tr +/= 89A
Par exemple, avec le pipe, j'obtiens :
aX3oNM08rI
Sans, j'obtiens :
o2cE1Qf05t
Je ne comprends pas trop l'utilité.
Cela fait normalement une substitution caractère par caractère.
En ligne de commande, cela transforme bien le + en 9, le / en 8 et le = en A

Je crois que je me suis un peu emballé sur ce programme. Il n'est pas facile à manipuler. Je vais essayer plutôt de l'incorporer dans un ensemble plus grand.
Si tu dois faire un test, dans plusieurs semaines, tu préfèrerais yad ou gtkdialog ?  (J'ai regardé xmessage, mais il ne permet pas de faire ce dont j'ai envie.)

Vous le verrez peut-être, vous la verrez parfois, en pluie et en chagrin
Traverser le présent en s’excusant déjà de n’être pas plus loin
Et, le temps d’un sanglot, oublier toute une heure l'odeur de leur coing…'
(Je sais, c'est truqué.)

Fraternité et dodo !
Cum facis quod potes, significat te facere quod debes.

Re : SuperGenPass de Polo l'asticot

Répondre #6
Bonan postmezatagon Polo,

Pour tr +/= 98A, je comprends la même chose que toi.

Ton idée d'ajouter au début ou en fin de mdp, deux caractères spéciaux définis par l'utilisateur est plutôt bonne.

J'ai essayé des tas de trucs, mais sans résultat probant.

À suivre mon bon.

Tic-tac, tic-tac...
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #7
Mon Polo,

après tr +/= essayes :
| sed -e 's/\(^.\)/µ\1/g' -e 's/\(.$\)/\1þ/g'

J'ai testé ça :
# echo toto | sed -e 's/\(^.\)/µ\1/g' -e 's/\(.$\)/\1þ/g'

µtotoþ

Qu'en penses-tu ?
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #8
Rantanplan

Ton idée fonctionne bien. Je n'aime pas le fait que les caractères spéciaux ne changent pas. Si on tombe sur deux mots de passe, cela permet d'enlever deux caractères sur le décryptage.
En cherchant un peu, j'ai lu qu'une longueur de 16 caractères était préférable. Puisqu'il n'est pas possible de conserver la compatibilité, j'ai décidé de barboter joyeusement dans le code.
#!/usr/bin/env bash

#Code dérivé de celui de Mihail Milushev (lanzz : https://github.com/lanzz/bash-supergenpass/blob/master/supergenpass.sh) sous licence MIT

################################################################################
default_password_length="16"
### 16 par défault. Peut être remplacé au cas par cas en ajoutant la longueur
### personnalisée comme deuxième argument après le domaine lors du lancement du script.

default_hashing_algorithm="md5"
### "md5" par défaut. Une valeur alternative serait « sha512 » qui peut être donnée
### au cas par cas comme troisième argument.
################################################################################

domain=$(echo $1 | tr A-Z a-z)
length=${2:-$default_password_length}
length=$(($length - 4))
hashing_algorithm=${3:-$default_hashing_algorithm}

echo -n 'Mot de passe : '; master_password="&'èàarupä‘üö"

hash=$master_password:$domain

i=0
while true
do
 hash=$(echo -n "$hash" | openssl "$hashing_algorithm" -binary | base64 | tr -d '\n' | tr +/= 98A)
 i=$(($i + 1))
 if [ $i -lt 10 ]
 then
 continue
 fi
 valid=$(echo "${hash:0:$length}" | grep -E '^[[:lower:]]' | grep -E '.[[:upper:]]' | grep -E '.[[:digit:]]')
 if [ "$valid" != "" ]
 then
 break
 fi
done
# Sur les caractères 13 à 16, je remplace les lettres par des caractères spèciaux
plus=$(echo ${hash:$length:4} | tr '[:lower:] [:upper:]' '&(_)+#{[|]}/?/§!:^&![+§)#]&(_)+#{[|]}??/§!:^&![+§)#]')

if [ -n "$WAYLAND_DISPLAY" ] && command -v wl-copy >/dev/null; then
 echo -n ${plus:0:2}${hash:0:$length}${plus:2:2} | wl-copy
 echo "Mot de passe copié dans le presse-papiers Wayland"
elif [ -n "$DISPLAY" ] && command -v xclip >/dev/null; then
 echo ${plus:0:2}${hash:0:$length}${plus:2:2} | xclip -r -selection "clipboard"
 echo "le mot de passe est copié dans le presse-papiers X"
 echo ${plus:0:2}${hash:0:$length}${plus:2:2}
else
 echo ${plus:0:2}${hash:0:$length}${plus:2:2}
fi

Le mot de passe principal est mis en dur pour aller plus vite et cela affiche directement le mot de passe obtenu.
Je fais une substitution sur quatre lettres car avec deux, si plusieurs chiffres se suivent, il n'y a plus de caractères spéciaux. J'en mets deux devant et deux derrière.

Le but de l'ensemble, c'est d'obtenir des caractères spéciaux générés par le programme et qui changent avec toutes les entrées de manière assez complexe pour sembler aléatoire.

Qu'en penses-tu ?
Si tu critiques, je me fous dans le canal ! Je plaisante. (Mais tu es prévenu.)

¡Que pases un buen final de día, tanto tú como toda tu familia!

L'asticot
PS : Moi ce que je préfère, c'est l'odeur.
Cum facis quod potes, significat te facere quod debes.

Re : SuperGenPass de Polo l'asticot

Répondre #9
Polo le magicien,

Fabuleux et même prodigieux.

Je crois comprendre que lorsque un mot de passe de 16 caractères est souhaité, la longueur serait ramenée à 12 ´length=$(($length - 4))´. Mais je n'ai peut-être pas compris la syntaxe.

Ce qui m'épate, c'est que les caractères spéciaux pour un domaine et un mot de passe donnés ne varient pas.
Je présume que l'astuce est dans :
plus=$(echo ${hash:$length:4} | tr '[:lower:] [:upper:]' '&(_)+#{[|]}/?/§!:^&![+§)#]&(_)+#{[|]}??/§!:^&![+§)#]')
Je crois deviner que les minuscules sont remplacées par un des caractères
+#{[|]}/?/§!:^&![+§)#]
et les majuscules par un de ceux-là :
+#{[|]}??/§!:^&![+§)#]
Mais, probablement, me trompé-je.

Bref, bravo l'asticot.

Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #10
@Rantanplan

C'est tout à fait cela. Sur 16 au départ, il y a 12 caractères alphanumériques. Pour les 4 caractères suivants, les lettres sont remplacées par des caractères spéciaux et on en place 2 devant et 2 derrière.

J'ai remarqué sur plusieurs tirages, deux chiffres qui se suivaient. Pour que mon système ne fonctionne pas et qu'il n'y ait pas de caractères spéciaux, il faudrait qu'il y ait quatre chiffres qui se suivent à partir du treizième rang. J'espère que la probabilité est très faible, mais je n'ai pas passé la journée à faire des tirages en changeant URL et mot de passe.

Si tu as une idée plus lumineuse, je suis preneur !
Je cherche de mon côté une meilleure technique.

Bonan vesperon




Cum facis quod potes, significat te facere quod debes.

Re : SuperGenPass de Polo l'asticot

Répondre #11
Ola Rantanplan et l'univers,

J'ai cherché désespérément à différencier chiffres, minuscules et majuscules dans le mot de passe généré. Les comparaisons directes en Bash ne fonctionnaient pas même quand elles étaient préconisées par certains sites (créations par IA ???, IA de m…). J'ai bien perdu mon temps là-dessus.
Je me suis souvenu du bon temps où je faisais de la programmation en Basic. (Il ne rigole pas le jeunot, s'il ne veut pas se prendre un coup de canne sur la tête !) Il y avait une fonction de conversion en code ASCII qui donnait de bons résultats. Je suis parti sur cette piste. Le programme est beaucoup plus lourd et codé à l'arrache mais cela fonctionne.
#!/usr/bin/env bash

#Code dérivé de celui de Mihail Milushev (lanzz : https://github.com/lanzz/bash-supergenpass/blob/master/supergenpass.sh) sous licence MIT

################################################################################
default_password_length="16"
### 16 par défault. Peut être remplacé au cas par cas en ajoutant la longueur
### personnalisée comme deuxième argument après le domaine lors du lancement du script.

default_hashing_algorithm="md5"
### "md5" par défaut. Une valeur alternative serait « sha512 » qui peut être donnée
### au cas par cas comme troisième argument.
################################################################################

domain=$(echo $1 | tr A-Z a-z)
length=${2:-$default_password_length}
hashing_algorithm=${3:-$default_hashing_algorithm}
mpd=""
chiffre=0
maj=0
min=0
cumul=0

master_password="&'èàarupä‘üö"

hash=$master_password:$domain

i=0
while true
do
 hash=$(echo -n "$hash" | openssl "$hashing_algorithm" -binary | base64 | tr -d '\n' | tr +/= 98A)
 i=$(($i + 1))
 if [ $i -lt 10 ]
 then
 continue
 fi
 valid=$(echo "${hash:0:$length}" | grep -E '^[[:lower:]]' | grep -E '.[[:upper:]]' | grep -E '.[[:digit:]]')
 if [ "$valid" != "" ]
 then
 break
 fi
done

mdp=${hash:0:$length}
echo $mdp

i=0
while true
do
car=${mdp:$i:1} ; ascii=$(printf "%d" "'$car'")

if [ $ascii -lt 58 ] ; then
 chiffre=$(($chiffre + 1))
 if [ $chiffre -gt 3 ] ; then
 car=$(echo $car | tr '[:digit:]' '&(_)+#]{|[')
 mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
 cumul=$(($cumul + 1)) ; chiffre=0
 fi
elif [ $ascii -lt 91 ] ; then
 maj=$(($maj + 1))
 if [ $maj -gt 2 ] ; then
 car=$(echo $car | tr '[:upper:]' '&(_)+#{[|]}>?/<!:^&![+<)#]')
 mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
 cumul=$(($cumul + 1)) ; maj=0
 fi
else
 min=$(($min + 1))
 if [ $min -gt 1 ] ; then
 car=$(echo $car | tr '[:lower:]' '&(_)+#{[|]}?>/<!:^&![+<)#]')
 mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
 cumul=$(($cumul + 1)) ; min=0
 fi
fi

if [ $cumul -gt 2 ] ; then break ; fi

i=$(($i + 1))

done

if [ -n "$WAYLAND_DISPLAY" ] && command -v wl-copy >/dev/null; then
 echo -n $mdp | wl-copy
 echo "Mot de passe copié dans le presse-papiers Wayland"
elif [ -n "$DISPLAY" ] && command -v xclip >/dev/null; then
 echo $mdp | xclip -r -selection "clipboard"
 echo $mdp
 echo "Le mot de passe est copié dans le presse-papiers de X"
else
 echo $mdp
fi
C'est toujours en développement. Le mot de passe général est toujours en dur dans le script et cela affiche le mot de passe généré sans caractères spéciaux puis en dessous, avec.

Petite explication :
Le script compte les chiffres et remplace le quatrième par un caractère spécial.
Pour les majuscules, c'est la troisième qui est remplacée.
Avec les minuscules, c'est toutes les deux occurrences que le remplacement a lieu.
Pourquoi ? Parce que pourquoi pas.
Quand il y a eu trois remplacements, on s'arrête et on donne le résultat.

L'avantage, c'est que les caractères spéciaux apparaissent n'importe où, sans régularité. (J'ai réduit l'ensemble des caractères à ceux de code inférieur à 128, les autres provoquant un affichage incorrect avec des points d'interrogation.)

 Si tu peux tester et faire un retour, quand tu as du temps.

¡Que la fuerza acompañe a España y a los españoles!




Cum facis quod potes, significat te facere quod debes.

Re : SuperGenPass de Polo l'asticot

Répondre #12
Polo,

chez moi, Toutou n'aime pas la ligne 70 et notamment "(($i + 1))".

En fait, c'est le caractère " qu'il pose problème.

Lorsque je lance le script après avoir retiré les " aux lignes 70, 63 et 56, j'obtiens :
root@pctoutou ~ 
# ./genmdp.sh
ybUTPjlHlf5l2LR1
xclip: -r: No such file or directory
y(UT!j?Hlf5l2LR1
Le mot de passe est copié dans le presse-papiers de X

Pas sûr que ce soit le bon résultat.

et avec :
# ./genmdp.sh https://augras.eu/puppy_forum
pXOT52Xon4O1NSUK
xclip: -r: No such file or directory
pXO!52X<n4O(NSUK
Le mot de passe est copié dans le presse-papiers de X


Dis-moi, si tu obtiens idem pareil également la même choz itou, stp.

Apluche dans le cognassier du coin d'ton coing :)
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

Re : SuperGenPass de Polo l'asticot

Répondre #13
@Rantanplan‍ 

En enlevant les " des lignes susnommées, cela fonctionne toujours chez moi. Le code est donc compatible Bash 2013 ?
Dommage qu'on ne puisse pas s'enlever les guillemets et rajeunir de treize ans !

Nouvelle explication pour les étourdis qui n'ont pas tout enregistré. Pour le deuxième test du sieur Rantanplan :

pXOT → troisième majuscule dans la chaîne : on remplace le T par un caractère spécial.
pXO!

pXOT52Xo → deuxième minuscule dans la chaîne : on remplace le o par un caractère spécial.
pXO!52X<

pXOT52Xon4O1 → quatrième chiffre dans la chaîne : on remplace le 1 par un caractère spécial.
pXO!52X<n4O(

3 substitutions ont été faites : on garde la suite sans changements.

pXOT52Xon4O1NSUK
pXO!52X<n4O(NSUK

Cela m'étonne un peu, mais cela semble fonctionner du premier coup. J'obtiens exactement la même chose que toi pour les deux exemples. Avec les trois chaînes de caractères spéciaux tirées au hasard et un mot de passe général solide, cela devrait sérieusement compliquer la tâche d'un hackeur.

Merci à toi pour ces essais.
J'espère que ton coin de coing est aussi frais que mon coin de coing. Pas coin-coin parce que je me méfie des canards.

Polo l'asticot
Cum facis quod potes, significat te facere quod debes.

Re : SuperGenPass de Polo l'asticot

Répondre #14
Olà l'As Ticot,

merci pour tes explications pour les cancres : j'en avais besoin.

Alors donc youpi si ça fonctionne.

Peut-être faudrait-il une invite dans le cas où il n'y a pas au moins un paramètre.
Qu'en dis-tu ?
Je fais partie des distraits qui oublient vite.

Je vais faire un ch'ti artik pour annoncer la sortie du dernier antiX et mon avis de chien le plus bête de l'ouest (de la France).

À plus camarade du coing.
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

 
Simple Audio Video Embedder