Tandis que je développais ma librairie
bitcoin pour Perl, j'ai eu l'idée d'utiliser /usr/share/dict/words pour mémoriser une clef privée (à la manière de ce qui est fait avec le client Electrum)
ça réduit le nombre de mots à huit pour une clef de 128 bits (valeur par défaut, modifiable avec la variable $Bitcoin::PrivateKey::entropy)
exemple:
use Bitcoin::PrivateKey;
my $key = new Bitcoin::PrivateKey;
say join ' ', $key->mnemonic;
affichera par exemple:
grimage recommander nymphes empêcheriez payement âcreté excusées exemptaisJe trouve ça plutôt cool.
Atention les verbes sont conjugués et les mots peuvent être au pluriel muet. Il faut donc ajouter mentalement les pronoms ou les articles. Par exemple dans l'exemple plus haut il faut lire:
le grimage
recommander
les nymphes
vous empêcheriez
payement
l'âcreté
elles sont excusées
hier, j'exemptais.
Mais dans l'absolu ça n'est même pas nécessaire, vous pouvez facilement écrire un programme qui essaie toutes les combinaisons quand il y a ambiguité.
L'idéal étant de se faire une petite histoire avec ces mots.
Théoriquement il est possible de réduire encore le nombre de mots en diminuant l'entropie, mais dans ce cas il faut augmenter le nombre d'itérations de sha256. C'est fait par défaut mais vous pouvez hériter de la classe pour faire votre propre cuisine. .
La sécurité d'une clef dépend à la fois de sa taille et de ce nombre d'itérations. Une clef très courte devrait comporter un grand nombre d'itérations et devrait donc prendre beaucoup de temps à générer (plusieurs jours par exemple). Un compromis est à trouver. A vous de voir.