J’ai retrouvé le sujet en question :
et ce post en particulier :
J’ai retrouvé le sujet en question :
et ce post en particulier :
OK, je n’avais pas vu passer ce post.
Pour répondre rapidement : non, en effet, l’UID n’a aucun intérêt technique. Mais il a un intérêt humain pour construire la WoT : poser un identifiant « qui parle » et qui constitue un point d’appui solide permettant de sécuriser la certification (et donc la WoT, et donc la monnaie).
C’est pour ça que je ne souhaite pas qu’il soit off-chain. Par contre, selon moi tout le reste peut l’être : nom, prénom, etc.
Autre argument mais plus faible : nous ne sommes pas à l’abri de changer de système cryptographique, dans ce cas l’UID pourra servir d’invariant.
On sort du sujet, donc je renvoi à cette discution:
De toute façon on en est pas à réfléchir à changer le protocole, juste à l’adapter pour le rendre optimal pour Substrate il me semble.
Le sujet est de savoir si le pseudo doit être connu des le démarrage du processus d’adhésion comme membre.
Si
Prenons un exemple :
A quel moment vont ils faire le lien, que j’ai en réalité deux comptes ? Quel outil auront ils pour être aider dans leur rôle de vérificateur ?
S’ils consultent leur historique de certification, il verront Donald Trump, mais sans pouvoir dire qui leur avait fait cette demande…
Voyez vous ce que je veux dire ?
Bises
Une solution alternative, est de pouvoir certifier une clef publique associée à un pseudo.
Un peu comme le fait d’inclure systématiquement le checksum (par exemple dans le format standard des copier/coller de clefs), on pourrait avoir un format du type : <clef_publique>::
Voir mieux : un checksum après le UserID pour être certain d’avoir tout copier/collé :
<clef_publique>:::
Le pseudo n’étant nécessaire, dans ce cas, que lors de la toute premiere certification. Dans les cas suivant, même si le copier/coller est mal fait, le UI pourront le détecter et afficher le bon pseudo au certifieur avant qu’il ne valide sa certification.
Oui ça c’est pas mal, que la certification inclut nécessairement le pseudonyme associé.
Et que lors de la publication de l’identité, toute certification qui ne respecterait pas ce pseudonyme serait alors détruite et devrait être rejouée (sans délai de rejeu, si ce n’est le délai de 5j anti-spam).
Oui
Personnellement je serais favorable à une simplification :
C’est tout.
Le document d’identité pour moi n’a pas besoin d’être en blockchain.
On peut très bien avoir un identifiant géré par cesium+ ou autre système externe et que la blockhain se contente de clef publique.
Les certifications ne pouvant être émise que par des comptes certifiés, les quotas peuvent s’appliquer.
La licence est la pour réguler la manière de certifier.
Ça me semble suffisant.
EDIT :
En fait, si on veux s’assurer que le titulaire du compte est vivant, effectivement un document d’identité semble utile pour l’expliciter chaque année. Ceci dit, une règle qui désactive les droits lié aux certifications pour un compte qui n’a émi aucun document depuis 1 an fait aussi l’affaire (et dès lors que le compte est actif à certifier ou émettre des transactions, c’est que le titulaire à accès à son compte, donc ça peut faire le job sans rajouter de document spécifique, mais en ajoutant une règle de gestion.
C’est la solution que j’aimerais retenir, qui va dans le sens de la dernière proposition de kimamila.
Oui, la blockchain n’en a pas besoin. Mais comme dit plus haut, le pseudo est là pour faire le pont entre la technique et l’humain, à travers une donnée fiable (ce qui ne serait pas le cas en off-chain).
Je crains qu’en enlevant le pseudo :
C’est le rôle du document d’adhésion, qui ne contient pas de pseudo. Et qui sert aussi de déclencheur à la vérification de la distance (calcul très coûteux). L’identité n’est pas utile pour ce cas.
Je comprends les points positifs du pseudo, mais il a un gros point négatif :
Il a donc les mêmes problèmes que le champ commentaire.
Il nécessite donc une validation de la donnée pour éviter des attaques par injection de code. Et aussi par des attaques sociales (mots racistes, insultes, usurpation d’identité par homonymie ou autres). C’est le côté attaque par l’humain.
Je pose ça là pour bien sécuriser ce champ.
Concernant le UserID, ce qui m’en semble essentiel c’est qu’il soit modifiable.
Partons des usages comme le fait @kimamila, on décidera dans un 2ème temps si on le stocke onchain ou offchain (ou onblock).
Concernant les usages, j’assume que:
Concernant le choix du stockage onchain ou offchain, il y a en réalité un 3 ème choix, ou plus précisément, le terme onchain n’est pas assez précis, et peut désigner 2 réalités différentes:
Il faut dissocier le contenu des blocs d’une part, et le storage onchain d’autre part. Le storage onchain est la seule partie qui doit nécessairement être conservée par tous les nœuds du réseau, et qu’il convient de garder légère sous peine d’impact négatif sur les performances et la scalabilité.
Concernant les blocs, le seul impératif est de conserver les blocs non-finalisés, soit en moyenne 5 à 10 blocs grand maximum!
Les blocs plus anciens ne sont conservés que par les nœuds d’archive, les nœuds d’archive ne servant qu à déployer de nouveaux indexers, ou restaurer des indexers down depuis longtemps ou avec une corruption de donnée.
Les nœuds d’archive peuvent être peu nombreux, n’ont pas besoin d’écrire des blocs, et peuvent donc sans problème être réservé à des machines avec beaucoup de stockage.
Ce que je veux dire, c’est qu’entre un stockage onblock et un stockage offchain, dans les 2 cas la donnée devra être stockée quelque part sur quelques machines, donc ça ne change rien en termes de taille de stockage.
Pour stocker une donnée onblock mais pas onchain, rien de plus simple, il suffit de créer un paramètre inutilisé dans un extrinsic.
En revanche, le storage onblock reste une violation du droit à l’oubli, mais dans la pratique, même avec un storage offchain, difficile d’être sûr que toute trace est effacée, une vielle copie peut toujours persister quelque part.
Bref, tout ça pour dire que je suis ok pour que le UserID soit stocké onblock, cela permettrait de le rendre accessible par l’api graphql de Hydra par exemple
Je propose donc:
idty_name
à l’extrinsic create_identity
change_idty_name
qui vérifie que l’appelant une identité validée (membre de la wot) avec paramètre idty_name
également inutilisé afin de ne pas alourdir le storage.Un système d’historisation tel que Hydra devrait alors être capable de fournir l’historique de tout les pseudos d’un membre et leur date de modification.
Il reste la question des comptes simple portefeuille, on pourrait y rattacher un « membre propriétaire », afin de pouvoir appliquer un quota.
Plus généralement, toute donnée à stocker doit être limitée soit par des quotas soit par des frais. Dans le premier cas cela implique que toute donnée soit rattachée à un propriétaire identifiable, dans le 2ème cas cela implique que l’utilisateur doit avoir suffisamment de Ğ1 pour créer ou modifier son profil.
On peut également mixer les deux: donner la possibilité de rattacher optionnellement un propriétaire, et ne faire payer que si aucun propriétaire n’est rattaché.
Je parlais bien de le mettre dans le Storage, afin de ne pas autoriser les doublons.
Autoriser la modification, pourquoi pas, mais bon ça ne me semble pas prioritaire du tout.
J’espère que cela n’empêchera pas d’avoir des comptes anonymes. Juste pour être sûr.
Je fais revivre ce débat suite au dernier ticket de @tuxmain #118.
Mon avis est le suivant :
J’aimerais attirer l’attention sur le fait que Duniter v2 :
Ce que je préconise :
J’aimerais qu’on se mette tous d’accord sur ce sujet parce que mine de rien c’est assez structurant.
Je suis d’accord avec tout ça.
Je ne vois pas bien pourquoi ces deux solutions seraient exclusives.
Oui voilà, restons simples pour l’instant et sortons cette Ğ1v2.
Je reviens un peu sur ce sujet, il y a un point qui n’est pas couvert par le message d’Eloïs ci-dessus : le Genesis.
Actuellement, sauf pour les indexeurs qui bénéficient d’un fichier à part où le lien pseudo ↔ identité est explicite, il n’y a pas moyen de connaître juste via le Storage le lien entre un pseudo et une identité.
Le stockage onchain actuel ne fait que lister les pseudos déjà réservés.
C’est un peu pénible, surtout que l’on parle quand même d’un volume de données assez faible.
Avant de lancer la ĞDev 600, est-ce qu’on ne reverrait pas ce point ? cc @HugoTrentesaux et @tuxmain notamment pour votre avis technique.
C’est une des raisons pour lesquelles j’avais changé le format du genesis pour rendre explicite la correspondance pseudo ↔ idty index :
"poka": {
"index": 61, # <---- ici
"owner_key": "5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn",
"balance": 1113895,
"membership_expire_on": 2010532,
"next_cert_issuable_on": 0,
"certs_received": {
Par contre, à moins d’avoir le genesis en json ou un indexeur qui a eu le genesis, il n’y a pas moyen de récupérer la correspondance en blockchain.
On pourrait a minima remplacer le set IdentitiesNames
par une map {pseudo → idty_index} et se contenter d’un indexeur pour avoir le sens inverse. Est-ce que ça répondrait à la problématique ?
Je me sens d’ailleurs un peu bête de ne pas l’avoir fait avant, on a des clés en Blake2_128Concat
qui font 464 bits (128 + 42×8), et pas de valeur, alors que un idty_index serait uniquement 32 bits.
Oui ce serait suffisant.
Le Concat vient de moi, avant c’était juste 128bits.
Ceci dit, je reste convaincu que 32 bits (ou 32 + 42x8 = 368 bits max) reste peu de choses par rapport aux volumes de comptes et de certifications.
J’ai directement commité sur ma branche : fix(#125): feat(identity): associate idty_index to uid (961e69c3) · Commits · nodes / rust / Duniter v2S · GitLab
Il me paraît peu satisfaisant de faire des contortions de code pour essayer de faire que le pseudonyme soit comme un identifiant unique, alors que l’identité dispose déjà d’un numéro unique (principe DRY).
La responsabilité de l’identifiant unique étant assuré par le numéro unique, le pseudonyme n’a pas besoin d’avoir ce rôle, il doit se concentrer sur l’aspect humain, la personnalité de l’utilisateur (principe de responsabilité).
Je propose donc une idée.
On peut :
guyLeRenard-128
mathilde-2763
mathilde-8529
paul-28
paul-568
paul-5964
Une technique utilisée déjà dans la majorité des plateformes avec identifiant personnel, qui permet d’avoir un pseudonyme déjà utilisé.
Cela permet :
En obligeant les clients à s’appuyer sur le numéro unique et non le pseudonyme, on force, de facto, à une bonne pratique de sécurité.
On garde l’aspect humain du pseudonyme, la personnalité affichée, en y ajoutant même plus de liberté pour l’utilisation.
On peut même aller sur la possibilité de changer de pseudo sans perdre ses certifications. (doudou-1278 quand j’avais 10ans, je préfère maintenant Barbare-1278).
Qu’en pensez-vous ?
Super idée, par contre je mettrais un hash à la place parce que ça évite la course “j’étais là avant toi”.
On peut aussi encoder le numéro dans une base plus “dense” que l’écriture décimale, par exemple base58.
Par contre c’est un gros changement par rapport à la v1 donc ça nécessite des échanges et un consentement de la communauté. Mais je suis d’accord que ça aurait du sens de le faire au moment de la migration.
Et aussi je mettrais un autre caractère comme #
qui n’est pas permis dans le pseudo.