Principes de Blockchain et Bitcoin

1. Qu'est-ce que Bitcoin?

Bitcoin est une monnaie électronique (monnaie numérique) et Bitcoin est une monnaie basée sur la cryptographie. Le 1er novembre 2008, Satoshi Nakamoto (je ne sais pas s'il s'agit d'un humain ou d'une IA, d'une organisation ou d'un individu?) A proposé le concept de Bitcoin. Il a publié un article sur Bitcoin, qui est maintenant le «livre blanc» de Bitcoin. Lien vers le pdf original du papier Bitcoin de Satoshi Nakamoto: Bitcoin
propose un système de comptabilité électronique décentralisé dans l'article . La monnaie électronique traditionnelle est la banque pour tenir les comptes, car la banque est derrière le crédit du pays, l'électronique décentralisée Le système comptable est la comptabilité conjointe de participants. Les gens obtiennent Bitcoin grâce à l' exploitation minière et effectuent le paiement via la comptabilité publique .

2. Le principe de la blockchain

(1) Arbre de Merkel

Un arbre de hachage ou arbre de Merkel est un arbre dans lequel chaque nœud feuille est marqué avec le hachage de mot de passe du bloc de données, et chaque nœud non-feuille est marqué avec le hachage de mot de passe de son étiquette de nœud enfant. . Les arbres de hachage permettent une vérification efficace et sûre du contenu de grandes structures de données. L'arbre de hachage est une généralisation de la liste de hachage et de la chaîne de hachage. Afin de prouver qu'un nœud feuille fait partie d'un arbre de hachage binaire donné, il est nécessaire de calculer le nombre de hachages qui est proportionnel au logarithme du nombre de nœuds feuilles de l'arbre. C'est l'inverse de la liste de hachage et le numéro de la liste de hachage est le même que celui du nœud feuille lui-même. Il est directement proportionnel au nombre.
Arbre Merkle
Ceci est un exemple d'arbre de hachage binaire. Le hachage 0-0 et 0-1 sont les valeurs de hachage des blocs de données L1 et L2, respectivement, et le hachage 0 est la concaténation des hachages 0-0 et 0-1.

(2). Block et blockchain

Dans la chaîne de blocs, il y a beaucoup de blocs , ces blocs sont un lien crypté, chaque bloc contient un en-tête de bloc et des informations de transaction (généralement une représentation de l' arbre de Merkel ), contenues dans les informations d'en-tête dans la séquence de hachage, horodatage. Selon le design, la blockchain peut résister à la modification de ses données. En effet, une fois enregistrées, les données d'un bloc donné ne peuvent pas être modifiées rétrospectivement sans changer tous les blocs suivants.
Structure de la blockchain Bitcoin
Logiquement parlant, la blockchain peut être considérée comme composée de 5 couches:
1. Infrastructure (matériel)
2. Réseau (découverte de nœuds, diffusion d'informations et vérification)
3. Consensus (preuve de travail, certificat d'actionnariat)
4. Données (blocs , transactions)
5. Les applications (dApps)
ne peuvent pas être modifiées rétrospectivement car les données d'un bloc donné n'ont pas besoin de changer tous les blocs suivants. En réponse à cela
Blockchain
, la formation de la blockchain. La chaîne principale (noire) se compose de la plus longue série de blocs allant du bloc fondateur (vert) au bloc actuel. Il y a des blocs isolés (violets) à l'extérieur de la chaîne principale.

Permettez aux participants de vérifier et d'examiner les transactions de manière indépendante et à un prix relativement avantageux. Utilisez des réseaux peer-to-peer et des serveurs d'horodatage distribués pour gérer de manière autonome les bases de données blockchain. Ils certifient qu'ils portent un intérêt collectif à travers une collaboration à grande échelle. Une telle conception favorise un flux de travail robuste dans lequel l’incertitude des participants sur la sécurité des données est négligeable. L'utilisation de la blockchain élimine la reproductibilité infinie des actifs numériques. Il a confirmé que chaque unité de valeur n'était transférée qu'une seule fois, résolvant ainsi le problème de longue date de la double dépense. La blockchain a été décrite comme un protocole d'échange de valeur. La blockchain peut conserver la propriété car lorsqu'elle est correctement configurée pour détailler l'accord d'échange, elle peut fournir un enregistrement des offres et des acceptations obligatoires.

Un exemple simple: une transaction a été initiée entre les quatre personnes sur ABCD. Parmi eux, A a transféré 100 bitcoins à B. Parce qu'il s'agit d'une méthode comptable décentralisée. Par conséquent, chacune de ces quatre personnes enregistrera cette transaction dans son propre grand livre et enregistrera le transfert de 100 bitcoins de A à B. Il s'agit d'une information de transaction qui sera enregistrée dans le bloc. Chaque bloc mesure 1 Mo et peut stocker environ 4 000 informations. Dans ce bloc, pourquoi utiliserais-je A comme standard pour notifier les autres? Qui allons-nous utiliser dans le trading normal? Et pourquoi devrions-nous tenir des comptes? Est-ce bon pour nous? Ce sont tous des problèmes rencontrés lors de la conception.
Exemple

3. Raisons d'utiliser la blockchain pour la comptabilité

Comme on dit qu'il n'y a aucun avantage, Satoshi Nakamoto a mentionné le programme d'incitation dans son article sur la conception de la blockchain. La personne qui tient le livre bénéficiera de deux types d'avantages: le premier est la récompense des frais de traitement, et le second est la récompense du bloc emballé (récompense du système). L'initiation de chaque transaction facturera à l'utilisateur une somme modique, et ces frais seront récompensés aux utilisateurs qui réservent le forfait. Dans la deuxième récompense, le système récompense la personne qui a réservé le forfait. Dans l'article de Nakamoto où il a écrit ce système toutes les dix minutes pour générer un bloc, chaque bloc générera une certaine quantité de récompense Bitcoin. Depuis 2008, il s'agit de 50 bitcoins, qui se désintègrent de moitié tous les quatre ans. Par analogie, le nombre de bitcoins obtenus diminuera. Nous pouvons calculer qu'il y a environ 21 millions de Bitcoins dans le monde sur la base de cet algorithme , donc Bitcoin deviendra de plus en plus difficile à exploiter avec le temps .

4. Qui est le soi-disant "centre" dans chaque bloc

(1). Obtenez la puissance pour emballer grâce au mécanisme de preuve de charge de travail

Satoshi Nakamoto a également écrit dans son article que chaque utilisateur ou nœud se disputera le pouvoir de la comptabilité grâce à un mécanisme de preuve de travail. Le premier utilisateur qui peut être calculé pour chaque bloc est le producteur du bloc suivant. La seule façon de sélectionner des utilisateurs via une preuve de travail est de laisser les utilisateurs résoudre des problèmes de «mathématiques». Ce problème mathématique est basé sur l' algorithme SHA256 , donc le seul moyen est d'essayer un par un. Celui qui obtient la réponse à cette question en premier sera éligible pour l'empaquetage. Ceci est également connu comme le soi-disant minage .

(2) Algorithme .SHA256

L'algorithme Secure Hash (SHA) est une série de fonctions de hachage cryptographiques émises par le National Institute of Standards and Technology en tant que norme de traitement de l'information fédérale américaine. SHA signifie Secure Hash Algorithm. SHA-1 et SHA-2 sont deux versions différentes de cet algorithme. Ils diffèrent par leur structure (la façon dont le hachage résultant est créé à partir des données d'origine) et la longueur en bits de la signature. SHA-2 est considéré comme le successeur de SHA-1 car il s'agit d'une amélioration globale. Tout d'abord, les gens considèrent la longueur de la position comme une différence importante. SHA-1 est un hachage de 160 bits. SHA-2 est en fait une série de "hachage", et a différentes longueurs, le plus populaire est 256 bits (SHA256), et la sortie finale est un nombre binaire de 256 bits . Voici le pseudo code de l'algorithme SHA256:

Initialize hash values:
(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

Initialize array of round constants:
(first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
k[0..63] :=
   0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
   0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
   0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
   0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
   0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
   0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
   0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
   0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

Pre-processing (Padding):
begin with the original message of length L bits
append a single '1' bit
append K '0' bits, where K is the minimum number >= 0 such that L + 1 + K + 64 is a multiple of 512
append L as a 64-bit big-endian integer, making the total post-processed length a multiple of 512 bits
such that the bits in the message are L 1 00..<K 0's>..00 <L as 64 bit integer> = k*512 total bits

Process the message in successive 512-bit chunks:
break message into 512-bit chunks
for each chunk
    create a 64-entry message schedule array w[0..63] of 32-bit words
    (The initial values in w[0..63] don't matter, so many implementations zero them here)
    copy chunk into first 16 words w[0..15] of the message schedule array

    Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array:
    for i from 16 to 63
        s0 := (w[i-15] rightrotate  7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift  3)
        s1 := (w[i- 2] rightrotate 17) xor (w[i- 2] rightrotate 19) xor (w[i- 2] rightshift 10)
        w[i] := w[i-16] + s0 + w[i-7] + s1

    Initialize working variables to current hash value:
    a := h0
    b := h1
    c := h2
    d := h3
    e := h4
    f := h5
    g := h6
    h := h7

    Compression function main loop:
    for i from 0 to 63
        S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
        ch := (e and f) xor ((not e) and g)
        temp1 := h + S1 + ch + k[i] + w[i]
        S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
        maj := (a and b) xor (a and c) xor (b and c)
        temp2 := S0 + maj
 
        h := g
        g := f
        f := e
        e := d + temp1
        d := c
        c := b
        b := a
        a := temp1 + temp2

    Add the compressed chunk to the current hash value:
    h0 := h0 + a
    h1 := h1 + b
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e
    h5 := h5 + f
    h6 := h6 + g
    h7 := h7 + h

Produce the final hash value (big-endian):
digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

(3). Code d'algorithme de base SHA256 formé par le langage C ++

#pragma once
 
#ifndef SHA256_H
#define SHA256_H
#include <string>
 
class SHA256
{
    
    
protected:
	typedef unsigned char uint8;
	typedef unsigned int uint32;
	typedef unsigned long long uint64;
 
	const static uint32 sha256_k[];
	static const unsigned int SHA224_256_BLOCK_SIZE = (512 / 8);
public:
	void init();
	void update(const unsigned char* message, unsigned int len);
	void final(unsigned char* digest);
	static const unsigned int DIGEST_SIZE = (256 / 8);
 
protected:
	void transform(const unsigned char* message, unsigned int block_nb);
	unsigned int m_tot_len;
	unsigned int m_len;
	unsigned char m_block[2 * SHA224_256_BLOCK_SIZE];
	uint32 m_h[8];
};
 
std::string sha256(std::string input);
 
#define SHA2_SHFR(x, n)    (x >> n)
#define SHA2_ROTR(x, n)   ((x >> n) | (x << ((sizeof(x) << 3) - n)))
#define SHA2_ROTL(x, n)   ((x << n) | (x >> ((sizeof(x) << 3) - n)))
#define SHA2_CH(x, y, z)  ((x & y) ^ (~x & z))
#define SHA2_MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
#define SHA256_F1(x) (SHA2_ROTR(x,  2) ^ SHA2_ROTR(x, 13) ^ SHA2_ROTR(x, 22))
#define SHA256_F2(x) (SHA2_ROTR(x,  6) ^ SHA2_ROTR(x, 11) ^ SHA2_ROTR(x, 25))
#define SHA256_F3(x) (SHA2_ROTR(x,  7) ^ SHA2_ROTR(x, 18) ^ SHA2_SHFR(x,  3))
#define SHA256_F4(x) (SHA2_ROTR(x, 17) ^ SHA2_ROTR(x, 19) ^ SHA2_SHFR(x, 10))
#define SHA2_UNPACK32(x, str)                 \
{                                             \
    *((str) + 3) = (uint8) ((x)      );       \
    *((str) + 2) = (uint8) ((x) >>  8);       \
    *((str) + 1) = (uint8) ((x) >> 16);       \
    *((str) + 0) = (uint8) ((x) >> 24);       \
}
#define SHA2_PACK32(str, x)                   \
{                                             \
    *(x) =   ((uint32) *((str) + 3)      )    \
           | ((uint32) *((str) + 2) <<  8)    \
           | ((uint32) *((str) + 1) << 16)    \
           | ((uint32) *((str) + 0) << 24);   \
}
#endif

5. Blockchain et sécurité Bitcoin

La blockchain et le Bitcoin sont-ils sûrs? Comment empêchent-ils la falsification, la falsification et le double paiement ? La technologie d'authentification d'identité peut être la reconnaissance faciale, la signature, les empreintes digitales, etc. dans la vie. Mais une fois numérisés, ils peuvent être falsifiés par copie , donc Bitcoin utilise une méthode de signature électronique . La technologie de signature électronique utilise principalement un cryptage asymétrique . Tout d'abord, Bitcoin générera un nombre aléatoire . Cette technologie générera une clé privée (seul l'utilisateur le sait) via un nombre aléatoire et la cryptera avec une clé privée, puis générera une clé publique (accessible au public) via la clé privée , qui peut être déchiffrée par la clé publique. Une adresse publique sera générée et les utilisateurs pourront effectuer des transactions anonymes via l'adresse . L'algorithme typique est RSA et Bitcoin utilise un algorithme de cryptage à courbe elliptique.

Processus de conversion

1、首先使用随机数发生器生成一个私钥,它是一个256位的二进制数。私钥是不能公开的,相当于银行卡的密码。

2、私钥经过SECP256K1算法生成公钥,SECP256K1是一种椭圆曲线加密算法,功能和RSA算法类似,通过一个已知的私钥,生成一个公钥,但是通过公钥不能反推出私钥。

3、同SHA256算法一样,RIPEMD160也是一种HASH算法,由公钥可以得到公钥的哈希值,而通过哈希值无法推出公钥。

4、将一个字节的版本号连接到公钥哈希头部,然后对其进行两次SHA256运算,将结果的前4字节作为公钥哈希的校验值,连接在其尾部。

5、将上一步的结果使用BASE58进行编码,就得到了钱包地址(相当于银行账户)。比如A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

(1). Résoudre les enregistrements de transactions falsifiés

Comparer auth
La figure montre l'événement dans lequel A donne des bitcoins B1. Après avoir obtenu le condensé via l'opération de hachage, le condensé est chiffré avec la clé privée pour obtenir le mot de passe. En raison du caractère unique de la clé privée, le résumé est unique. Grâce à la diffusion, les messages délivrés par A sont: A les transferts vers B 1 bitcoin, la clé publique de A et le mot de passe de A.
Bien sûr, nous pouvons supposer que le message selon lequel A a transféré 1 Bitcoin vers B est faux, et le condensé 1 est obtenu sur la base de cette opération de hachage. Et en utilisant la clé publique de A pour déchiffrer le mot de passe pour obtenir Digest 2. A ce moment Digest 1 et Digest 2. sont évidemment différents "A donne B 1 bitcoin" est un message falsifié.

(2). Empêcher la falsification des enregistrements de transaction

Afin d'éviter l'apparition d'événements de falsification, la blockchain protégera l'ensemble de la blockchain selon le principe de la plus longue chaîne :

Lorsque la chaîne de blocs se ramifie, c'est-à-dire que plus d'une personne a déterré le bloc suivant presque en même temps et que la direction de la chaîne s'est ramifiée.En général, le principe de la chaîne la plus longue est utilisé pour la sélection. Supposons que le groupe d'utilisateurs A choisisse d'aller sur la chaîne pour continuer l'exploitation minière et que le groupe d'utilisateurs B choisisse de sortir de la chaîne pour continuer l'exploitation minière. Si le groupe A creuse d'abord la mine suivante et ajoute un nouveau bloc à la chaîne, le groupe B continuera à miner après être passé au nouveau bloc. Normalement, la chaîne descendante est jetée.

C'est-à-dire que là où il y a une branche dans la blockchain, il comparera les chaînes supérieures et inférieures qui creusent d'abord le deuxième bloc (dont la chaîne devient la longue branche en premier), gardent la longue chaîne et abandonnent la chaîne courte .
Par conséquent, nous pouvons suivre le principe de la chaîne la plus longue. Si quelqu'un veut falsifier les informations d'un bloc sur la blockchain, il doit diriger une branche à ce bloc et créer une nouvelle chaîne pour que la nouvelle chaîne dépasse la longueur de la chaîne d'origine . Autrement dit, la puissance de calcul de la machine minière contrôlée par lui seul dépasse la puissance de calcul des machines minières restantes dans le monde (plus rapide que quiconque). La probabilité de cette réalisation est très faible. Par exemple, une personne contrôle 90% des machines minières dans le monde pour falsifier les enregistrements de transaction d'une chaîne. Pourquoi n'utilise-t-elle pas autant de machines minières pour miner sérieusement?

(3). Empêcher les opérations de double paiement

Lorsqu'un événement de double paiement se produit, par exemple, A n'a que 100 bitcoins, mais diffuse en même temps le message «A to B 100 bitcoins» (enregistré comme message b) et «A to C
100 bitcoins» (enregistré comme message c ), Le groupe D reçoit le message b en premier et ne confirmera pas le message c. De même, si le groupe E reçoit d'abord le message c, il ne confirmera pas le message b. À ce stade, cela dépend de celui des groupes D et E qui peut calculer le problème mathématique en premier, celui qui creuse la mine en premier peut écrire le message confirmé dans le nouveau bloc, tandis que l'autre message est invalide.

Double paiement
Déclaration
de copyright Cet article est le contenu original de J0hn à l'exception du contenu référencé ci - dessous , et le droit d'interprétation finale appartient à l'auteur original. En cas d'infraction, veuillez contacter pour la supprimer. Sans mon autorisation, veuillez ne pas le réimprimer en privé!

6. Documents de référence

[1]. BMoney http://www.weidai.com/bmoney.txt
[2]. Wikipédia https://en.wikipedia.org/wiki/Bitcoin
[3]. Wikipédia https://en.wikipedia.org/wiki/SHA-2
[4]. Wikipédia https://en.wikipedia.org/wiki/Blockchain
[5]. Youtube https://www.youtube.com/watch?v=g_fSistU3MQ&t=11s
[6]. BitcoinOrg https://bitcoin.org/bitcoin.pdf

Je suppose que tu aimes

Origine blog.csdn.net/sjhjohn/article/details/114994837
conseillé
Classement