Bitcoin Forum
August 19, 2019, 06:59:23 AM *
News: Latest Bitcoin Core release: 0.18.0 [Torrent] (New!)
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Comment faire une attaque à 51%  (Read 256 times)
darosior
Full Member
***
Offline Offline

Activity: 178
Merit: 194



View Profile WWW
January 22, 2019, 03:14:32 PM
Merited by Halab (3), F2b (1), ginette (1)
 #1

Salut,

Dans le cadre de meetups que j'organise à l'INSA Lyon (nommés "Shiba to lion"), j'ai fait une attaque à 51% sur le réseau Insacoin. Etant donné que c'est un sujet qui a beaucoup buzzé et qui est très mal compris, j'en ai fait un article décrivant ce que c'est vraiment et comment en faire une (en théorie, puis en pratique à-travers l'exemple de ce que j'ai fait). L'article est en anglais (à la fois parcequ'un anglais m'a demandé un tuto et parceque je voulais toucher un audience plus large), mais je reste disponible sur ce thread pour détailler en français certaines parties si besoin et répondre aux questions.
Lien vers l'article : https://medium.com/@darosior/how-to-perform-a-51-attack-f8f739925110

Github profile ~ Crypto Lyon (french community)  ~ GPG key fingerprint : E13F C145 CD3F 430 ~ LN public key : 03678b4f041fbfbeebcafc076469df75decf81da20a53bd490172e83ce532df1fa
1566197963
Hero Member
*
Offline Offline

Posts: 1566197963

View Profile Personal Message (Offline)

Ignore
1566197963
Reply with quote  #2

1566197963
Report to moderator
1566197963
Hero Member
*
Offline Offline

Posts: 1566197963

View Profile Personal Message (Offline)

Ignore
1566197963
Reply with quote  #2

1566197963
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1566197963
Hero Member
*
Offline Offline

Posts: 1566197963

View Profile Personal Message (Offline)

Ignore
1566197963
Reply with quote  #2

1566197963
Report to moderator
1566197963
Hero Member
*
Offline Offline

Posts: 1566197963

View Profile Personal Message (Offline)

Ignore
1566197963
Reply with quote  #2

1566197963
Report to moderator
TITI45555
Newbie
*
Offline Offline

Activity: 54
Merit: 0


View Profile
January 23, 2019, 08:37:11 AM
 #2

COMBIEN cela t'a t-il couté ?


En heures ? Journée ?

COMBIEN DE ROI SI REVENTE ILLEGALE ?

 Grin
yogg
Legendary
*
Offline Offline

Activity: 1568
Merit: 1733


Coldkey™ -- coldkey.eu


View Profile
January 23, 2019, 08:41:23 AM
 #3

Intéressant. Shocked
Qu'a tu réussi à faire, avec 51% de la puissance de calcul d'un coin ?

A tu réussi à miner des blocks du "passé" ?

Je n'ai pas vu ce que tu as expérimenté avec 51% de la puissance de calcul du coin en question.
J'me serait amusé à refuser l'inclusion de certaines transactions. Tongue (Mais juste une fois, pour tester et voir si ça marche  Cool #noevil)

darosior
Full Member
***
Offline Offline

Activity: 178
Merit: 194



View Profile WWW
January 23, 2019, 01:47:32 PM
 #4

COMBIEN cela t'a t-il couté ?


En heures ? Journée ?

COMBIEN DE ROI SI REVENTE ILLEGALE ?

 Grin
Coût :
- en électricité : de quoi faire tourner un L3 à balle pendant ~48h (et c'etait pas moi c'etait un autre membre de Crypto Lyon)
- en temps : beaucoup parceque c'était pas mal d'experimentation, je n'ai jamais vu de how-to pour faire cette attaque (c'est d'ailleurs la raison pour laquelle j'en ai fait un). Pour être tout à fait honnête je n'étais même pas sûr d'y arriver.

ROI :
De l'expérience. Les insacoins n'ont pas de valeur et j'ai créé ce réseau juste pour de l'expérimentation.


Intéressant. Shocked
Qu'a tu réussi à faire, avec 51% de la puissance de calcul d'un coin ?

A tu réussi à miner des blocks du "passé" ?

Je n'ai pas vu ce que tu as expérimenté avec 51% de la puissance de calcul du coin en question.
J'me serait amusé à refuser l'inclusion de certaines transactions. Tongue (Mais juste une fois, pour tester et voir si ça marche  Cool #noevil)
J'ai reminé la totalité des blocs depuis le genesis. Ça marche j'aurais juste pu refuser de les accepter dans ma mempool, mais bon y a pas beaucoup de transactions sur Insacoin, juste quand on fait des meetups x).

Github profile ~ Crypto Lyon (french community)  ~ GPG key fingerprint : E13F C145 CD3F 430 ~ LN public key : 03678b4f041fbfbeebcafc076469df75decf81da20a53bd490172e83ce532df1fa
TheWolf666
Member
**
Offline Offline

Activity: 336
Merit: 96

Author & Prog of Franc / Prog of Kryptofranc


View Profile WWW
June 25, 2019, 03:12:02 AM
 #5

Combien de full nodes tu as attaqué, et donc combien d'instances ont été nécessaire pour obtenir les 51%

Author and Programmer: https://franc.eu.com
Programmer: https://kryptofranc.com
yogg
Legendary
*
Offline Offline

Activity: 1568
Merit: 1733


Coldkey™ -- coldkey.eu


View Profile
June 26, 2019, 07:33:10 AM
 #6

Combien de full nodes tu as attaqué, et donc combien d'instances ont été nécessaire pour obtenir les 51%

Euh...
J'ai du mal à saisir le rapport entre le nombre de nodes et les 51% ?

Le nombre de full nodes, c'est juste le nombre de PC avec le coin, qui ont la blockchain.
L'attaque à 51% s'en prend elle au consensus de preuve de travail. Les noeuds du réseau "suivent" ce que les mineurs trouvent et leur donnent.

TheWolf666
Member
**
Offline Offline

Activity: 336
Merit: 96

Author & Prog of Franc / Prog of Kryptofranc


View Profile WWW
June 26, 2019, 08:15:37 AM
 #7

Donc si tu as 1 seule instance full node, que tu mines sur un stratum (on ne peut plus solo miner avec 0.18)
Si le réseau total a un hashrate de 10 T/s et que tu mines avec 6 T/s tu peux inclure dans ton bloc des transaction factices... si ta chaine est plus longue de COINBASE_MATURITY transactions.
Dans ce cas, ta chaine sera retenue comme étant la plus longue et remplacera la chaine qui se trouve sur tous les full node.
Ainsi toutes les transactions peuvent être modifiée?


Combien de full nodes tu as attaqué, et donc combien d'instances ont été nécessaire pour obtenir les 51%

Euh...
J'ai du mal à saisir le rapport entre le nombre de nodes et les 51% ?

Le nombre de full nodes, c'est juste le nombre de PC avec le coin, qui ont la blockchain.
L'attaque à 51% s'en prend elle au consensus de preuve de travail. Les noeuds du réseau "suivent" ce que les mineurs trouvent et leur donnent.

Author and Programmer: https://franc.eu.com
Programmer: https://kryptofranc.com
yogg
Legendary
*
Offline Offline

Activity: 1568
Merit: 1733


Coldkey™ -- coldkey.eu


View Profile
June 26, 2019, 08:33:16 AM
 #8

Donc si tu as 1 seule instance full node, que tu mines sur un stratum (on ne peut plus solo miner avec 0.18)
Si le réseau total a un hashrate de 10 T/s et que tu mines avec 6 T/s tu peux inclure dans ton bloc des transaction factices... si ta chaine est plus longue de COINBASE_MATURITY transactions.
Dans ce cas, ta chaine sera retenue comme étant la plus longue et remplacera la chaine qui se trouve sur tous les full node.
Ainsi toutes les transactions peuvent être modifiée?

Une seule full node, c'est pas un consensus.  Undecided
Je pense que tu peux pas raisonner comme ça.

Effectivement, localement, tu va produire une chaîne qui est tout aussi valide que celle d'origine, et puis le fait que la chaîne avec le + de PoW cumulée devient "la" chaîne de référence pour les clients du coin, ça va se produire comme toi tu le dis.

Maintenant, il faut pas oublier que bitcoin doit composer avec le reste des noeuds du réseau et les mineurs. Hah, et les devs. ^^

Si il était aussi simple de faire ça que ce que tu as expliqué dans ton exemple, il n'aurait pas un tel succès et c'est d'ailleurs là sa principale force.
La preuve de travail.

TheWolf666
Member
**
Offline Offline

Activity: 336
Merit: 96

Author & Prog of Franc / Prog of Kryptofranc


View Profile WWW
June 26, 2019, 09:00:07 AM
 #9

En fait je suis d'accord avec toi, je posais la question a l'OP qui postait a l'origine.

Ce scenario ne peut se produire, pour plusieurs raisons, mais l'une d'elle sont les checkpoint. Les blockchains qui ont des problèmes d'attaques a 51% sont celles qui ne sont pas maintenues.
Il y a 2 types de checkpoints qui sont codés dans les wallets et donc qui vérifient que les transactions a certaines hauteur de block sont valide, genre hash du block x = y
Si les hash divergent le consensus est rejeté.
Donc pour voler one blockchain en totalité comme le fait l'OP dans son example, il faut aussi faire un fork du wallet et que + 50% des nodes soient des wallets forkés ce qui est vraiment difficile.

En ce qui concerne une attaque a 51%, il est possible d’insérer dans la blockchain un block miné qui ne bénéficie qu'a celui qui a fait l'attaque. Mais cela ne met pas la blockchain en peril, cela vole juste l'argent des mineurs en quelque sorte mais cela a un prix, le hashing nécessaire est très élevé, et donc cela coûte très cher a faire.

Ce genre de problèmes sont intéressant, j'ai fais 2 blockchains, et toute information utile est bienvenue, vue que mes blockchains sont toute jeune et avec un travail peu élevé...

Hier par exemple j'ai eut une attaque a 51% sur notre pool de minage.

Donc si tu as 1 seule instance full node, que tu mines sur un stratum (on ne peut plus solo miner avec 0.18)
Si le réseau total a un hashrate de 10 T/s et que tu mines avec 6 T/s tu peux inclure dans ton bloc des transaction factices... si ta chaine est plus longue de COINBASE_MATURITY transactions.
Dans ce cas, ta chaine sera retenue comme étant la plus longue et remplacera la chaine qui se trouve sur tous les full node.
Ainsi toutes les transactions peuvent être modifiée?

Une seule full node, c'est pas un consensus.  Undecided
Je pense que tu peux pas raisonner comme ça.

Effectivement, localement, tu va produire une chaîne qui est tout aussi valide que celle d'origine, et puis le fait que la chaîne avec le + de PoW cumulée devient "la" chaîne de référence pour les clients du coin, ça va se produire comme toi tu le dis.

Maintenant, il faut pas oublier que bitcoin doit composer avec le reste des noeuds du réseau et les mineurs. Hah, et les devs. ^^

Si il était aussi simple de faire ça que ce que tu as expliqué dans ton exemple, il n'aurait pas un tel succès et c'est d'ailleurs là sa principale force.
La preuve de travail.

Author and Programmer: https://franc.eu.com
Programmer: https://kryptofranc.com
darosior
Full Member
***
Offline Offline

Activity: 178
Merit: 194



View Profile WWW
July 07, 2019, 02:35:26 PM
Last edit: July 08, 2019, 03:12:30 PM by Halab
 #10

En fait je suis d'accord avec toi, je posais la question a l'OP qui postait a l'origine.

Ce scenario ne peut se produire, pour plusieurs raisons, mais l'une d'elle sont les checkpoint. Les blockchains qui ont des problèmes d'attaques a 51% sont celles qui ne sont pas maintenues.
Il y a 2 types de checkpoints qui sont codés dans les wallets et donc qui vérifient que les transactions a certaines hauteur de block sont valide, genre hash du block x = y
Si les hash divergent le consensus est rejeté.
Donc pour voler one blockchain en totalité comme le fait l'OP dans son example, il faut aussi faire un fork du wallet et que + 50% des nodes soient des wallets forkés ce qui est vraiment difficile.

En ce qui concerne une attaque a 51%, il est possible d’insérer dans la blockchain un block miné qui ne bénéficie qu'a celui qui a fait l'attaque. Mais cela ne met pas la blockchain en peril, cela vole juste l'argent des mineurs en quelque sorte mais cela a un prix, le hashing nécessaire est très élevé, et donc cela coûte très cher a faire.

Ce genre de problèmes sont intéressant, j'ai fais 2 blockchains, et toute information utile est bienvenue, vue que mes blockchains sont toute jeune et avec un travail peu élevé...

Hier par exemple j'ai eut une attaque a 51% sur notre pool de minage.

Donc si tu as 1 seule instance full node, que tu mines sur un stratum (on ne peut plus solo miner avec 0.18)
Si le réseau total a un hashrate de 10 T/s et que tu mines avec 6 T/s tu peux inclure dans ton bloc des transaction factices... si ta chaine est plus longue de COINBASE_MATURITY transactions.
Dans ce cas, ta chaine sera retenue comme étant la plus longue et remplacera la chaine qui se trouve sur tous les full node.
Ainsi toutes les transactions peuvent être modifiée?

Une seule full node, c'est pas un consensus.  Undecided
Je pense que tu peux pas raisonner comme ça.

Effectivement, localement, tu va produire une chaîne qui est tout aussi valide que celle d'origine, et puis le fait que la chaîne avec le + de PoW cumulée devient "la" chaîne de référence pour les clients du coin, ça va se produire comme toi tu le dis.

Maintenant, il faut pas oublier que bitcoin doit composer avec le reste des noeuds du réseau et les mineurs. Hah, et les devs. ^^

Si il était aussi simple de faire ça que ce que tu as expliqué dans ton exemple, il n'aurait pas un tel succès et c'est d'ailleurs là sa principale force.
La preuve de travail.
Salut,

les checkpoints ont été ajoutés puis retirés, seuls certains forks pas à jour en ont encore. Ce système (qui reposait trop sur la confiance en les core devs) a été abandonné au profit de `assumevalid`, qui offre le même avantage que les checkpoints (à savoir ne pas vérifier les signatures précédent un certain bloc) mais n'a pas le même postulat de confiance que les checkpoints : si le bloc n'est pas dans la block chain, les signatures seront toutes vérifiées au lieu de la refuser.


Combien de full nodes tu as attaqué, et donc combien d'instances ont été nécessaire pour obtenir les 51%
Il devait y avoir environ 4-5 node sur ce réseau de test. De toutes façons même s'il y en avait plus, la nouvelle chain aurait juste mis plus de temps à se propager (et à être vérifiée) : une seule instance est nécessaire, seule la puissance de calcul compte.


Edit modo : fusion double post
Archive

Github profile ~ Crypto Lyon (french community)  ~ GPG key fingerprint : E13F C145 CD3F 430 ~ LN public key : 03678b4f041fbfbeebcafc076469df75decf81da20a53bd490172e83ce532df1fa
yogg
Legendary
*
Offline Offline

Activity: 1568
Merit: 1733


Coldkey™ -- coldkey.eu


View Profile
July 13, 2019, 10:23:51 AM
 #11

Merci pour tes précisions. Smiley
C'est très intéressant !

Combien de full nodes tu as attaqué, et donc combien d'instances ont été nécessaire pour obtenir les 51%
Il devait y avoir environ 4-5 node sur ce réseau de test. De toutes façons même s'il y en avait plus, la nouvelle chain aurait juste mis plus de temps à se propager (et à être vérifiée) : une seule instance est nécessaire, seule la puissance de calcul compte.

Une est tout à fait indispensable, mais je pense que pour constater des forks, il aurait fallu plusieurs noeuds et voir sur quelle chain est quel noeud après tes tentatives.
Avec un seul noeud, tu sera toujours sur "une branche" de la chain en cas de forks. Tu sauras pas si il y'a réellement eu un fork ou pas.

Après je me trompe peut être et quelque chose m'échappe  Huh

Saint-loup
Hero Member
*****
Offline Offline

Activity: 882
Merit: 651


View Profile
July 13, 2019, 02:05:04 PM
 #12

Merci pour tes précisions. Smiley
C'est très intéressant !

Combien de full nodes tu as attaqué, et donc combien d'instances ont été nécessaire pour obtenir les 51%
Il devait y avoir environ 4-5 node sur ce réseau de test. De toutes façons même s'il y en avait plus, la nouvelle chain aurait juste mis plus de temps à se propager (et à être vérifiée) : une seule instance est nécessaire, seule la puissance de calcul compte.

Une est tout à fait indispensable, mais je pense que pour constater des forks, il aurait fallu plusieurs noeuds et voir sur quelle chain est quel noeud après tes tentatives.
Avec un seul noeud, tu sera toujours sur "une branche" de la chain en cas de forks. Tu sauras pas si il y'a réellement eu un fork ou pas.

Après je me trompe peut être et quelque chose m'échappe  Huh
C'est là que meuh nous manque, il aurait certainement une astuce à nous donner .... Embarrassed
 mais sinon avec ce genre de commande, on doit pouvoir voir normalement si on est sur la même chaîne que les autres nodes du réseau non?

https://bitcoin.org/en/developer-reference#getpeerinfo
yogg
Legendary
*
Offline Offline

Activity: 1568
Merit: 1733


Coldkey™ -- coldkey.eu


View Profile
July 13, 2019, 02:25:26 PM
Last edit: July 13, 2019, 03:29:12 PM by yogg
 #13

C'est là que meuh nous manque, il aurait certainement une astuce à nous donner .... Embarrassed
 mais sinon avec ce genre de commande, on doit pouvoir voir normalement si on est sur la même chaîne que les autres nodes du réseau non?

https://bitcoin.org/en/developer-reference#getpeerinfo

Quelque chose avec getpeerinfo, ça pourrait le faire.

Sinon avoir plusieurs full nodes, a différents endroits dans le monde.
Au début, tu t'arranges pour que tout soit sync. Ce process peut être automatisé en comparant les différentes block height et hash (identifiant) des précédents blocks.

Dès que ça ne matche plus quelque part, c'est qu'il y'a un fork.

C'est comme ça que je le ferais. Je vois pas trop comment faire autrement pour te rendre compte d'un fork.
En tout les cas, avec un seul nœud, ça me paraît difficile.

asche
Hero Member
*****
Offline Offline

Activity: 602
Merit: 694


I forgot more than you will ever know.


View Profile
July 19, 2019, 09:24:42 PM
 #14

Dès que ça ne matche plus quelque part, c'est qu'il y'a un fork.

C'est comme ça que je le ferais. Je vois pas trop comment faire autrement pour te rendre compte d'un fork.
En tout les cas, avec un seul nœud, ça me paraît difficile.

Au lieu de mesurer la variance sur le sync tu peux la mesurer sur le hashrate. C'est à mon avis plus facile à mesurer, les soucis de sync peuvent arriver assez fréquemment. Ca demanderait pas mal d'intelligence/d'analyse d'analyser pas mal de bugs/hangs par rapport à la simple puissance de minage.

TheWolf666
Member
**
Offline Offline

Activity: 336
Merit: 96

Author & Prog of Franc / Prog of Kryptofranc


View Profile WWW
July 21, 2019, 05:08:11 AM
 #15

Dès que ça ne matche plus quelque part, c'est qu'il y'a un fork.

C'est comme ça que je le ferais. Je vois pas trop comment faire autrement pour te rendre compte d'un fork.
En tout les cas, avec un seul nœud, ça me paraît difficile.

Au lieu de mesurer la variance sur le sync tu peux la mesurer sur le hashrate. C'est à mon avis plus facile à mesurer, les soucis de sync peuvent arriver assez fréquemment. Ca demanderait pas mal d'intelligence/d'analyse d'analyser pas mal de bugs/hangs par rapport à la simple puissance de minage.

La variance sur le hashrate est plus efficace en effet. Une tentative d'attaque a 51% devrait pouvoir être détectée par une hausse soudaine du hashrate de plusieurs nodes. A moins que l'attaquant utilise un grand nombre de nodes, les nodes des attaquants devraient être facile a identifier car ils devraient centraliser un hashrate extrêmement élevé.
Le consensus sur une transaction pourrait etre invalidé dans le cas d'un hashrate trop elevé.

Cependant, comme le hashrate d'un node est transmit par le logiciel de minage a travers le stratum du pool, c'est facile de masquer la vrai valeur du hashrate en modifiant le logiciel de minage pour qu'il envoie des données bidon, ou en utilisant son propre pool avec un stratum modifié.

Author and Programmer: https://franc.eu.com
Programmer: https://kryptofranc.com
yogg
Legendary
*
Offline Offline

Activity: 1568
Merit: 1733


Coldkey™ -- coldkey.eu


View Profile
July 21, 2019, 09:04:39 AM
 #16

Dès que ça ne matche plus quelque part, c'est qu'il y'a un fork.

C'est comme ça que je le ferais. Je vois pas trop comment faire autrement pour te rendre compte d'un fork.
En tout les cas, avec un seul nœud, ça me paraît difficile.

Au lieu de mesurer la variance sur le sync tu peux la mesurer sur le hashrate. C'est à mon avis plus facile à mesurer, les soucis de sync peuvent arriver assez fréquemment. Ca demanderait pas mal d'intelligence/d'analyse d'analyser pas mal de bugs/hangs par rapport à la simple puissance de minage.

La variance sur le hashrate est plus efficace en effet. Une tentative d'attaque a 51% devrait pouvoir être détectée par une hausse soudaine du hashrate de plusieurs nodes. A moins que l'attaquant utilise un grand nombre de nodes, les nodes des attaquants devraient être facile a identifier car ils devraient centraliser un hashrate extrêmement élevé.
Le consensus sur une transaction pourrait etre invalidé dans le cas d'un hashrate trop elevé.

Cependant, comme le hashrate d'un node est transmit par le logiciel de minage a travers le stratum du pool, c'est facile de masquer la vrai valeur du hashrate en modifiant le logiciel de minage pour qu'il envoie des données bidon, ou en utilisant son propre pool avec un stratum modifié.

Oui, peut être plus facile, mais ce n'est pas fiable.
Vous pouvez regarder ce que fait BitMEX sur son site de monitoring des forks :
https://forkmonitor.info/nodes/btc

Ils ont des clients différents, et ils comparent les blocks reçus par les différents clients.

Comme l'a dit TheWolf, la hashrate peut être fausse, et comparer les blocks est plus sur.

Pages: [1]
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!