En effet ça me semble assez élégant de faire comme ça : stocker uniquement le JSON brut et soumettre les images à part au moment de l’ajout en base de donnée.
Oui, tout à fait, un CID (v1), c’est juste
- un préfixe pour déterminer la base d’encodage (base32, base58…)
- un numéro de version du CID (v0 ou v1)
- un identifiant multicodec (dag-json, dag-cbor, dag-pb… mais aussi ip4, dns…)
- un identifiant multihash pour savoir avec quel algo la donnée a été hashée (sha-256…)
- le hash de la donnée hashée avec l’algo précédemment défini
Donc on peut se contenter de calculer le CID d’un fichier de manière déterministe sans nécessairement le re-soumettre et ça fonctionnera.
Ça dépend des clients. Dans ma tête, les clients mobile se contenteront par défaut de récupérer les données en GraphQL et n’effectueront pas de vérification. Mais un client bureau offrira la possibilité de demander la donnée source signer et pourra faire la vérification de manière automatique par défaut.
Je n’ai jamais d’absence de signature, c’est juste que pour les documents importés, la signature est dans le document alors que pour les nouveaux documents, la signature est déplacée dans la demande d’indexation.
La manière dont j’ai fait permet quand même de vérifier la signature des profils “v1” en version 1 et 2 individuellement, il faut juste faire un peu plus de travail :
- récupérer l’avatar et le convertir en base64
- récupérer le dag du document v1, remplacer le CID de l’avatar par l’avatar en base64, retirer la signature
- vérifier que la signature correspond bien au hash du document json précédement reconstitué en priant pour que le document original n’ait pas été sérialisé de manière exotique, par exemple en ajoutant des espaces
En fait ma plus grosse critique sur les documents C+ est que le payload de signature n’est pas défini précisément (cf Données Cesium plus, à quoi correspond exactement le hash?). Il dépend du format sous lequel l’utilisateur a soumis son message et il y a beaucoup de liberté sur ce format. De plus, il n’y pas d’encapsulation de la donnée, les champs hash et signature sont ajoutés et retirés au json avec des regexp. Mais peu importe, ça complexifie juste la vérification de la signature, pas l’import des données.
Cette semaine je ne suis pas à Toulouse mais du 23 au 26 avril en journée avec plaisir !