⚙️ Technologie des Cryptomonnaies
Guide Technique Complet: Cryptographie, Hachage, Blockchain et Sécurité
📑 Sommaire
🔐 Fondamentaux de la Cryptographie
Qu'est-ce que la Cryptographie?
La cryptographie est la science de sécuriser l'information en la transformant de manière à ce que seules les personnes autorisées puissent la lire. Le mot vient du grec "kryptos" (caché) et "graphia" (écrire).
Types de Cryptographie
1. Cryptographie Symétrique (Clé Secrète)
Une même clé est utilisée pour chiffrer et déchiffrer le message. C'est comme un cadenas physique dont une seule personne a la clé.
Clé Secrète (ABC123) + Message → CHIFFRÉ
CHIFFRÉ + Clé Secrète (ABC123) → Message
2. Cryptographie Asymétrique (Clé Publique/Privée)
Deux clés différentes: une publique (pour chiffrer) et une privée (pour déchiffrer). C'est la base des cryptomonnaies.
Message + Clé Publique → CHIFFRÉ
CHIFFRÉ + Clé Privée → Message
Chiffrement RSA (Rivest-Shamir-Adleman)
- Créé en: 1977
- Utilisé pour: Signature numérique, chiffrement
- Sécurité basée sur: Factorisation de grands nombres premiers
- Longueur de clé: 2048 bits (standard) à 4096 bits (très sûr)
Chiffrement ECDSA (Elliptic Curve Digital Signature Algorithm)
Plus efficace que RSA, utilisé par Bitcoin et Ethereum.
- Avantages: Plus rapide, clés plus courtes (256 bits)
- Courbe utilisée: secp256k1 (Bitcoin)
- Sécurité équivalente à: RSA 2048 bits
🔗 Hachage et Hash Functions
Qu'est-ce que le Hachage?
Une fonction de hachage transforme n'importe quelle donnée (un message, un fichier, un bloc) en une chaîne fixe de caractères appelée hash ou empreinte.
Caractéristiques Essentielles
1. Déterministe
Input: "Bitcoin"
Output: Always → a1b2c3d4e5f6...
(Same input = Always same hash)
2. Sens Unique (One-Way Function)
Impossible de retrouver le message original à partir du hash.
Message → Hash ✅ (Facile)
Hash → Message ❌ (Impossible)
3. Effet d'Avalanche
Un petit changement dans l'input crée un hash complètement différent.
Hash("Bitcoin") = a1b2c3d4e5f6...
Hash("bitcoin") = x9y8z7w6v5u4... (Complètement différent!)
4. Pas de Collisions
Impossibilité (théorique) de trouver deux entrées avec le même hash.
SHA-256 (Bitcoin)
| Propriété | Valeur |
|---|---|
| Longueur Output | 256 bits (64 caractères hexadécimaux) |
| Combinaisons Possibles | 2^256 ≈ 1.15 × 10^77 |
| Temps Brute Force | Plusieurs milliards d'années |
| Utilisé par | Bitcoin, Ethereum, blockchain |
Exemple Pratique de Hachage
Input: "Azais Khalsi"
SHA-256: 4f7b2c3a9d8e5f1a6b2c9d8e7f4a3b2c
Input: "Azais khalsi" (minuscule)
SHA-256: 9c8d7f6e5a4b3c2d1e0f8a7b6c5d4e3f (COMPLÈTEMENT DIFFÉRENT!)
🔗 Blockchain et Ledger Distribué
Qu'est-ce qu'une Blockchain?
Une blockchain est une chaîne de blocs contenant des transactions. Chaque bloc est lié au précédent via un hash, créant une chaîne immuable.
Structure d'un Bloc
BLOC #100
├── Numéro: 100
├── Timestamp: 2025-05-21 10:30:45
├── Transactions: 2000 transactions
├── Hash Bloc Précédent: a1b2c3d4e5f6...
├── Merkle Root: 9f8e7d6c5b4a...
└── Nonce: 345672 (Proof-of-Work)
SHA-256(BLOC #100) = Hash du Bloc #100
Comment Fonctionne la Chaîne?
BLOC #99 BLOC #100 BLOC #101
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Hash #99 → │ │ Hash #100 → │ │ Hash #101 → │
│ a1b2c3d4e5f6 │ │ 9f8e7d6c5b4a │ │ 7x6y5z4w3v2u │
│ │───────│ │───────│ │
│ Prev: 7x6y5z │ │ Prev: a1b2c3 │ │ Prev: 9f8e7d │
└──────────────┘ └──────────────┘ └──────────────┘
Avantages de la Blockchain
- Immuabilité: Changer un ancien bloc invaliderait toute la chaîne
- Transparence: Tous les nœuds ont une copie identique
- Décentralisation: Aucune autorité centrale
- Sécurité: Cryptographie rend les modifications impossibles
Merkle Tree (Arbre de Merkle)
Structure permettant de vérifier l'intégrité de multiples transactions avec un seul hash.
MERKLE ROOT
/ \
Hash(A+B) Hash(C+D)
/ \ / \
Hash A Hash B Hash C Hash D
| | | |
TX1 TX2 TX3 TX4
🤝 Mécanismes de Consensus
Qu'est-ce qu'un Consensus?
Un mécanisme permettant aux nœuds décentralisés de s'accorder sur l'état de la blockchain sans autorité centrale.
Proof-of-Work (PoW) - Bitcoin
Les mineurs doivent résoudre un puzzle mathématique pour valider un bloc.
Comment ça Marche?
1. Transaction: Alice → Bob: 1 BTC
2. Mineur: Cherche un Nonce tel que SHA256(Bloc + Nonce) < Difficulté
3. Résolution: Nonce = 345672 → Hash = 0000a1b2c3d4e5f6...
4. Récompense: Mineur reçoit 6.25 BTC (2024)
5. Bloc Accepté par le Réseau
Difficulté Dynamique
- Ajustée tous les 2016 blocs (~2 semaines)
- Cible: 1 bloc toutes les 10 minutes
- Plus de mineurs = Difficulté augmente
Proof-of-Stake (PoS) - Ethereum 2.0
Les validateurs verrouillent leur crypto pour valider les blocs.
- Dépôt: Minimum 32 ETH bloqués
- Slashing: Perte de fonds si vous validez mal
- Récompense: ~3.6% APY
- Avantage: 99.95% d'économie d'énergie vs PoW
Autres Mécanismes
| Type | Description | Utilisé par |
|---|---|---|
| Proof-of-Authority (PoA) | Validateurs approuvés par réseau | Polygon, BSC |
| Delegated PoS (DPoS) | Token holders votent validateurs | EOS, Cosmos |
| Proof-of-History (PoH) | Séquence cryptographique d'événements | Solana |
🔑 Clés Publiques et Privées
Génération de Clés (ECDSA secp256k1)
Étape 1: Clé Privée
Un nombre aléatoire de 256 bits (32 octets).
Clé Privée (Hex):
E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262
Clé Privée (Décimal):
105560537854667719658867403385141027588617471040160166535900500899...
Étape 2: Clé Publique
Dérivée mathématiquement de la clé privée via multiplication elliptique.
Clé Privée × Courbe secp256k1 = Clé Publique
Clé Publique (Non-Compressée - 65 octets):
04a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f
a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9
Clé Publique (Compressée - 33 octets):
02a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8
Étape 3: Adresse Publique
Hachage de la clé publique = votre adresse de portefeuille.
Clé Publique → SHA-256 → RIPEMD-160 → Checksum → Adresse
Bitcoin Adresse:
1A1z7agoat3bShoXV8YvRHKcs7Qc5CNrse
Ethereum Adresse:
0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
Signature Numérique
Preuve que vous possédez une clé privée sans la révéler.
Message: "Je veux envoyer 1 BTC à Alice"
Clé Privée: (E9873D...)
↓
Signer avec ECDSA
↓
Signature (r, s):
r = 3045022100c1e5d9f7a8b2c3d4e5f6a7b8c9d0e1f2
s = a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8
Vérification:
Message + Signature + Clé Publique → ✅ Signature Valide!
🛡️ Sécurité Cryptographique
Entropie et Aléatoire
La qualité de l'aléatoire est crucial pour générer des clés privées sécurisées.
- Mauvaise Entropie: Clé privée facile à deviner → Piratage
- Bonne Entropie: 256 bits aléatoires → 2^256 combinaisons possibles
- Sources Aléatoires: /dev/urandom (Linux), CryptGenRandom (Windows)
Attaques sur la Cryptographie
1. Brute Force Attack
Essayer toutes les combinaisons possibles.
- Contre SHA-256: 2^128 tentatives en moyenne
- Temps estimé: Plusieurs milliards d'années avec ordinateurs actuels
- Conclusion: Impractical
2. Rainbow Tables
Tables pré-calculées d'hashes courants.
- Protection: Salting (ajout aléatoire à l'input)
3. Timing Attacks
Déduire des infos en mesurant le temps de traitement.
- Protection: Opérations en temps constant
4. Man-in-the-Middle (MITM)
Un attaquant intercepte la communication.
- Protection: HTTPS, vérification de signature
Recommandations de Sécurité
✅ Faites
• Utilisez des portefeuilles matériels (Hardware) • Gardez votre clé privée hors ligne • Vérifiez le certificat SSL • Utilisez 2FA
❌ Évitez
• Ne jamais partager votre clé privée • Ne pas stocker en texte brut • Éviter les portefeuilles mobiles pour gros montants • Ne pas faire confiance à des liens suspects
🚀 Comment Créer une Cryptomonnaie
Approche 1: Fork d'une Blockchain Existante (Plus Simple)
Étape 1: Choisir une Blockchain
- Bitcoin: Basée sur C++, très établie
- Ethereum: Basée sur Solidity, smart contracts
- Litecoin: Fork Bitcoin, plus rapide
Étape 2: Modifier les Paramètres
// Changer le nom
COIN_NAME = "MyCoin"
// Changer l'offre totale
MAX_SUPPLY = 21,000,000
// Changer le temps de bloc
BLOCK_TIME = 2.5 minutes (vs 10 min Bitcoin)
// Changer la difficulté
DIFFICULTY_ADJUSTMENT = every 2016 blocks
Étape 3: Compiler et Tester
- Compiler le code source
- Lancer un testnet privé
- Tester les transactions
Étape 4: Lancer la Mainnet
- Annoncer le projet
- Pré-minages ou airdrop initial
- Lancer la blockchain publique
Approche 2: Créer un Token ERC-20 sur Ethereum (Plus Facile)
Smart Contract ERC-20
pragma solidity ^0.8.0;
contract MyCoin {
string public name = "My Coin";
string public symbol = "MYC";
uint8 public decimals = 18;
uint public totalSupply = 1000000 * 10 ** 18;
mapping(address => uint) public balanceOf;
constructor() {
balanceOf[msg.sender] = totalSupply;
}
function transfer(address to, uint amount) public {
balanceOf[msg.sender] -= amount;
balanceOf[to] += amount;
}
}
Étapes de Déploiement
- Écrire le smart contract (Solidity)
- Tester sur testnet (Sepolia, Goerli)
- Déployer sur mainnet Ethereum
- Lister sur exchanges
Sécurité d'une Nouvelle Crypto
Audit de Code
- Faire auditer par des experts (Chainalysis, OpenZeppelin)
- Révéler les vulnérabilités avant le lancement
Tokenomics (Distribution)
- Community: 40%
- Founders: 20%
- Mining/Staking Rewards: 30%
- Marketing: 10%
⚔️ Attaques et Vulnérabilités
Attaques Courantes
1. Double Spending Attack
Dépenser la même crypto deux fois.
- Prévention: Confirmations réseau, immutabilité blockchain
2. 51% Attack
Contrôler la majorité de la puissance réseau.
Si vous contrôlez >50% des mineurs:
1. Créer une chaîne alternative
2. Ignorer les transactions honnêtes
3. Double-spend
4. Refuser les blocs légitimes
3. Sybil Attack
Créer plusieurs faux nœuds pour manipuler le réseau.
- Prévention: Proof-of-Work, vérification d'identité
4. Eclipse Attack
Isoler un nœud en contrôlant ses connexions réseau.
Vulnérabilités Smart Contract
Reentrancy
// VULNÉRABLE
function withdraw(uint amount) {
if (balanceOf[msg.sender] >= amount) {
(bool success, ) = msg.sender.call{value: amount}("");
if (success) {
balanceOf[msg.sender] -= amount; // TROP TARD!
}
}
}
// ATTAQUE
Boucle: Appeler withdraw() 1000 fois avant balanceOf update
Résultat: Voler plus que possédé
Integer Overflow/Underflow
uint8 x = 255;
x = x + 1; // x devient 0 (overflow)!
PROTECTION: Utiliser SafeMath ou uint256 (pratique)
Cas Historiques d'Attaques
| Attaque | Année | Montant | Cause |
|---|---|---|---|
| The DAO Hack | 2016 | $50M | Reentrancy |
| MT. Gox Hack | 2014 | $460M | Clé privée compromise |
| Poly Network Hack | 2021 | $611M | Signature spoofing |