Sécurité du Passkey Wallet
Le Passkey Wallet d'Organigram est un portefeuille Ethereum non custodial. Sa phrase de récupération est générée dans le navigateur et n'est stockée que chiffrée. Seule une clé d'accès peut la déchiffrer. Cette page décrit ce qui protège le portefeuille, ce que les serveurs d'Organigram peuvent voir et les risques que le portefeuille ne peut pas éliminer.
Comment la phrase de récupération est protégée
- Chaque clé d'accès est créée avec vérification obligatoire de l'utilisateur : le déverrouillage demande toujours la biométrie, le code PIN ou le mot de passe de l'appareil.
- Chaque coffre chiffré utilise son propre sel PRF aléatoire. La clé d'accès transforme ce sel en 32 octets secrets (la sortie PRF WebAuthn), dont est dérivée une clé AES-256-GCM avec HKDF-SHA-256. Deux coffres ne partagent jamais la même clé.
- La sortie PRF et les clés dérivées ne sont jamais stockées. Les zones mémoire qui les contiennent sont remises à zéro dès que la clé est dérivée.
- Plusieurs clés d'accès peuvent déverrouiller le même portefeuille : chacune chiffre sa propre copie du coffre. Supprimer une clé d'accès ne supprime que sa copie.
Où le portefeuille s'exécute
- Les clés d'accès sont liées à l'hôte exact qui sert le portefeuille, par exemple
wallet.organigram.ai. L'application Organigram sur organigram.ai, ou tout autre site, ne peut pas déclencher de demande de clé d'accès pour elles.
- L'origine du portefeuille ne charge aucun script tiers et ne peut pas être intégrée dans une autre page. Sa Content Security Policy impose ces deux règles.
- Les applications accèdent au portefeuille par une fenêtre contextuelle. Les demandes de signature d'un message ou de données typées, d'envoi d'une transaction, ou de chiffrement et déchiffrement de données sont transmises par
postMessage. Le navigateur authentifie l'expéditeur : l'origine affichée sur l'écran d'approbation ne peut donc pas être usurpée par un lien.
- Les transactions sont relayées par le proxy RPC configuré pour le portefeuille, jamais par un nœud choisi par l'application qui en fait la demande.
Ce que voient les serveurs d'Organigram
Une sauvegarde distante contient, pour chaque clé d'accès du portefeuille, son coffre chiffré et son identifiant de credential, que n'importe laquelle de ces clés d'accès peut ouvrir. Le reste de l'enregistrement (adresses dérivées, noms de comptes, appareils) est chiffré avec une clé dérivée de la phrase de récupération. Organigram voit donc l'adresse du portefeuille et les identifiants de credential, qui ne sont pas secrets, et rien d'autre. Les sauvegardes ne sont acceptées qu'avec une signature de l'adresse du portefeuille auquel elles appartiennent.
Pourquoi vous pouvez faire confiance à ce portefeuille
Un portefeuille qui s'exécute dans le navigateur n'est digne de confiance que dans la mesure où le code reçu par le navigateur l'est. Vous n'avez pas à croire Organigram sur parole :
- Le code source est public. Le code du portefeuille se trouve dans le dépôt public
organigram/passkey-wallet
.
- Chaque build de production est publié. Avant qu'une nouvelle version n'atteigne
wallet.organigram.ai, ses fichiers et un manifeste listant l'empreinte SHA-256 de chaque fichier sont publiés comme release de ce dépôt public. La release pointe vers le commit public exact à partir duquel les fichiers ont été construits, et une release publiée reste visible de tous.
- Ce qui est servi peut être comparé à ce qui est publié. La commande ci-dessous télécharge le portefeuille tel que votre navigateur le reçoit et compare chaque fichier avec la release correspondante. Elle s'exécute sur votre machine et ne dépend donc d'aucune affirmation de l'hôte du portefeuille sur lui-même.
- Chaque release peut être reconstruite par n'importe qui. Le dépôt public contient son propre lockfile, et la production est construite à partir de ces seuls fichiers publics, en dehors de l'espace de travail privé d'Organigram. Reconstruire le commit d'une release donne les mêmes fichiers, octet pour octet.
- Rien d'autre ne peut s'exécuter dans la page. La Content Security Policy du portefeuille interdit les scripts tiers et l'intégration du portefeuille dans un autre site.
Faire tourner le portefeuille sur votre ordinateur
Le code du portefeuille est public : vous pouvez donc aussi le faire tourner vous-même, sur votre propre ordinateur. Votre copie s'ouvre sur https://local.wallet.organigram.ai:3002 et déverrouille les mêmes clés d'accès que wallet.organigram.ai : vous retrouvez les mêmes comptes. Activez le réglage « Your own wallet » dans le portefeuille, et les applications que vous utilisez enverront leurs demandes à votre copie.
Cela fonctionne parce que https://local.wallet.organigram.ai est une adresse particulière : Organigram l'a configurée pour pointer vers 127.0.0.1, que chaque ordinateur comprend comme « cet ordinateur ». Quand vous l'ouvrez, votre navigateur ne contacte pas Organigram : il s'adresse à votre propre machine, qui sert la copie que vous avez lancée. Vous pouvez le constater vous-même : modifiez un texte dans le code du portefeuille, et la page affiche aussitôt le changement.
C'est la garantie la plus forte que le portefeuille puisse offrir. La page qui manipule vos clés est servie par votre propre ordinateur, à partir d'un code que chacun peut lire, et ne dépend plus de wallet.organigram.ai. Ni Organigram ni quelqu'un qui prendrait le contrôle de ses serveurs ne pourrait modifier ce qu'elle fait.
C'est aussi le seul cas où vous pouvez saisir votre phrase de récupération dans une page web. Ne la saisissez jamais sur un site web : une fausse page peut ressembler trait pour trait à votre portefeuille et envoyer ce que vous tapez n'importe où. Sur une copie qui tourne sur votre propre ordinateur, le code qui reçoit la phrase est celui que vous exécutez, et aucun serveur distant ne peut le remplacer. Vous en aurez rarement besoin : une fois votre coffre chiffré restauré dans votre copie, vos clés d'accès le déverrouillent comme d'habitude.
Avant d'y saisir votre phrase de récupération, vous pouvez aussi déclarer local.wallet.organigram.ai dans le fichier hosts de votre ordinateur. Ce nom mène alors toujours à votre machine, quoi que réponde un serveur DNS. Sans cela, il dépend du DNS public comme n'importe quel autre site web.
Pour installer et lancer votre copie, modifier votre fichier hosts et restaurer votre coffre, suivez les instructions du README du portefeuille.
Vérifier le portefeuille que vous utilisez
Avec Node.js 20 ou ultérieur :
git clone https://github.com/organigram/passkey-wallet
node scripts/verify-runtime-dist.mjs --url https://wallet.organigram.ai
La commande trouve la release dont le fichier index.html est celui qui est servi, puis vérifie chaque fichier de cette release, y compris la configuration d'exécution (qui définit l'hôte des clés d'accès, le serveur Organigram et les points d'accès RPC de la blockchain). Elle se termine par serves release … unchanged et le lien de la release, ou liste chaque fichier qui diffère et s'arrête avec une erreur. Toute différence signifie que le portefeuille ne doit pas être utilisé tant qu'elle n'est pas expliquée.
Reconstruire une release vous-même
Avec Node.js 24 et pnpm 10.28, depuis le dépôt public, au commit vers lequel pointe une release :
git checkout <release commit>
pnpm install --frozen-lockfile
curl -LO <release manifest URL>
node scripts/verify-runtime-dist.mjs --dist app-dist --manifest <manifest file>
La commande affiche Verified … release file(s) lorsque votre build correspond à la release. La configuration d'exécution et les images sont exclues de cette comparaison, car chaque déploiement définit les siennes ; la vérification du portefeuille en ligne ci-dessus les couvre.
Ce que la vérification ne peut pas prouver
- Un hôte compromis pourrait servir le code publié à la commande de vérification et un code différent à un navigateur donné. Lancer la commande depuis le même réseau et peu avant une opération sensible réduit ce risque, sans l'éliminer.
- La release est produite par la chaîne de build d'Organigram. Comme n'importe qui peut la reconstruire à partir du code source public et que sa publication est permanente, une release altérée est détectable, mais seulement une fois que quelqu'un la reconstruit.
- L'option la plus sûre est de faire tourner le portefeuille vous-même, sur votre propre ordinateur, comme décrit ci-dessus.
Limites
- Clés logicielles. Pendant la signature d'une demande, la phrase de récupération et la clé privée sont dans la mémoire de la page du portefeuille. La remise à zéro limite la durée pendant laquelle les clés restent lisibles, mais ne garantit pas qu'elles ont quitté le processus : le moteur JavaScript peut en conserver des copies, et la phrase de récupération est une chaîne de caractères qui ne peut pas être remise à zéro. Une extension de navigateur malveillante ayant accès à la page du portefeuille peut la lire.
- Intégrité de l'hôte du portefeuille. Quiconque contrôle l'hôte du portefeuille, son DNS ou sa chaîne de déploiement peut servir un code qui demande la clé d'accès. Les déploiements du portefeuille sont construits à partir de dépendances figées et de workflows audités, et peuvent être comparés à leur release publique (voir ci-dessus).
- Changements de domaine. Une clé d'accès ne fonctionne que sous l'hôte pour lequel elle a été créée. Déplacer le portefeuille vers un autre domaine rend les clés d'accès existantes inutilisables pour celui-ci : exportez d'abord la phrase de récupération.
- Clés d'accès perdues. Si toutes les clés d'accès d'un portefeuille sont perdues et que la phrase de récupération n'a jamais été exportée, personne ne peut récupérer le portefeuille, pas même Organigram.
Recommandations
- Enregistrez au moins deux clés d'accès sur des appareils ou des fournisseurs différents.
- Enregistrez une sauvegarde distante depuis le portefeuille (« Save remote backup »). Elle est chiffrée, et permet à vos clés d'accès de restaurer le portefeuille dans un autre navigateur, sur un autre appareil ou dans votre propre copie du portefeuille. Elle ne remplace pas la phrase de récupération : sans clé d'accès, personne ne peut l'ouvrir.
- Exportez la phrase de récupération une fois et conservez-la hors ligne.
- Avant d'approuver une demande, vérifiez le domaine demandeur affiché par le portefeuille.
- Pour les opérations sensibles, et chaque fois que vous avez besoin de votre phrase de récupération, utilisez votre propre copie du portefeuille.