Gsper arriver à coder Gsper

Alors attention @1000i100 le code Rust de @nanocryk ne donne pas la même keypair pour le même couple de id secret/password, je le sais car je l’utilise dans un projet que je développe en ce moment.
Il y a une histoire de nonce dans l’algo ed25519 qui doit etre implémenté différemment selon les librairies :confused:

1 Like

Ah… oui, tu fais bien de le préciser ! :slight_smile:
Du coup, si tu as des info pré-maché, je suis prenneur, sinon je fouille ça dès que j’ai un instant.

Serieux ?! Merde, je pensais avoir fait des tests pour ça. Un ticket de plus à ouvrir xD

1 Like

Les tests vérifient la signature, et ça ça fonctionne bien. Mais pas la génération d’un couple de clé a partir d’un couple id secret/pass wd, je te rajoute le test unitaire si tu veut mais ça va casser les tests :stuck_out_tongue:

En fait je n’ai pas la solution, j’utilise directement la clé privée du couple que je veut utiliser que je récupère au format fichier de clé depuis duniter-ts :wink:

Aucun.

Ou plus exactement, je ne pense pas concevoir un outil suffisamment puissant pour ébranler la sécurité des algo de cryptographie modernes utilisé dans Duniter.

En revanche, pour un utilisateur qui à suffisement d’indice (ou de souvenir partiels) de ce que peuvent être ses identifiants secret et mot de passe, là oui, j’espère le rendre capable de tester suffisement de variante proche pour qu’il puisse retrouver celle qu’il a utilisé pour son compte.

Après, pour éviter que mon code ne fauche les identifiants retrouvé, je ne peux que me faire confiance (ce qui dans mon cas n’est pas difficile) mais pour les autres, je ne peux que recommander d’auditer le code, et d’en utiliser des instance installé en local ou héberger par des personnes de confiances.

1 Like

@nanocryk hop c’est fait, j’ouvre l’issue et je push mon test :

---- keys::ed25519::tests::keypair_generate_ stdout ----
        thread 'keys::ed25519::tests::keypair_generate_' panicked at 'assertion failed: `(left == right)`
  left: `"Dy9QiniLiYprhzeuUna1qPrSGBDv1R7GHC5wYv1Eet1k"`,
 right: `"7iMV3b6j2hSj5WtrfchfvxivS9swN3opDgxudeHq64fb "`', crypto/keys/ed25519.rs:474:9
note: Run with `RUST_BACKTRACE=1` for a backtrace.

Ce qu’on avait remarqué c’était qu’un même clé privée et un meme message ne donnait pas forcement la même signature, et c’est un problème connu. Mais le couple salt/pass c’est franchment bizarre, car ça retire tout l’interet d’avoir une méthode de génération standardisée.

Ha ok c’est pour ça que je ne te l’ai pas signalé car je pensais que tu avait déjà remarquer les deux (qui ont probablement la même cause)

@1000i100 en fait ton projet ressemble beaucoup a ce qu’a fait @jytou … (avec l’option -w)

4 Likes

@nanocryk bon je viens de regarder en fait bonne nouvelle c’est juste que tu avait inverser le password et le salt lors de l’appel de la crate de crypto :wink:

je viens de pousser un correctif :slight_smile:

2 Likes

Hahaha je suis mauvais xD Je me disais aussi que ça n’avait pas de sens d’avoir des résultats différents à ce niveau là :stuck_out_tongue:

1 Like

Effectivement, ça ne fait pas exactement la même chose, mais ça s’en rapproche beaucoup !

Il y a des chances que sa version soit plus véloce que la mienne, mais moins user-friendly.

3 Likes

V1 fonctionnelle !

Pour l’instant, pas de worker ou accélérer, pas de génération de variante à partir de celles indiqué…
Gsper teste juste chacun des identifiants secrets listé avec chacun des mots de passe listés et regarde si le résultat correspond à la clef publique recherché.

Si oui, la combinaison gagnante est affichée.

C’est tout pour l’instant.

https://gsper.duniter.io/ =>

404 Not Found

c’est normal docteur ? Petit souci nginx ?

Normal… normal…
Presque :stuck_out_tongue:

(je déménage les outils de l’écosystème (qui ne sont donc pas des clients à proprement parlé) dans le groupe tools).

Du coup, il faut que je face la redirection qui va bien au niveau nginx en effet pour que tout ce passe bien :wink:

1 Like

Voila qui est fait, donc Gsper est de nouveau accessible :wink:

Finalement, tu as utilisé quelle librairie ?

J’ai essayé avec tweetnacl, mais y a un truc qui me chiffonne.

J’ai regardé ton fichier duniter_tools et j’y vois plein de paramètres en plus que je ne comprends pas (seed, length, etc.).

Où sont-ils spécifiés ?

Quelqu’un aurait un tuto clair sur les algos utilisés svp ? :slight_smile:

duniter_tools à été codé par tortue, je me suis contenter d’utiliser ce qu’il a fait (et c’est un fichier qui contient à la fois du code maison et des lib incluses).
J’aimerais segmenter pour ne pas mélanger du code maison et du code de lib mais pour librer une V1 rapidement, j’ai composer avec l’existant.

Les algo : scrypt pour passer des idSecret/salt et password au seed, puis du seed aux clef publique et privé, et base58 pour passer les données en caractère lisible non ambigue.

@b3j0f

             ___________            _____________________________                _____________________________ 
            | libscrypt |          | libcrypto (NaCl, Sodium...) |              | libcrypto (NaCl, Sodium...) |
            |___________|   Seed   |_____________________________|   Keypair    |_____________________________|
salt ------>| generate  | -------->|  generate keypair from seed | -----------> |  Sign and verify  message   |
password -->|  seed     |          |                             |              | using keypair pub/priv key  |
            |___________|          |_____________________________|      ------> |_____________________________|
                                                                        |
                                                                     message         

Parametres SCrypt : N=4096, r = 16, p = 1

4 Likes

En me basant sur ton jolie schéma, je n’ai maintenant plus besoin de duniter_tools qui pesait plus d’1Mo.

J’ai retravaillé l’interface, ajouté des options, fluidifié l’avancement, mieux exploité la puissance du pc…

Bref Gsper qu’il commence à pouvoir réellement être utile :stuck_out_tongue:

Il y a surement moyen d’améliorer encore les perf (en limitant le nombre d’aller/retour entre worker et page principale, en utilisant du webassembly pour faire la partie scrypt+nacl, et peutêtre d’autres manière encore) mais je pense que là, le plus utile, ça va être d’ajouter d’autres générateur de variantes.

3 Likes