Netwatch utilise la blockchain

C'est un travail pour V.

Ce défi est tiré de c0d1ngUP 2022

Afin d'infiltrer les Animals, vous devez gagner leur confiance et montrer vos aptitudes. En particulier, les Animals échangent parfois des messages avec Netwatch, en utilisant l'historique des transactions Bitcoin enregistrées dans la blockchain.

Comme cette blockchain est publique, les blocs qui y sont enregistrés sont accessibles par le biais de plusieurs passerelles Web.

Par exemple : https://live.blockcypher.com/ ou https://www.blockchain.com/.

Chaque bloc qui compose la blockchain bitcoin est numéroté, depuis le bloc numéro 1, le Genesis Block, créé en 2009 par Satoshi Nakamoto. Il y a actuellement plusieurs centaines de milliers de blocs. En plus de son numéro d'ordre, chaque bloc est identifié par un hash de 256 bits (souvent représenté avec 64 chiffres hexadécimaux).

Chaque bloc contient une ou plusieurs transactions (généralement, il y en a plusieurs). Et chaque transaction du bloc est elle même identifiée par un hash de 256 bits.

Le bloc numéro 700 000, par exemple, peut être examiné :

On constate que ce block est identifié par le hash : 0000000000000000000590fc0f3eba193a278534220b2b37e9849e1a770ca959 et qu'il contient 1276 transactions.

La première transaction (nous l'appellerons transaction numéro 0) possède le hash 1d8149eb8d8475b98113b5011cf70e0b7a4dccff71286d28b8b4b641f94f1e46 et représente un montant de 6.4 BTC environ. La transaction numéro 2 possède le hash 744556a5586736471d496c928ccca8fd58dadac6071394eca846c180b0dec6fe et représente un montant de 1.134 BTC environ.

On peut désigner une transaction particulière dans la blockchain en donnant le numéro du bloc, et le numéro de la transaction dans le bloc.

À titre d'exemple, la séquence suivante :

600996,1
601010,2
601008,18
600926,17
601036,4
600960,14

fait référence à la transaction numéro 1 du bloc 600996, puis la transaction numéro 2 du bloc 601010, puis la transaction numéro 18 du bloc 601008, etc.

En combinant les hashs des transactions ainsi désignées, il est possible de reconstituer un message. Il faut tout d'abord récupérer les hashs de ces transactions :

509310e65592b19ba50589ba2e333a4d7c3ea6390ae6075551221cd80c3c7d7f
d2cf327a7e887b9091e16d7212766fadccc3ada53290c50351e70e3aa6188265
9cef526bfe9b9a26ef01f6b2a9c694b794f377a63ee4c16ab4e41e4ecb0d5417
761807dd4f58dee66eef7f66d8f8f9366183833206d7f3780723f57e07204297
24dbc244026cbb149ca4cc95b6a8f9fca1dacb09297f67efd40e4e72fb07718f
1581f02b97b462050c3a113a00782c36ad4134e24a273fef679886ff49e38277

Puis, on place les hashs les uns en dessous des autres, dans l'ordre, en décalant chaque hash d'un octet (donc 2 caractères) par rapport au précédent, puis on réalise un ou exclusif entre les opérandes (décalés) :

    509310e65592b19ba50589ba2e333a4d7c3ea6390ae6075551221cd80c3c7d7f
XOR   d2cf327a7e887b9091e16d7212766fadccc3ada53290c50351e70e3aa6188265
XOR     9cef526bfe9b9a26ef01f6b2a9c694b794f377a63ee4c16ab4e41e4ecb0d5417
XOR       761807dd4f58dee66eef7f66d8f8f9366183833206d7f3780723f57e07204297
XOR         24dbc244026cbb149ca4cc95b6a8f9fca1dacb09297f67efd40e4e72fb07718f
XOR           1581f02b97b462050c3a113a00782c36ad4134e24a273fef679886ff49e38277
-------------------------------------------------------------------------------
 =  5041434d414e5980de976ecedc4475b8311446d6cc86114f8fdf77e530480603151b050d77

Comme il n'y a que 6 hashs dans le calcul, on ne garde que les 6 premiers octets du résultat : 50, 41, 43, 4d, 41, 4e

Ces 6 octets correspondent aux valeurs (ici en décimal) 80, 65, 67, 77, 65, 78 qui forment la chaîne de caractères (généralement UTF-8, mais sur l'exemple, c'est simplement de l'ASCII) : PACMAN.

50 41 43 4d 41 4e
80 65 67 77 65 78    (décimal)
 P  A  C  M  A  N    (ASCII)

Afin de gagner l'estime des Animals, vous allez devoir retrouver un message «codé» de cette manière. En entrée, vous disposez d'une série de numéros de blocs et de numéros de transactions, séparés par une virgule.

Validez le défi en donnant le score de Satoshi Nakamoto.

Type de retour
un nombre entier
Entrées du problème
Vous devez être connecté.e pour proposer une réponse au défi
Vous devez être connecté.e pour accéder aux forums.