<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
* **Contrat intelligent** : Les contrats intelligents sont simplement des **programmes stockés sur une blockchain qui s'exécutent lorsque des conditions prédéterminées sont remplies**. Ils sont généralement utilisés pour automatiser l'**exécution** d'un **accord** afin que tous les participants puissent être immédiatement certains du résultat, sans l'intervention d'un intermédiaire ou de perte de temps. (De [ici](https://www.ibm.com/topics/smart-contracts)).
* Fondamentalement, un contrat intelligent est un **morceau de code** qui sera exécuté lorsque les gens accèdent et acceptent le contrat. Les contrats intelligents **s'exécutent dans des blockchains** (donc les résultats sont stockés de manière immuable) et peuvent être lus par les personnes avant de les accepter.
* **dApps** : Les **applications décentralisées** sont mises en œuvre sur des **contrats intelligents**. Elles ont généralement une interface utilisateur où l'utilisateur peut interagir avec l'application, le **back-end** est public (donc il peut être audité) et est implémenté sous forme de **contrat intelligent**. Parfois, l'utilisation d'une base de données est nécessaire, la blockchain Ethereum alloue un certain stockage à chaque compte.
* **Jetons & pièces** : Une **pièce** est une cryptomonnaie qui agit comme de l'**argent numérique** et un **jeton** est quelque chose qui **représente** une **valeur** mais ce n'est pas une pièce.
* **Jetons d'utilité** : Ces jetons permettent à l'utilisateur d'**accéder à certains services ultérieurement** (c'est quelque chose qui a de la valeur dans un environnement spécifique).
* **Jetons de sécurité** : Ils représentent la **propriété** ou un actif.
Pour qu'une transaction blockchain soit reconnue, elle doit être **ajoutée** à la **blockchain**. Les validateurs (mineurs) effectuent cette opération ; dans la plupart des protocoles, ils **reçoivent une récompense** pour le faire. Pour que la blockchain reste sécurisée, elle doit avoir un mécanisme pour **empêcher un utilisateur ou un groupe malveillant de prendre le contrôle de la majorité de la validation**.
La preuve de travail, un autre mécanisme de consensus couramment utilisé, utilise une validation de la puissance de calcul pour vérifier les transactions, exigeant qu'un attaquant potentiel acquière une grande fraction de la puissance de calcul du réseau de validateurs.
Cela utilise une **validation de la puissance de calcul** pour vérifier les transactions, exigeant qu'un attaquant potentiel acquière une grande fraction de la puissance de calcul du réseau de validateurs.\
Les **mineurs** vont **sélectionner plusieurs transactions** puis commencer à **calculer la preuve de travail**. Le **mineur avec les ressources de calcul les plus importantes** a plus de chances de **terminer** plus rapidement la preuve de travail et de recevoir les frais de toutes les transactions.
Le PoS réalise cela en **exigeant que les validateurs aient une certaine quantité de jetons blockchain**, obligeant les **attaquants potentiels à acquérir une grande fraction des jetons** sur la blockchain pour lancer une attaque.\
Dans ce type de consensus, plus un mineur a de jetons, plus il est probable que le mineur sera invité à créer le prochain bloc.\
Comparé au PoW, cela a grandement **réduit la consommation d'énergie** que les mineurs dépensent.
Une **adresse** bitcoin est le hachage de la **clé publique**, donc, pour effectuer une transaction à partir d'une adresse, il faut connaître la clé privée associée à cette clé publique (l'adresse).\
Ensuite, lorsqu'une **transaction** est effectuée, elle est **signée** avec la clé privée de l'adresse pour montrer que la transaction est **légitime**.
Une fois que R et S ont été calculés, ils sont sérialisés dans un flux d'octets qui est encodé à l'aide d'un schéma d'encodage standard international appelé Règles d'encodage distinguées (ou DER). Pour vérifier que la signature est valide, un algorithme de vérification de signature est utilisé. La vérification d'une signature numérique nécessite les éléments suivants :
La vérification d'une signature signifie effectivement que seul le propriétaire de la clé privée (qui a généré la clé publique) aurait pu produire la signature sur la transaction. L'algorithme de vérification de signature renverra « TRUE » si la signature est effectivement valide.
Une **adresse multi-signatures** est une adresse associée à plus d'une clé privée ECDSA. Le type le plus simple est une adresse m-sur-n - elle est associée à n clés privées, et envoyer des bitcoins depuis cette adresse nécessite des signatures d'au moins m clés. Une **transaction multi-signatures** est une transaction qui envoie des fonds depuis une adresse multi-signatures.
* **P2PKH : "Payer à la clé publique hachée"** : C'est ainsi que les transactions sont effectuées. Vous exigez que l'**expéditeur** fournisse une **signature** valide (à partir de la clé privée) et de la **clé publique**. Le script de sortie de transaction utilisera la signature et la clé publique et, à travers certaines fonctions cryptographiques, vérifiera **si elle correspond** à la hachage de la clé publique, si c'est le cas, alors les **fonds** seront **dépensables**. Cette méthode masque votre clé publique sous forme de hachage pour une sécurité supplémentaire.
* **P2SH : "Payer à un hachage de script"** : Les sorties d'une transaction sont simplement des **scripts** (cela signifie que la personne qui souhaite cet argent envoie un script) qui, s'ils sont **exécutés avec des paramètres spécifiques, donneront un booléen de `true` ou `false`**. Si un mineur exécute le script de sortie avec les paramètres fournis et que cela donne `true`, l'**argent sera envoyé à votre sortie souhaitée**. `P2SH` est utilisé pour les portefeuilles **multi-signatures** rendant les scripts de sortie **logique qui vérifie plusieurs signatures avant d'accepter la transaction**. `P2SH` peut également être utilisé pour permettre à quiconque, ou à personne, de dépenser les fonds. Si le script de sortie d'une transaction P2SH est simplement `1` pour vrai, alors tenter de dépenser la sortie sans fournir de paramètres donnera simplement `1` rendant l'argent dépensable par quiconque essaie. Cela s'applique également aux scripts qui renvoient `0`, rendant la sortie dépensable par personne.
Cela **améliore** la **vitesse** de la blockchain Bitcoin (elle ne permet que 7 paiements par seconde) et permet de créer des **transactions plus difficiles à tracer** car le canal est créé via des nœuds de la blockchain Bitcoin :
L'utilisation normale du réseau Lightning consiste à **ouvrir un canal de paiement** en engageant une transaction de financement à la blockchain de base pertinente (couche 1), suivi de la réalisation de **tout nombre** de transactions du réseau Lightning qui mettent à jour la distribution provisoire des fonds du canal **sans les diffuser à la blockchain**, suivi éventuellement de la fermeture du canal de paiement en **diffusant** la **version finale** de la transaction de règlement pour distribuer les fonds du canal.
Théoriquement, les entrées d'une transaction peuvent appartenir à différents utilisateurs, mais en réalité, c'est rare car cela nécessite des étapes supplémentaires. Par conséquent, il est souvent possible de supposer que **2 adresses d'entrée dans la même transaction appartiennent au même propriétaire**.
**UTXO** signifie **Unspent Transaction Outputs** (UTXOs). Dans une transaction qui utilise la sortie d'une transaction précédente comme entrée, **toute la sortie doit être dépensée** (pour éviter les attaques de double dépense). Par conséquent, si l'intention était de **envoyer** juste **une partie** de l'argent de cette sortie à une adresse et **conserver** l'**autre** **partie**, **2 sorties différentes** apparaîtront : celle **prévue** et une **nouvelle adresse de changement aléatoire** où le reste de l'argent sera enregistré.
Certaines personnes donnent des données sur leurs adresses bitcoin sur différents sites Web sur Internet. **Cela rend assez facile d'identifier le propriétaire d'une adresse**.
En représentant les transactions sous forme de graphiques, il est possible de savoir avec une certaine probabilité où l'argent d'un compte a été. Par conséquent, il est possible de savoir quelque chose sur les **utilisateurs** qui sont **liés** dans la blockchain.
Aussi appelée "heuristique de changement optimal". Considérez cette transaction bitcoin. Elle a deux entrées valant 2 BTC et 3 BTC et deux sorties valant 4 BTC et 1 BTC.
Supposons qu'une des sorties est le changement et que l'autre sortie est le paiement. Il y a deux interprétations : la sortie de paiement est soit la sortie de 4 BTC, soit la sortie de 1 BTC. Mais si la sortie de 1 BTC est le montant du paiement, alors l'entrée de 3 BTC est inutile, car le portefeuille aurait pu dépenser seulement l'entrée de 2 BTC et payer des frais de mineurs moins élevés pour le faire. Cela indique que la sortie de paiement réelle est de 4 BTC et que 1 BTC est la sortie de changement.
Ceci est un problème pour les transactions qui ont plus d'une entrée. Une façon de corriger cette fuite est d'ajouter plus d'entrées jusqu'à ce que la sortie de changement soit supérieure à n'importe quelle entrée, par exemple :
La **réutilisation forcée d'adresse** ou **réutilisation d'adresse incitative** est lorsque un adversaire paie une petite quantité de bitcoins à des adresses qui ont déjà été utilisées sur la chaîne de blocs. L'adversaire espère que les utilisateurs ou leur logiciel de portefeuille **utiliseront les paiements comme entrées pour une transaction plus importante qui révélera d'autres adresses via l'heuristique de propriété d'entrée commune**. Ces paiements peuvent être compris comme un moyen de contraindre le propriétaire de l'adresse à une réutilisation involontaire de l'adresse.
* **Montants de paiement exacts** : Pour éviter les transactions avec un changement, le paiement doit être égal à l'UTXO (ce qui est très improbable). Par conséquent, une **transaction sans adresse de changement est probablement un transfert entre 2 adresses du même utilisateur**.
* **Nombres ronds** : Dans une transaction, si l'une des sorties est un "**nombre rond**", il est très probable que ce soit un **paiement à un humain qui a fixé ce** "nombre rond" **comme prix**, donc l'autre partie doit être le reste.
* **Empreinte digitale du portefeuille** : Un analyste attentif peut parfois déduire quel logiciel a créé une certaine transaction, car les **différents logiciels de portefeuille ne créent pas toujours des transactions de la même manière**. L'empreinte digitale du portefeuille peut être utilisée pour détecter les sorties de changement car une sortie de changement est celle dépensée avec la même empreinte digitale du portefeuille.
* **Corrélations de montants et de timing** : Si la personne qui a effectué la transaction **divulgue** l'**heure** et/ou le **montant** de la transaction, cela peut être facilement **découvert**.
Certaines organisations **espionnant votre trafic** peuvent vous voir communiquer sur le réseau bitcoin.\
Si l'adversaire voit une transaction ou un bloc **sortir de votre nœud sans être entré auparavant**, alors il peut savoir avec quasi-certitude que **la transaction a été effectuée par vous ou que le bloc a été miné par vous**. Comme des connexions Internet sont impliquées, l'adversaire pourra **lier l'adresse IP aux informations bitcoin découvertes**.
Un attaquant qui n'est pas en mesure d'espionner tout le trafic Internet mais qui possède **beaucoup de nœuds Bitcoin** afin de rester **plus proche** des sources pourrait être en mesure de connaître les adresses IP qui annoncent les transactions ou les blocs.\
De plus, certains portefeuilles rebroadcastent périodiquement leurs transactions non confirmées afin qu'elles aient plus de chances de se propager largement à travers le réseau et d'être minées.
* **Minage** : Le minage est le moyen le plus anonyme d'obtenir des bitcoins. Cela s'applique au minage en solo car les [pools de minage](https://en.bitcoin.it/wiki/Pooled\_mining) connaissent généralement l'adresse IP du mineur.
Un utilisateur **envoie des bitcoins à un service de mélange** et le service **renvoie des bitcoins différents à l'utilisateur**, moins des frais. En théorie, un adversaire observant la blockchain ne serait **pas en mesure de relier** les transactions entrantes et sortantes.
Cependant, l'utilisateur doit faire confiance au service de mélange pour lui rendre les bitcoins et aussi pour ne pas enregistrer de journaux sur les relations entre l'argent reçu et envoyé.\
D'autres services peuvent également être utilisés comme des mélangeurs, comme les casinos Bitcoin où vous pouvez envoyer des bitcoins et les récupérer plus tard.
**CoinJoin** va **mélanger plusieurs transactions de différents utilisateurs en une seule** afin de rendre plus difficile pour un observateur de savoir **quelle entrée est liée à quelle sortie**.\
Cela offre un nouveau niveau de confidentialité, cependant, **certaines****transactions** où certains montants d'entrée et de sortie sont corrélés ou sont très différents du reste des entrées et sorties **peuvent encore être corrélées** par l'observateur externe.
Des exemples d'identifiants de transactions (probablement) CoinJoin sur la blockchain de Bitcoin sont `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` et `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
**Similaire à CoinJoin mais meilleur et pour Ethereum vous avez** [**Tornado Cash**](https://tornado.cash) **(l'argent est donné par les mineurs, donc il apparaît simplement dans votre portefeuille).**
PayJoin (également appelé pay-to-end-point ou P2EP) est un type spécial de CoinJoin entre deux parties où une partie paie l'autre. La transaction **n'a alors pas les multiples sorties distinctives avec la même valeur**, et n'est donc pas clairement visible comme un CoinJoin à sortie égale. Considérez cette transaction :
Il pourrait être interprété comme une simple transaction payée quelque part avec de la monnaie restante (ignorons pour l'instant la question de savoir quel est le paiement et quel est le reste). Une autre façon d'interpréter cette transaction est que l'entrée de 2 BTC est détenue par un commerçant et que 5 BTC sont détenus par leur client, et que cette transaction implique que le client paie 1 BTC au commerçant. Il n'y a aucun moyen de dire quelle de ces deux interprétations est correcte. Le résultat est une transaction de coinjoin qui casse l'heuristique de propriété d'entrée commune et améliore la confidentialité, mais est également **indétectable et indiscernable de toute transaction bitcoin régulière**.
Si les transactions PayJoin devenaient même modérément utilisées, cela rendrait l'**heuristique de propriété d'entrée commune complètement défectueuse en pratique**. Comme elles sont indétectables, nous ne saurions même pas si elles sont utilisées aujourd'hui. Comme les entreprises de surveillance des transactions dépendent principalement de cette heuristique, en 2019, il y avait une grande excitation autour de l'idée de PayJoin.
Les portefeuilles Bitcoin doivent d'une manière ou d'une autre obtenir des informations sur leur solde et leur historique. À la fin de 2018, les solutions existantes les plus pratiques et privées sont d'utiliser un **portefeuille de nœud complet** (qui est maximale privée) et **le filtrage des blocs côté client** (qui est très bon).
* **Nœud complet :** Les nœuds complets téléchargent l'intégralité de la blockchain qui contient chaque [transaction](https://en.bitcoin.it/wiki/Transaction) sur la blockchain Bitcoin. Ainsi, un adversaire surveillant la connexion Internet de l'utilisateur ne pourra pas savoir quelles transactions ou adresses l'utilisateur s'intéresse.
* **Filtrage des blocs côté client :** Le filtrage des blocs côté client fonctionne en ayant des **filtres** créés qui contiennent toutes les **adresses** pour chaque transaction dans un bloc. Les filtres peuvent tester si un **élément est dans l'ensemble** ; les faux positifs sont possibles mais pas les faux négatifs. Un portefeuille léger **téléchargerait** tous les filtres pour chaque **bloc** dans la **blockchain** et vérifierait les correspondances avec ses **propres****adresses**. Les blocs contenant des correspondances seraient téléchargés en entier depuis le réseau pair-à-pair, et ces blocs seraient utilisés pour obtenir l'historique et le solde actuel du portefeuille.
Le réseau Bitcoin utilise un réseau pair-à-pair, ce qui signifie que d'autres pairs peuvent connaître votre adresse IP. C'est pourquoi il est recommandé de **se connecter via Tor chaque fois que vous souhaitez interagir avec le réseau Bitcoin**.
**La réutilisation d'adresses plus d'une fois est très préjudiciable à la confidentialité car cela relie davantage de transactions blockchain avec la preuve qu'elles ont été créées par la même entité**. La manière la plus privée et sécurisée d'utiliser Bitcoin est d'envoyer une **nouvelle adresse à chaque personne qui vous paie**. Après que les pièces reçues ont été dépensées, l'adresse ne doit jamais être réutilisée. De plus, une toute nouvelle adresse Bitcoin doit être demandée lors de l'envoi de Bitcoin. Tous les bons portefeuilles Bitcoin ont une interface utilisateur qui décourage la réutilisation d'adresses.
**Payer** quelqu'un avec **plus d'une transaction sur la blockchain** peut grandement réduire le pouvoir des attaques de confidentialité basées sur le montant telles que la corrélation des montants et les montants ronds. Par exemple, si l'utilisateur veut payer 5 BTC à quelqu'un et ne veut pas que la valeur de 5 BTC soit facilement recherchée, il peut envoyer deux transactions pour une valeur de 2 BTC et 3 BTC qui ensemble totalisent 5 BTC.
L'évitement du rendu de monnaie est lorsque les entrées et sorties de transaction sont soigneusement choisies pour ne pas nécessiter du tout de sortie de rendu de monnaie. **Ne pas avoir de sortie de rendu de monnaie est excellent pour la confidentialité**, car cela casse les heuristiques de détection de rendu de monnaie.
Si l'évitement du rendu de monnaie n'est pas une option, **créer plus d'une sortie de rendu de monnaie peut améliorer la confidentialité**. Cela casse également les heuristiques de détection de rendu de monnaie qui supposent généralement qu'il n'y a qu'une seule sortie de rendu de monnaie. Comme cette méthode utilise plus d'espace de bloc que d'habitude, l'évitement du rendu de monnaie est préférable.
Lorsque Monero a été développé, le besoin béant d'**anonymat complet** était ce qu'il cherchait à résoudre, et dans une large mesure, il a comblé ce vide.
Le gas fait référence à l'unité qui mesure la **quantité** d'**effort de calcul** nécessaire pour exécuter des opérations spécifiques sur le réseau Ethereum. Le gas fait référence aux **frais** nécessaires pour effectuer avec succès une **transaction** sur Ethereum.
Les prix du gas sont indiqués en **gwei**, qui est lui-même une dénomination de l'ETH - chaque gwei est égal à **0,000000001 ETH** (10-9 ETH). Par exemple, au lieu de dire que votre gas coûte 0,000000001 ether, vous pouvez dire que votre gas coûte 1 gwei. Le mot 'gwei' lui-même signifie 'giga-wei', et il est égal à **1 000 000 000 wei**. Wei est lui-même la **plus petite unité d'ETH**.
Disons que Jordan doit payer 1 ETH à Taylor. Dans la transaction, la limite de gas est de 21 000 unités et le frais de base est de 100 gwei. Jordan inclut un pourboire de 10 gwei.
Lorsque Jordan envoie l'argent, 1,00231 ETH sera déduit du compte de Jordan. Taylor sera crédité de 1,0000 ETH. Le mineur reçoit le pourboire de 0,00021 ETH. Le frais de base de 0,0021 ETH est brûlé.
De plus, Jordan peut également définir un frais max (`maxFeePerGas`) pour la transaction. La différence entre le frais max et le frais réel est remboursée à Jordan, c'est-à-dire `remboursement = frais max - (frais de base + frais de priorité)`. Jordan peut définir un montant maximum à payer pour que la transaction s'exécute et ne pas s'inquiéter de payer en trop "au-delà" du frais de base lorsque la transaction est exécutée.
Comme le frais de base est calculé par le réseau en fonction de la demande d'espace de bloc, ce dernier paramètre : maxFeePerGas aide à contrôler le montant maximum du frais qui va être payé.
Remarquez que dans le réseau **Ethereum**, une transaction est effectuée entre 2 adresses et celles-ci peuvent être des **adresses d'utilisateur ou de contrat intelligent**.\
Les transactions, qui modifient l'état de l'EVM, doivent être diffusées à l'ensemble du réseau. N'importe quel nœud peut diffuser une demande pour qu'une transaction soit exécutée sur l'EVM ; après cela, un **mineur** exécutera la **transaction** et propagera le changement d'état résultant au reste du réseau.\
*`destinataire`– l'adresse de réception (si un compte détenu par un utilisateur, la transaction transférera de la valeur. Si un compte de contrat, la transaction exécutera le code du contrat)
*`signature`– l'identifiant de l'expéditeur. Cela est généré lorsque la clé privée de l'expéditeur signe la transaction et confirme que l'expéditeur a autorisé cette transaction
*`limite de gas`– la quantité maximale d'unités de gas qui peuvent être consommées par la transaction. Les unités de gas représentent des étapes de calcul