Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Limitation d'un passage d'un hash SHA1 en BASE64

2 réponses
Avatar
Cedric
Hello les gens,

j'ai pas eu de réponse sur https://linuxfr.org/forums/31/8412.html donc
je viens voir par ici si j'ai plus de chance ...

Depuis https://linuxfr.org/comments/523371.html#523371 l'idée a fait du
chemin et j'ai même fait héberger le bébé sur gna! (encore merci à eux
!) http://gna.org/projects/pyshapass/ mais il me reste un doute sur la
validité de ce que j'emploie, c'est à dire

chaine -> sha1 -> base64 puis 8 premiers caractères = mot de passe

Quand on lance ce traitement une 50aine de fois avec une chaine de 20
caractères pris sur /dev/random, on aperçoit des "colonnes" de N,M,Z est
ce normal ?

cedric@lef:~/tmp $ cat t.py
import sha
import base64
f = file('/dev/random','r')
for i in range(20):
print base64.encodestring(sha.new(f.read(20)).hexdigest())[:-1]
cedric@lef:~/tmp $ python t.py
ZWU5OTI5MmI3YWM5MGU5MTE1NjI5YTY5ODJlMTc2N2JhOWNlM2JmNQ==
ODIzNThiZDA1NWY3NzlhMTdmNjBiYTIxNmI1OTExMzQxODM0YzVhZA==
NTQ5ZDM5NjAzNGJiOGZhN2FmYTM4OGNlMmQxNWNjMTYxNWVjNmU3ZA==
OTE2ZWQ2ZGI3NWVkMmI5N2JlYWU3YTUxNTJhM2Q3MGVmZDZlYzZjMg==
M2Y1ODI2YTEyNjk5MDIzM2U5MzkwNzQwYWEyYjc4ZmExOTU0N2FjNw==
DljZDIzMWMxZjQ5MDE3ZTZmYWRjMTEyYjBlNzU3YWZhNTgxNGVlYQ==
NTBhN2IyYzQ4MDJmNzA5OTYzZmRiOTJjZWE1YjA5YjcyYmViYWZhMA==
MTQxOGZlOTQ5Y2MyZmM1OTJlMDI4YTczZGRlMzg1ZDU5ZTc2ZDBkZg==
NmY1ZGI3ZjkzYjY2NTZlYzJjY2Q1ZjQ2MmNhYTI3MGY2NmIwNGVjNg==
MDZmMGE3ZTY1YmI0NDg3ODE0ZmJhMDNmYzg2YTFhMTBiYjY3YTNkNw==
Y2E0ZWIyNGQ5Mjc3Yzc0ZDMyOGYwODQwZjgyMzE5NGZkNzE4ZThmZg==
OTBlYmEwY2QzMDNjMzI5ZDFlMWZjODlmOWRlOTFiMmFjZmJkNjA5Zg==
OWQxYTU3ZDI4ODNlMDlkZGEzN2NkYTBlODBmZTdiZDY5ZWRkNDA1MQ==
MDYwOWIzYWRhZjU5M2E2YzhkZjUwMzA1YmQ0OGQ1ZmViNDEyZmVjYw==
NGM0YzlhMWQwYTJmOWIxNTkxZjdmOGIxNmIyODNkOWJjMTVmZmM4Yg==
ZDlmYzEzYjZlOTIxMjQ4MmI4ZjYxMDFlYzA0NzE0NTIxMjM1ZDk0Mg==
NjQxY2JiMGIxNzRkZmJkOTBkN2JmNGU4OGI4MTg5MGVlZmY0M2QyNg==
OGIxNzEyMjIwNGU1YzE5YWQ2ZDczNDEzMzJlMmUzN2EzMzI5ZjQ0ZA==
NDI4YjJkYzA4ZTBiMmVhZTU4YjBhZmQ3NWM2YTJjNDgxZmE4Njg2Nw==
NDQzODVjOTYyZmQwNGNjMzU1MWY4NjM3ODI2NzAzYjY2ZTc3ZGY0Zg==

Vous voyez le nombre de N et de M en première colonne par exemple ?
Je suppose que c'est du à base64 mais comment l'éviter car si je
n'utilise pas base64 et que j'encode le sha1 en hex, les lettres ne
seront choisis que dans [1-9a-f] ce qui réduit considérablement la
"force" du mot de passe, 16^8 au lieu de 64^8.

Même dans les exemples de mon README, c'est bizarre :
http://cvs.gna.org/viewcvs/pyshapass/pyshapass/README?rev=1.5&content-type=text/vnd.viewcvs-markup
Tous les exemples commencent par M ou N :-/

J'avais pensé à prendre des indices différents dans la chaine base64
pour le mot de passe, au lieu de [0,1,2,3,4,5,6,7] prendre
[1,2,3,5,6,7,9,10] mais ça sort quand même des mots de passe "louche".

Une idée sur ce problème ?

Sinon plus globalement que pensez vous de ce "concept" pour gérer ses
mots de passe ?

Merci beaucoup !

2 réponses

Avatar
Kevin Drapel
J'avais pensé à prendre des indices différents dans la chaine base64
pour le mot de passe, au lieu de [0,1,2,3,4,5,6,7] prendre
[1,2,3,5,6,7,9,10] mais ça sort quand même des mots de passe "louche".


Tu devrais laisser de côté cette base64 car il introduit des biais et
faire un tableau qui contient tous les caractères désirés en sortie. Tu
prends la signature obtenue avec SHA-1 en héxadécimal, tu isoles les
caractères deux par deux pour obtenir des nombres entre 0 et 0xFF, et tu
utilises ça pour indexer ton tableau (après un modulo de la taille du
tableau) et sortir la lettre correspondante.

Sinon plus globalement que pensez vous de ce "concept" pour gérer ses
mots de passe ?


Cela ressemble à un petit utilitaire que j'ai écris et qui utilise SHA-1
pour générer des mots de passe déterministes. Le concept est un peu plus
avancé car je cherchais à générer des mots de passe "intelligibles".

http://passkool.sourceforge.net

Avatar
Cedric
Tu devrais laisser de côté cette base64 car il introduit des biais et
faire un tableau qui contient tous les caractères désirés en sortie. Tu
prends la signature obtenue avec SHA-1 en héxadécimal, tu isoles les
caractères deux par deux pour obtenir des nombres entre 0 et 0xFF, et tu
utilises ça pour indexer ton tableau (après un modulo de la taille du
tableau) et sortir la lettre correspondante.


Merci pour cette idée.
Je vais voir ce que ça donne mais ça va être plus coton pour la version
bash :)