La sécurité! TOUS concernés

Au temps pour moi, ce n’était pas le bon lien : https://forum.duniter.org/t/recommandations-de-securite-v3-a-lire-avant-de-creer-votre-compte-g1/1829

Celui-ci est totalement public.

1 « J'aime »

Bonjours à tous les humains,
J’aimerai vous faire part des résultats d’une attaque que j’ai mené sur Cesium.
Quand j’ai compris que le client dérivait la clé privée à partir de 2 mots de passe, j’ai eu envie de tester quelque chose: une attaque par brute force.
Avec l’API de Duniter, on peut télécharger la liste des clés publiques des membres en une seule requête HTTP. J’ai aussi téléchargé une wordlist de mots de passe français trouvée sur Internet, dont j’ai filtré tout les MDP de moins de 8 charactères (la limite de Cesium). Ensuite, j’ai codé un petit programme Rust qui génère les clés correspondant aux MDP de la wordlist et qui les compare avec celles de la liste. Devinez quoi, j’ai cracké 3 comptes membres:

Soudan Philippe, DXF5FnVDnnwrvEJqTynxfCv5o2o8id9henmzKZw319Qh
Id: c*****c
Mdp: c*****c

Perrot Elisabeth, 6kS1SEGWr16amWYBMd8JuCuFW8vTQC8HvBBHpGZNq4vj
Id: l*****e
Mdp: c*****m

Aubrun Elisabeth, 67nTY2oTHP7KDPbgGpqJgzSMYVwHvrd53bDv1KQCtNn4
Id: n*****e
Mdp: b*****e

J’en ai donc évidemment profité pour me certifier mon comtpe perso: 2Mm73GqbYYTotpBFrbRZwG8hLecyerfdxXPQeJBbAJKQ
Voilà j’ai maintenant 3 certifications alors que je n’ai jamais rencontré la moindre personne utilisant la June de toute ma vie.

Je vous avoue que j’ai un peu le seum de pas avoir cracké 2 comptes de plus, mais c’est quand même un bon résultat. Ma wordlist comprenais seulement 6000 mot de passes (36M de possibilités) et j’ai utilisé un laptop qui mettais environ 80ms pour tester une clé. En reproduisant l’attaque avec plus de moyens, je pense que l’on pourrait facilement cracker beaucoup plus de comptes.

Bref tout ça pour dire que les développeurs de Césium ont vraiment fait du caca. Avant Cesium, je n’avait jamais vu de wallet générer la clé privée à partir de MDP. Et c’est pour une bonne raison: il ne faut jamais faire confiance au humains pour générer de l’entropie forte. Les clés privée doivent toujours être générées aléatoirement, et non entièrement dérivées à partir de valeurs choisies par l’utilisateur.

9 « J'aime »

Merci pour cette alerte par l’expérience.

La prochaine génération de clients utilisera des mnemonic aléatoires pour régler ce problème.

J’avais fait un bruteforce en Rust bien optimisé et multithread, si ça t’intéresse : tools / Ğ1force · GitLab (mais qui ne gère pas le dictionnaire)

Oui ce serai une bien meilleure idée.

Intéressant, tu as eu des résultats ?

Je n’ai cherché que caractère par caractère, donc non aucun résultat, et je me suis dit que ça prendrait trop de temps de concevoir un bon bruteforce avec dictionnaire + substitutions. Mais le programme peut servir de vanitygen efficace (avec recherche par regex).

Très bonne occasion d’expliquer pourquoi la la licence n’est pas un examen, mais bien une protection de tous les membres passant par chacun.
En tout cas, une bonne démonstration que la june est toujours au stade expérimental et que le travail des devs pour un Duniter next-gen est indispensable.

2 « J'aime »

Bonjour, je ne suis pas développeuse et je ne comprends pas toujours vos termes MAIS
lorsque j’ai créé mon compte portefeuille on m’a conseillé de choisir un id et mdpasse facile à reproduire (et surtout à ne pas perdre car irrécupérables) car demandés souvent quand on navigue sur Césium.
Le problème est qu’en basculant ce compte portefeuille en compte membre je n’ai pas été avertie des risques du manque de sécurité… Plus tard, lors d’un Gmarché on m’apprend qu’il vaut mieux créer 2 comptes : 1 « portefeuille » (id et mdp simples) et 1 « membre » différent pour se faire certifier (avec au moins 40 caractères dans phrase de passe pour éviter les hacks).
On me conseille donc de révoquer mon compte pour en créer un nouveau et re-demander mes certifications…
Quelles sont les conséquences ?
Y a-t-il un moyen plus simple de sécuriser le compte actuel sans le révoquer ?

Malheureusement non, le compte (et donc sa clé publique) est créé via les id et mot de passe.
Le conseil des 2 comptes est donc la meilleur option donc révocation du premier.
Je comprends que révoquer un compte en créer un second et redemander aux certificateurs de recommencer, peut paraître chiant, mais ça sécurise d’autant plus la June.
Le message N°22 de ce post devrais faire prendre conscience du problème à tous.
En plus ça interpellera aussi vos certificateurs qui n’étaient peut-être pas au courant.

2 « J'aime »

Merci Tchois, la réponse est claire et précise
en effet certains certificateurs vont sûrement apprendre quelque chose…
Petite question quand même : comment ne pas perdre les G1 déjà cumulées ?
Bonne journée

1 « J'aime »

Même en révoquant le compte, celui-ci sera toujours accessible en tant que simple portefeuille, vous pourrez donc faire des achats avec ou recevoir des junes dessus.
Après si vous préférez, vous pourrez toujours transférer le solde de ce compte révoqué sur le nouveau. :wink:
Amicalement,
Francis

2 « J'aime »

Super ! merci !
j’en ai parlé à un de mes certificateurs, qui m’avait conseillé au début, de choisir des ids faciles pour mon compte portefeuille, sans préciser qu’il valait mieux créer un nouveau compte sécurisé pour le cpte membre.
Le problème est qu’il a aidé beaucoup de personnes à procéder de cette manière (pour faciliter l’introduction de nouveaux venus) et que ces gens ont été certifiés par la suite (donc passés en cpte membre !)…
En tant que développeurs auriez-vous une idée de code pour palier à ce type de faille potentielle ?

1 « J'aime »

En tant que développeurs auriez-vous une idée de code pour palier à ce type de faille potentielle ?

Comme je le disait plus haut, les wallet devraient générer la clé privée aléatoirement et la stocker quelque part (dans un fichier chiffré ou sur un hardware-wallet par exemple). La clé privée ne devrait en aucun cas être dérivée uniquement à partir de données à faible entropie, comme des mot de passes. L’ideal étant que la clé dépende à la fois d’une suite d’octets générée aléatoirement et aussi d’une passphrase (2FA).

Perso, j’ai créer mon compte sur Cesium avec des mot de passes aléatoires que j’ai stocké dans un gestionaire de mot de passe.

1 « J'aime »

Bon, là, je vous laisse entre vous… Merci pour vos réponses très instructives !

1 « J'aime »

Bonjour @Spiranne13 :slightly_smiling_face:

Je ne suis pas développeur du tout, je « Bidouille »…
En ce qui concerne les pass Phrases, il existe divers méthodes, mais par exemple tu peux tout simplement utiliser un générateur de mots de pass fort comme par exemple sur ce site => https://www.lastpass.com/fr/features/password-generator et tu choisis une longueur minimale de 20 caractères tout mélangé et tu télécharges sur ton ordinateur un logiciel de stockage de mots de passe comme KeePass par exemple https://keepass.fr/

Sinon quand je parle de pass phrase, tu peux très bien te créer 2 phrases courtes que tu sais que tu vas retenir, et tu y inclus des caractères spéciaux, des majuscules et minuscule, des chiffres, et tu peux même mettre les espaces entre les mots, Césium les accepte !

Exemple : Mais où ai-je encore mis mes clefs ?!
Devient par exemple : $Mais où ai-je&Encore mis?!Mes^ 632Clefs!*

Bien sûr comme à tout le monde je te conseille vivement de conserver tes pass phrases à plusieurs endroits comme par exemple, sur un carnet que tu gardes au fond du tiroir, sur un logiciel comme KeePass et sur un Document texte que tu gardes sur une clef USB…

Voilà en espérant que cela puisse t’aider.
Amicalement,
Francis :blush:

1 « J'aime »

Merci fdrubigny
pour ceux/celles qui n’avaient pas d’idées.
Je ne savais pas pour les espaces mais bon à savoir !
En ce qui me concerne, j’ai plus confiance en mon petit carnet que dans le numérique…
Bonne journée

1 « J'aime »

D’ici à un an les prochaines versions des logiciels ne laisserons plus le choix des phrases de passe. Ce qui supprimera cette faille, en attendant i faut faire confiance aux humains pour être sérieux et créer des comptes sécurisés.

2 « J'aime »

Oui bonne idée
Maintenant j’ai bien compris la différence entre compte membre et compte portefeuille, du fait d’avoir séparé les deux, car sinon, l’un dans l’autre : pas évident à comprendre pour des « novices » !
Peut-être une autre idée… à l’inscription les deux sont proposés, donc si on choisit le compte portefeuille celui-ci ne devrait pas pouvoir passer en compte membre ! …
C’est juste une idée…
Bonne soirée

Merci de nous alerter, ça serait bien de remonter les certifieurs et d’avertir les propriétaires des comptes pour révoquer les comptes. On pourrait financer un pôle de surveillance pour faire ce que tu as fait même si les choses vont se développer, financer un pôle servira aussi à l’avenir on peut anticiper un peu avant d’être mieux structuré, c’est une idée comme ça… malgré tout la ML tend à donner une place importante à l’humain en dépit des problèmes que ça suscite. La ML devrait plutôt évoluer en même temps que les prises de consciences, comme le fait d’être responsable et de faire attention à la création de leur compte qui comme tu l’a démontré concrètement est souvent pris à légère.

Ps : en réponse à ce com (je n’ai pas lu la suite/les réponses) La sécurité! TOUS concernés - #24 par hardcoresushi

bonne idée le carnet, mais fais-en deux ou trois alors!

@Maaltir

Salut,

C’est une très mauvaise idée de ne pas laisser le choix des mots de passe.

Une solution pour éviter ça, est de laisser le choix parmi une grand liste de mots de passe.

Le programme pwgen le fait très bien, l’a très bien compris:

Voici ce qu’il sort:

en,ae"Beighooz3eiv do8PaiSh@uzu6Ahqu8 ogae1ado4Haetheez% lojooSai"p5fie0kei
ix%aingaiK1ohmo:ol aic[u0EeKaeLoubeB) ce`s0zeech0yingoSh ThiLahqu;oo7Choo5o ahcheej|o[vu4Shai4 eiYo3paht-i^a9eeZo leiloologush4Iep~i Uingae@Vae8quahQue kai4ac0wihae9rae(K chiedoh8gohqu3Hi+Z Uy:ai4aing"ie6cath gaiNg@ai7gahrei\li rei3Eith!ooGhahma^ AoCuezu9phoogh)eed xoapev^uis8ahqu1In nohcoo0Vef]ee9Ieb4
ue1aiBie8ya%oqu0Da ienge1meiJ=e4ud2ye gei,z5Ohgh|ohlu7qu aehi%Ceshe7ma2guoj
Ies8eiquu4eehoo& phae8ooL]o2ia8geef aGai>w6iol0OhX1ees ohmais;eedien5phiL
cie6da9Aed_ee1rei6 zootha2ewoul6soh:T ahvei@thooYe8beim7 WiNgaehiQuai"zah7f
Eu7chaish1aiT[oh1g rao;J7ChahX1uk$i8o eiT’ohngee5aingee% Oy9ap_iew4ilahGo-t
ieL8shooViez{oh9uf eix8Io{sas0ahngahN hie9rieM1aesh!ai2s taNae/sh1eiriac1Xo
quaePhai8aeCa)x4ae gu9eephuGho8yoh+th kai8oor8baiKah_yef iut6Jei5Wai(phaen#
Oophai’x1ta5iChah0 aeDootie1sahd"aif] ooF0eeshei#weik;on wooza{tae3vooBeequ
rei0tei<peeNg2Wahn aiHahg1pa0deiqu%ie Xaihequeiy8eib#api thanuboo"mua|b4Ufe
kath0Efuosh=au9pai xaejahl’ahch8Quo5b ra#S5ohw9aeSai2ool eeyo~Noyo5noo3een1
aaTh2lah-Gh1hai4je iep+oNgaethahn0vae ahkaB$uj1ahghow7iy eefai6Aing9auphu%e
uk5eirahx{uogaeB7N thoo?n3ia~T=ah8ief Aigh6ahsiecahb;ae6 Aen]ai~b6haiv’aic<
baaz’ie3Ti!Y4eeri5 jah>baefoo^y0uiSh6 eis0ooqu_e2inieBei ahtoh6Yi.v7eigh9iu
Aiph2AaleiNg$ae2jo Iux?ae0Reidah3aiFe nei8ein3xo1Aikemi( eeYeiSh0Geequahz^u
Quaa;w1raiqu4mie9n mahr0ta5hoD^eeph6o ioTah3ohshi_R"u4ie KeichoFoh$vee4fi’u
ui5vahM?eit1gohj7o EiW3mao;ng2Phu1iec Wahlohy3aih,oowaib zeijie9Yoo4aik#u2y

Et donc parmi la liste on en trouve bien un qui nous plaît :slight_smile:
Si je choisis dans la liste KeichoFoh$vee4fi’u parce que ça sonne pour moi, le mot de passe est encore un peu court: je pourrais mettre derrière une petite phrase que j’aime bien, et ça donnerait:
KeichoFoh$vee4fi’u-va-chercher-des-salades-dans-l’entropie-galactique-magique.

Si le mdp est destiné à être stocké dans la mémoire d’un être humain, il peut être préférable d’en retirer les caractères spéciaux. Un truc comme KeichoFohvee4fiu-va-chercher-des-salades-dans-l’entropie-galactique-magique est déjà assez long pour se protéger des attaques par force brute, pas besoin d’ajouter des $ si ça rend tout plus compliqué à se souvenir.

Edit: cependant une phrase possède moins d’entropie qu’une liste de mots aléatoires, car par exemple « verbe nom verbe » est moins fréquent que « nom verbe nom ».