đ Wallets & IdentitĂ© DĂ©centralisĂ©e
Gestion des clés (Key Mgmt), Seed Phrases (BIP-39), Metamask (EIP-1193), Hardware Wallets & WalletConnect.
Fondement : Clés & Cryptographie
Le "Wallet" est un porte-clés. Clé Privée (le Secret), Clé Publique (le Cadenas), Adresse (l'IBAN). Cryptographie Asymétrique (ECDSA).
Clé PrivéeClé PubliqueECDSAKey Mgmt : Seed Phrase (BIP-39)
La "Master Key". BIP-39 (12/24 mots). HD Wallets (BIP-32/44) et les chemins de dérivation (`m/44'/60'/...`).
BIP-39Seed PhraseHD WalletKey Mgmt : Custody
"Not your keys, not your coins." La différence critique entre Non-Custodial (Metamask) et Custodial (Binance).
Non-CustodialCustodialWallet : Metamask (Hot Wallet)
Le "Software Wallet" dominant. Son rĂŽle de "Hot Wallet", de Provider (EIP-1193) et de Signer. Risques vs Convenance.
MetamaskHot WalletEIP-1193Wallet : Hardware (Cold Wallet)
La sécurité maximale. "Cold Storage" (Ledger/Trezor). Le Secure Element et le flux de signature sécurisé.
Hardware WalletCold StorageSecure ElementProtocole : WalletConnect
Ce n'est pas un wallet. C'est le "pont" (via QR code) qui connecte les DApps (Desktop) aux Wallets (Mobile).
WalletConnectMobileQR CodeIdentité : SIWE & ENS
Le wallet comme identité. `personal_sign`. Le standard "Sign-In with Ethereum" (EIP-4361) et les noms (ENS).
IdentitéSIWEENSSécurité : Risques & Pratiques
RÚgle n°1 : Ne jamais partager sa seed. Risques (Phishing, `setApprovalForAll`) et protections (Revoke, Hardware).
SécuritéPhishingRevokeUn "Wallet" (portefeuille) est un terme trompeur. Il ne **contient pas** vos cryptomonnaies (celles-ci "vivent" sur la blockchain, qui est un registre public). Un wallet est un **"porte-clés"** (Key Manager). Il détient le secret qui vous donne l'autorisation de déplacer vos actifs.
L'identité et la propriété en Web3 reposent sur la **cryptographie asymétrique** (ou à clé publique/privée), spécifiquement l'algorithme **ECDSA** (Elliptic Curve Digital Signature Algorithm) sur la courbe `secp256k1` (pour Bitcoin et Ethereum).
Le Flux de Génération (Unidirectionnel)
C'est un processus mathématique à sens unique. Vous ne pouvez pas remonter la chaßne.
1. Clé Privée (Le Secret)
- Définition : C'est la seule chose qui soit vraiment secrÚte. C'est un **nombre aléatoire de 256 bits** (32 octets).
- Exemple (Hex) : `f8f8...a1c` (64 caractĂšres).
- Analogie : C'est votre **Mot de Passe MaĂźtre** pour votre compte en banque.
- RÚgle : DOIT RESTER ABSOLUMENT SECRET. Celui qui la possÚde, possÚde vos fonds. Elle n'est jamais partagée, jamais diffusée sur le réseau.
âŒ
2. Clé Publique (Le Cadenas)
- Définition : La clé publique (512 bits / 64 octets) est **dérivée mathématiquement** de la clé privée via l'algorithme ECDSA.
- Propriété : C'est une **fonction à sens unique**. Il est trivial de calculer la Clé Publique à partir de la Clé Privée, mais il est **cryptographiquement impossible** de retrouver la Clé Privée à partir de la Clé Publique.
- Analogie : C'est un **cadenas ouvert**. Vous pouvez le distribuer Ă tout le monde. Les gens peuvent l'utiliser pour *vĂ©rifier* que vous ĂȘtes bien le propriĂ©taire de la clĂ© privĂ©e, ou pour chiffrer un message que vous seul pourrez ouvrir.
âŒ
3. Adresse Publique (L'IBAN)
- Définition : L'adresse Ethereum (celle que vous utilisez, ex: `0xd8...6045`) est une version *hachée* et *raccourcie* de la Clé Publique.
- Processus (Ethereum) :
- Prendre la Clé Publique (64 octets).
- La hacher avec l'algorithme **Keccak-256**.
- Prendre les **20 derniers octets (40 caractĂšres)** de ce hash.
- Ajouter "0x" au début.
- Analogie : C'est votre **IBAN** ou votre "RIB". C'est l'identifiant que vous donnez publiquement pour *recevoir* des fonds. Il est sûr de la partager.
Le Processus de Signature (L'Autorisation)
Comment prouver que vous voulez envoyer 1 ETH sans révéler votre clé privée ? Vous **signez** la transaction.
[ 1. Transaction (Message) ]
(Ex: "Envoyer 1 ETH Ă 0xABC...")
|
| + [ 2. Clé Privée (Votre Secret) ]
|
âŒ
[ 3. Algorithme de Signature (ECDSA) ]
|
âŒ
[ 4. Signature Numérique (Preuve) ]
(Ex: 0x1a2b3c...)
Vous diffusez ensuite au réseau : (1. La Transaction) + (4. La Signature). Vous ne diffusez **JAMAIS** (2. La Clé Privée).
Le Processus de VĂ©rification (Par les NĆuds)
Chaque nĆud du rĂ©seau (les validateurs) effectue l'opĂ©ration inverse pour vĂ©rifier l'authenticitĂ© :
[ 1. Transaction (Message) ]
(Reçue du réseau)
|
| + [ 4. Signature Numérique (Preuve) ]
| + [ 2b. Clé Publique (Dérivée de l'Adresse) ]
|
âŒ
[ 5. Algorithme de Vérification (ECDSA) ]
|
âŒ
[ 6. Résultat (VRAI ou FAUX) ]
L'algorithme de vĂ©rification utilise la ClĂ© Publique de l'expĂ©diteur pour confirmer que la Signature n'a pu ĂȘtre créée que par le dĂ©tenteur de la ClĂ© PrivĂ©e correspondante, pour *cette transaction spĂ©cifique*. Si la vĂ©rification est VRAIE, la transaction est valide. Si c'est FAUX (ou si un attaquant tente de rĂ©utiliser la signature pour une autre transaction), elle est rejetĂ©e.
Gérer une clé privée (un long nombre aléatoire) est impossible pour un humain. Si vous la perdez, tout est perdu. L'industrie a standardisé une méthode de sauvegarde et de génération de clés : la "Seed Phrase" (phrase mnémonique) et les portefeuilles "HD".
BIP-39 : La "Master Key" Mnémonique
**BIP-39 (Bitcoin Improvement Proposal 39)** est le standard utilisé par 99% des wallets (Metamask, Ledger, etc.) pour générer et sauvegarder votre clé maßtresse.
La "Seed Phrase" (12 ou 24 mots) n'est PAS votre clé privée. C'est une représentation "humainement lisible" d'un nombre aléatoire (l'entropie) qui est utilisé pour *générer* votre clé privée maßtresse.
Processus de Génération (BIP-39)
- 1. Entropie : Le wallet génÚre un long nombre aléatoire (ex: 128 bits pour 12 mots, 256 bits pour 24 mots).
- 2. Checksum : Il ajoute quelques bits de "checksum" (somme de contrÎle) pour détecter les fautes de frappe.
- 3. Conversion : Ce nombre binaire est découpé en groupes de 11 bits.
- 4. Mappage (Liste de Mots) : Chaque groupe de 11 bits correspond à un numéro (de 0 à 2047). Le standard BIP-39 fournit une **liste de 2048 mots** (en anglais, français, etc.). Le wallet fait correspondre chaque numéro à un mot de la liste.
(Ex: `00000000001` -> `abandon`, `11111111111` -> `zoo`). - 5. Phrase : Le résultat est votre "Seed Phrase" de 12/24 mots (ex: `abandon ability able...`).
Processus de Récupération (Inverse) :
Lorsque vous restaurez un wallet, vous entrez les 12 mots. Le wallet (connaissant la liste BIP-39) re-convertit les mots en numĂ©ros, rĂ©-assemble le nombre binaire (l'entropie), vĂ©rifie le checksum, et obtient *exactement* le mĂȘme point de dĂ©part alĂ©atoire.
âŒ
Du Mot à la Clé (PBKDF2)
La Seed Phrase (ex: "chat montagne...") est ensuite passée dans une fonction de dérivation de clé (PBKDF2) avec un "sel" (salt) pour créer le **"Seed" binaire** (512 bits). C'est cette "Seed" qui est la racine de toutes vos clés.
BIP-32/44 : Le Portefeuille "HD" (Hierarchical Deterministic)
ProblĂšme : J'ai des Bitcoins, des Ethereums, et peut-ĂȘtre 10 comptes diffĂ©rents sur Ethereum. Dois-je sauvegarder 12 clĂ©s privĂ©es diffĂ©rentes ?
Solution : BIP-32/44. Un portefeuille "HD" (HiĂ©rarchique DĂ©terministe) utilise le **Seed (512 bits)** de BIP-39 comme **ClĂ© MaĂźtresse (Master Key)** pour gĂ©nĂ©rer un "arbre" (hiĂ©rarchie) quasi infini de paires de clĂ©s (privĂ©e/publique), de maniĂšre **dĂ©terministe** (le mĂȘme seed produira toujours le mĂȘme arbre).
Le Chemin de Dérivation (BIP-44)
BIP-44 standardise l'organisation de cet arbre. Un "chemin de dérivation" est utilisé pour trouver une clé spécifique.
m / purpose' / coin_type' / account' / change / address_index
m: Master Key (le Seed).purpose' (44'): Le standard (BIP-44).coin_type': Le type de cryptomonnaie (un numéro standardisé).60'= Ethereum (ETH)0'= Bitcoin (BTC)195'= Tron (TRX)
account' (0'): Le "compte" utilisateur (Compte 0, Compte 1, etc. dans Metamask).change (0): (Héritage Bitcoin : 0 pour les adresses de réception, 1 pour la "monnaie").address_index (0): L'adresse spécifique (Adresse 0, Adresse 1...).
Votre unique Seed Phrase ("chat montagne...") génÚre le Seed 512 bits.
En utilisant le chemin `m/44'/60'/0'/0/0`, votre wallet dérive la Clé Privée n°1 de votre **Compte Ethereum 1**.
En utilisant le chemin `m/44'/60'/1'/0/0`, il dérive la Clé Privée n°1 de votre **Compte Ethereum 2**.
En utilisant le chemin `m/44'/0'/0'/0/0`, il dérive la Clé Privée n°1 de votre **Compte Bitcoin 1**.
Conclusion : L'utilisateur n'a besoin de sauvegarder **qu'une seule chose** (la Seed Phrase de 12/24 mots) pour récupérer tous ses comptes, sur toutes les blockchains compatibles.
"Key Management" (Gestion des Clés) est la question la plus importante en crypto : **Qui détient la clé privée ?** La réponse à cette question divise l'écosystÚme en deux mondes.
1. Non-Custodial (Self-Custody)
Définition : L'utilisateur (et l'utilisateur seul) détient et contrÎle la clé privée / seed phrase.
Motto : "Not your keys, not your coins." (Pas vos clés, pas vos piÚces).
Exemples :
- Metamask (Software / Hot Wallet)
- Ledger / Trezor (Hardware / Cold Wallet)
- Trust Wallet, Phantom (Mobile Wallets)
Avantages :
- SouverainetĂ© Totale : Vous ĂȘtes votre propre banque. Personne ne peut geler vos fonds, vous censurer ou vous empĂȘcher d'interagir.
- AccÚs à la DeFi/NFTs : C'est la **seule** façon d'interagir directement avec les smart contracts (DeFi, mint de NFTs, DAOs).
Inconvénients :
- Responsabilité Totale : Il n'y a **pas de "mot de passe oublié"**. Si vous perdez votre seed phrase (incendie, oubli), vos fonds sont **perdus à jamais**.
- Risque de Sécurité (Phishing/Hack) : Si vous signez une transaction malveillante (`setApprovalForAll`) ou si votre seed phrase est volée (malware, phishing), vos fonds sont volés instantanément, sans recours.
2. Custodial (Third-Party Custody)
Définition : Une tierce partie (un "gardien" ou "custodian") détient les clés privées en votre nom.
Motto : "Your keys, their coins." (Vos clés, leurs piÚces).
Exemples :
- Binance, Coinbase, Kraken (Centralized Exchanges - CEX)
- Services de "staking" centralisés
- (Techniquement, votre compte Revolut ou PayPal "Crypto")
Avantages :
- Convenance : Facile. Login avec email/mot de passe. Authentification 2FA.
- Support Client : Il y a un service client. Vous *pouvez* réinitialiser votre mot de passe.
- Assurance (parfois) : Les grandes plateformes ont des fonds d'assurance (SAFU) en cas de hack *de la plateforme*.
Inconvénients :
- Risque de Contrepartie : Vous ne possédez pas de crypto. Vous possédez une "promesse" (IOU) de la plateforme. Si la plateforme fait faillite (ex: **FTX**, Mt. Gox, Celsius), vos fonds disparaissent avec elle.
- Risque de Censure : La plateforme *doit* se plier aux régulations (KYC/AML). Elle *peut* (et *doit*) geler vos fonds sur demande d'un gouvernement.
- Aucun accĂšs au Web3 : Vous ne pouvez pas utiliser votre "compte Binance" pour aller sur Uniswap ou mint un NFT. Vous devez d'abord *retirer* vos fonds vers un wallet **Non-Custodial** (Metamask).
**Metamask** est le portefeuille non-custodial (self-custody) le plus populaire au monde, développé par ConsenSys. C'est une **extension de navigateur** (et une application mobile) qui remplit trois rÎles cruciaux dans l'écosystÚme DApp.
1. RÎle de "Hot Wallet" (Gestionnaire de Clés)
Metamask est un **"Hot Wallet"** (portefeuille chaud) car les clés privées (dérivées de votre seed phrase) sont stockées sur votre appareil connecté à Internet (dans le stockage chiffré de votre navigateur).
- Génération : Il génÚre la Seed Phrase (BIP-39) et gÚre les comptes (BIP-44).
- Stockage : La seed phrase et les clés privées sont chiffrées avec un **Mot de Passe** que vous définissez.
- Point Clé : Ce "Mot de Passe" ne sert qu'à **déchiffrer/verrouiller** le stockage local de Metamask sur *cet ordinateur*. Ce n'est **PAS** votre backup. Si l'ordinateur est détruit, le mot de passe ne sert à rien. Seule la **Seed Phrase** de 12 mots peut restaurer le portefeuille.
2. RĂŽle de "Provider" (Injecteur EIP-1193)
Comme vu dans le guide Ethers.js, Metamask **injecte** un objet JavaScript `window.ethereum` dans chaque page web que vous visitez. Cet objet est le **Provider** (le pont de communication).
- `window.ethereum` agit comme un routeur.
- Il relaie les requĂȘtes de "lecture" (ex: `eth_getBalance`) de la DApp vers un nĆud RPC (par dĂ©faut, Metamask utilise Infura, mais l'utilisateur peut le changer pour son propre nĆud).
- Il intercepte les requĂȘtes "d'Ă©criture" (ex: `eth_sendTransaction`).
3. RÎle de "Signer" (Interface de Sécurité)
C'est le rĂŽle le plus important pour l'utilisateur. Metamask est le "gardien" qui empĂȘche une DApp de voler vos fonds.
- Lorsqu'une DApp (via Ethers.js) appelle
signer.sendTransaction(...), Metamask intercepte cet appel. - Il **arrĂȘte** l'exĂ©cution et ouvre une **pop-up** (une interface utilisateur sĂ©parĂ©e, hors de portĂ©e de la DApp).
- Cette pop-up affiche une version *lisible* de la transaction (Montant, Destination, Frais de Gas estimés).
- La DApp est en pause. L'utilisateur (vous) doit **manuellement** cliquer sur "Confirmer" ou "Rejeter".
- Si "Confirmer", Metamask utilise la clé privée stockée pour signer la transaction, puis la renvoie à la DApp (qui la diffuse).
- Si "Rejeter", Metamask renvoie une erreur Ă la DApp (ex: `Error: "User rejected transaction"`).
Risques de Sécurité des "Hot Wallets"
La convenance de Metamask (ĂȘtre dans le navigateur) est aussi son plus grand risque.
- Risque 1 : Phishing de la Seed Phrase (Hameçonnage)
- ScĂ©nario : Vous visitez un site malveillant qui imite un site connu (ex: "Uniswap Airdrop !"). Il affiche une *fausse* pop-up Metamask qui dit : "Votre portefeuille doit ĂȘtre re-synchronisĂ©. Veuillez entrer votre phrase secrĂšte de 12 mots."
- Résultat : Si vous tapez votre seed phrase, vous l'envoyez au hacker. Il l'importe dans son propre wallet et vide *tous* vos comptes (ETH, BTC, etc.) en quelques secondes. **RÚgle n°1 : Metamask ne vous demandera JAMAIS votre seed phrase (sauf lors de la restauration initiale).**
- Risque 2 : Signature Malveillante (Phishing d'Approbation)
- Scénario : Vous visitez un site de "mint NFT gratuit". Vous cliquez sur "Mint". Une pop-up Metamask s'ouvre. Vous ne la lisez pas attentivement et cliquez sur "Confirmer".
- Le PiÚge : Vous n'avez pas signé une transaction `mint()`. Vous avez signé une transaction
setApprovalForAll(...). - Résultat : Cette fonction (utilisée par OpenSea) signifie : "J'autorise ce smart contract (le contrat du hacker) à dépenser/déplacer *tous* mes NFTs de la collection Bored Ape (par exemple)". Le hacker exécute ensuite sa propre fonction pour transférer tous vos Apes vers son adresse.
- RÚgle n°2 : TOUJOURS lire la fonction que Metamask vous demande de signer. Si un site de "mint" vous demande `setApprovalForAll`, c'est une arnaque à 100%.
- Risque 3 : Malware / Exploit Navigateur
- Si votre ordinateur lui-mĂȘme est compromis (un keylogger, un virus), le malware peut tenter de voler le fichier de stockage de Metamask ou d'intercepter votre mot de passe lorsque vous le tapez.
C'est pour contrer ces risques que les "Hardware Wallets" ont été créés.
Un **Hardware Wallet** (Portefeuille MatĂ©riel, ex: Ledger, Trezor) est un appareil physique conçu pour ĂȘtre le moyen le plus sĂ©curisĂ© de gĂ©rer des clĂ©s privĂ©es. Il est aussi appelĂ© **"Cold Storage"** (Stockage Froid) car la clĂ© privĂ©e n'est jamais exposĂ©e Ă un appareil connectĂ© Ă Internet.
Concept : Isolation de la Clé (Secure Element)
La philosophie d'un hardware wallet est : **"Faites confiance à l'appareil, ne faites confiance à rien d'autre."** Il part du principe que votre ordinateur (PC/Mac) est **déjà compromis** (infecté par un malware).
- Génération de Clé : Lorsque vous allumez un Ledger pour la premiÚre fois, la Seed Phrase (BIP-39) est générée *à l'intérieur* de l'appareil. Elle est affichée sur le petit écran de l'appareil. Elle n'apparaßt **jamais** sur l'écran de votre ordinateur.
- Secure Element (SE) : La ClĂ© PrivĂ©e (dĂ©rivĂ©e de la seed) est stockĂ©e dans une puce cryptographique spĂ©cialisĂ©e (un "Secure Element" ou "SE"). C'est le mĂȘme type de puce que dans une carte de crĂ©dit ou un passeport.
- Protection : Cette puce est conçue pour ĂȘtre inviolable. Il est (en thĂ©orie) impossible d'en extraire la clĂ© privĂ©e, mĂȘme avec un accĂšs physique (elle s'autodĂ©truira si on tente de l'ouvrir).
Le Flux de Signature (Metamask + Ledger)
Comment un appareil "froid" (offline) peut-il signer une transaction "chaude" (online) ? En utilisant Metamask comme un "intermédiaire" (via WebUSB ou Bluetooth).
Scénario : Vous voulez envoyer 1 ETH en utilisant votre Ledger.
[ 1. DApp (Uniswap) ]
(Demande une signature Ă Metamask)
|
âŒ
[ 2. Metamask ]
(Sait que ce compte est "géré par Ledger". N'a PAS la clé privée.)
(Envoie la transaction NON SIGNĂE via USB Ă l'appareil Ledger)
|
| (Tx: "Envoyer 1 ETH Ă 0xABC...")
|
âŒ
[ 3. Hardware Wallet (Ledger) ]
(Reçoit la Tx non signée)
(Affiche sur son PETIT ĂCRAN SĂCURISĂ : "Envoyer 1 ETH Ă 0xABC... ?")
(L'UTILISATEUR vérifie physiquement sur l'appareil)
(L'UTILISATEUR appuie sur les DEUX BOUTONS PHYSIQUES pour "Approuver")
(Le Secure Element SIGNE la transaction à l'intérieur de la puce)
(L'appareil renvoie la transaction SIGNĂE Ă Metamask)
|
| (Tx Signée : "0x123...")
|
âŒ
[ 4. Metamask ]
(Reçoit la Tx signée. N'a toujours pas vu la clé privée.)
(Diffuse la Tx signée au réseau via son Provider Infura)
|
âŒ
[ 5. Réseau Ethereum ]
Pourquoi est-ce sécurisé ?
Imaginez que votre PC est infecté. Un hacker est en train de regarder votre écran. Il voit la pop-up Metamask. Il tente de changer l'adresse de destination (pour mettre la sienne).
Metamask (corrompu) envoie la transaction *frauduleuse* au Ledger. Mais le Ledger affiche sur son *propre écran* (que le hacker ne peut pas contrÎler) : "Envoyer 1 ETH à [ADRESSE_DU_HACKER]".
Vous (l'utilisateur) voyez que l'adresse sur l'écran du Ledger ne correspond pas à celle attendue. Vous annulez la transaction sur l'appareil. Le hack a échoué. C'est ce qu'on appelle un "affichage de confiance" (Trusted Display).
**WalletConnect** n'est **PAS** un portefeuille. C'est un **protocole de communication open-source** (un "pont"). Son but est de connecter les DApps (qui tournent le plus souvent sur un navigateur de bureau) aux portefeuilles mobiles (oĂč les utilisateurs prĂ©fĂšrent garder leurs clĂ©s, ex: Trust Wallet, Metamask Mobile, Rainbow).
Il résout le problÚme : "Je suis sur mon PC (Desktop) mais mes clés sont sur mon Téléphone (Mobile)".
Le Flux de Connexion (v2.0)
WalletConnect agit comme un "téléphone" sécurisé entre la DApp et le Wallet Mobile.
- 1. DApp (sur PC) : L'utilisateur clique sur "Connecter le Wallet" et choisit "WalletConnect". La DApp (via la bibliothÚque WalletConnect) génÚre un QR code unique.
- 2. Wallet (sur Mobile) : L'utilisateur ouvre son portefeuille (ex: Trust Wallet) et utilise la fonction "WalletConnect" pour scanner le QR code.
- 3. Appairage (Pairing) : Le scan établit un **canal de communication chiffré de bout en bout (E2EE)** entre la DApp (PC) et le Wallet (Mobile).
- Ce canal passe par un **"Bridge Server"** (serveur relais) public. Ce serveur ne fait que relayer des messages chiffrés ; il ne peut pas lire le contenu.
- 4. Session : Le Wallet Mobile demande : "Autoriser 'monsite.com' à se connecter ?". L'utilisateur accepte. La DApp (PC) reçoit l'adresse du compte et est connectée.
Le Flux de Signature (Transaction)
C'est la mĂȘme logique qu'un Hardware Wallet, mais via le rĂ©seau.
[ 1. DApp (PC) ]
(Ex: Uniswap. L'utilisateur clique "Swap".)
(La DApp crĂ©e la transaction NON SIGNĂE.)
|
| 2. Envoi de la "demande de signature" (chiffrée)
| via le Bridge Server WalletConnect
|
âŒ
[ 3. Wallet (Mobile) ]
(Reçoit la demande chiffrée.)
(Affiche une POP-UP NATIVE sur le téléphone :
"Confirmer le Swap de 1 ETH pour 2000 DAI ?")
(L'utilisateur confirme (ex: avec FaceID ou code PIN).)
(Le Wallet SIGNE la transaction à l'intérieur du téléphone.)
(Le Wallet renvoie la transaction SIGNĂE via le Bridge Server.)
|
| 4. RĂ©ception de la Tx SIGNĂE
|
âŒ
[ 5. DApp (PC) ]
(Reçoit la Tx signée.)
(Diffuse la Tx signée au réseau via son PROPRE Provider Infura.)
|
âŒ
[ 6. Réseau Ethereum ]
WalletConnect est le protocole qui permet à une DApp d'utiliser un **Signer distant** (le téléphone) aussi facilement qu'un Signer local (Metamask).
En Web3, votre "Wallet" (votre paire de clĂ©s) *est* votre identitĂ©. Il n'y a plus d'email/mot de passe. Vous prouvez qui vous ĂȘtes en prouvant que vous contrĂŽlez une clĂ© privĂ©e. C'est le "Sign-In with Ethereum".
Identité : Le ProblÚme de l'Authentification
ProblÚme : Comment un site web (Web2) peut-il "connecter" un utilisateur Web3 sans base de données d'utilisateurs ?
Ancienne Méthode (Dangereuse) : Le site demandait : "Signez ce message : 'Login'". L'utilisateur signait (via `personal_sign`). Le site vérifiait la signature et ouvrait une session.
Risque : Un site de phishing (ex: `faux-uniswap.com`) pouvait demander la mĂȘme signature ("Login"). Si le hacker interceptait cette signature, il pouvait l'utiliser pour se connecter au *vrai* site (Uniswap) en votre nom (attaque par rejeu ou "replay attack").
La Solution : EIP-4361 (Sign-In with Ethereum - SIWE)
SIWE est un standard (EIP) qui dĂ©finit un **format de message standardisĂ©** pour l'authentification. Ce message inclut des informations qui le rendent unique Ă un seul site et Ă une seule session, empĂȘchant les attaques par rejeu.
Le Flux SIWE (Authentification Web2/Web3)
- 1. Frontend (React) : L'utilisateur clique "Login". Le frontend (via Ethers.js) demande à Metamask de signer un message **structuré** (défini par SIWE) :
monsite.com wants you to sign in with your Ethereum account: 0x123...abc (Votre Adresse) (Message lisible) URI: https://monsite.com Version: 1 Chain ID: 1 Nonce: kG8a...7z (Un code aléatoire unique généré par le serveur) Issued At: 2025-11-10T14:30:00Z
- 2. Wallet (Metamask) : Affiche cette demande de signature claire. L'utilisateur voit que le `URI` et le `Nonce` sont corrects. Il signe.
- 3. Backend (Serveur Web2) : Le Frontend envoie le (Message + Signature) au serveur (ex: Node.js).
- 4. Vérification (Backend) : Le serveur :
- Vérifie que la signature est valide pour ce message (prouvant que l'utilisateur est bien `0x123...abc`).
- Vérifie que le `URI` est bien `https://monsite.com`.
- VĂ©rifie que le `Nonce` est bien celui qu'il a gĂ©nĂ©rĂ© (empĂȘche le rejeu).
- 5. Session : Si tout est valide, le serveur Web2 génÚre un **Token de Session (JWT)** traditionnel et le renvoie au frontend. L'utilisateur est "logué" au sens Web2, mais authentifié au sens Web3.
ENS (Ethereum Name Service) : L'Identité Lisible
L'identité (l'adresse `0x123...abc`) n'est pas "human-friendly". L'ENS est l'équivalent du "DNS" (Domain Name System) pour Ethereum.
C'est un **systÚme de smart contracts** (gouverné par une DAO) qui gÚre un registre de noms (ex: `.eth`, `.xyz`).
Fonctionnement
- Un NFT : Un nom ENS (ex: `vitalik.eth`) est un **NFT (ERC-721)**. Le "propriétaire" du NFT est l'adresse qui a le droit de *gérer* le nom.
- Le "Resolver" (Résolveur) : Le propriétaire du NFT configure un "Resolver" (un autre smart contract). C'est le carnet d'adresses.
- Enregistrements (Records) : Dans le Resolver, le propriétaire peut mapper le nom (`vitalik.eth`) à différentes données :
- `address` (ETH) : `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045`
- `address` (BTC) : `bc1q...`
- `content` (IPFS) : `ipfs://Qm...` (un site web décentralisé)
- `text` (Social) : `com.twitter = @VitalikButerin`
- Résolution (Ethers.js) : Quand vous écrivez
provider.getBalance("vitalik.eth"), Ethers.js appelle le contrat ENS, demande le "Resolver" de `vitalik.eth`, puis demande Ă ce Resolver l'enregistrement `address (ETH)`.
Conclusion : ENS transforme l'adresse cryptographique (le "numéro de compte") en **Identité Sociale** (le "nom d'utilisateur").
En "self-custody", vous ĂȘtes votre propre banque. Cela implique que vous ĂȘtes aussi votre propre service de sĂ©curitĂ©. La plupart des "hacks" en crypto ne sont pas des brĂšches de protocole (casser l'EVM), mais des **arnaques d'ingĂ©nierie sociale** (phishing) qui trompent l'utilisateur pour qu'il autorise une transaction malveillante.
RÚgle n°1 : La Seed Phrase (12/24 Mots)
- NE JAMAIS taper votre seed phrase dans un site web, une DApp, un formulaire Google, ou l'envoyer Ă un "Admin" sur Discord/Telegram. JAMAIS.
- Les "Admins" ou le "Support" ne vous contacteront **JAMAIS** en premier.
- Votre seed phrase ne sert **QU'à UNE CHOSE** : récupérer votre portefeuille sur un NOUVEL appareil (ex: si vous avez perdu l'ancien).
- Stockez-la **OFFLINE** (hors ligne). Ăcrite sur du papier (ou gravĂ©e sur du mĂ©tal), et gardĂ©e dans un lieu sĂ»r (un coffre). Ne la stockez pas dans votre gestionnaire de mots de passe, Google Drive, ou un fichier `notes.txt`.
Menaces Communes (Phishing)
- 1. Phishing de Seed Phrase : (Le plus destructeur). Un site imite Metamask ou une DApp connue et vous demande votre seed phrase pour "synchroniser" ou "réclamer un airdrop". (Voir RÚgle n°1).
- 2. Phishing d'Approbation (`setApprovalForAll`) :
- Le Leurre : Un site de "mint NFT gratuit" ou "nouveau jeu Play-to-Earn".
- L'Action : Vous cliquez "Mint". Metamask s'ouvre. Vous ĂȘtes pressĂ© et vous signez.
- Le Hack : Vous n'avez pas signé `mint()`. Vous avez signé
setApprovalForAll(ADRESSE_DU_HACKER, true). - Traduction : "J'autorise l'adresse du hacker à prendre et déplacer *tous* mes NFTs de la collection Bored Ape (par exemple)." Le hacker vide votre wallet.
- Protection : Lisez *toujours* la fonction que Metamask vous demande de signer.
- 3. Transfert d'Adresse Zéro : Les hackers "polluent" votre historique de transactions en vous envoyant 0 ETH depuis une adresse qui *ressemble* à la vÎtre (ex: `0x123...789` vs `0x123...DEF`). Vous copiez/collez cette "fausse" adresse depuis votre historique pour un transfert.
Bonnes Pratiques (Défense)
- 1. Utiliser un Hardware Wallet (Ledger/Trezor) : C'est la meilleure dĂ©fense. MĂȘme si vous ĂȘtes "phishĂ©" et que vous signez une transaction malveillante sur votre PC, vous devrez la valider sur l'Ă©cran *sĂ©curisĂ©* de l'appareil. Cela vous donne une deuxiĂšme chance de voir la supercherie (ex: voir `setApprovalForAll` sur l'Ă©cran du Ledger).
- 2. HygiĂšne des Wallets (Compartimentation) :
- Wallet "Coffre-Fort" (Vault) : Un compte (idéalement hardware) qui détient 99% de vos fonds. Il ne se connecte **JAMAIS** à une DApp. Il ne sert qu'à envoyer des fonds au "Hot Wallet".
- Wallet "Courant" (Hot Wallet) : Un compte Metamask avec peu de fonds (ex: 0.1 ETH). C'est votre "portefeuille de poche" pour interagir avec les DApps. S'il est compromis, vous ne perdez que peu.
- 3. Révoquer les Approbations (Revoke) :
- Lorsque vous utilisez Uniswap, vous lui donnez l'approbation de dépenser votre USDC. Cette approbation est *infinie* par défaut.
- Utilisez réguliÚrement des outils (ex: **`revoke.cash`**) pour voir *quels* contrats ont accÚs à *quels* tokens dans votre portefeuille, et **révoquez** (annulez) les approbations dont vous n'avez plus besoin.
