Outils pour utilisateurs

Outils du site


nsi:tds:cryptographie:blockchain

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:cryptographie:blockchain [2023/04/11 19:32] goupillwikinsi:tds:cryptographie:blockchain [2023/05/08 01:14] (Version actuelle) goupillwiki
Ligne 117: Ligne 117:
   * Paul veut donner 5 unité à Judith. On crée le texte ''%%T = "Paul;Judith;5"%%''   * Paul veut donner 5 unité à Judith. On crée le texte ''%%T = "Paul;Judith;5"%%''
   * on encode le texte et on hache. On utilise pour cela ''hashlib'' :\\ ''%%z = hashlib.sha256(T.encode('utf8'))%%''   * on encode le texte et on hache. On utilise pour cela ''hashlib'' :\\ ''%%z = hashlib.sha256(T.encode('utf8'))%%''
-  * on calcule la signature ''S'' par chiffrement de ''z'' en utilisant la clé privée de Paul :\\ ''%%S = rsa.cypher(z, Kpr)%%''\\ on utilise {{ :nsi:tds:cryptographie:rsa.py |}} correspondant à ce que l'on a vu dans le [[nsi:terminales:securite:rsa|cours RSA]]+  * on calcule la signature ''Sb'' par chiffrement de ''z'' en utilisant la clé privée de Paul :\\ ''%%S = rsa.cypher(z, Kpr)%%''\\ on utilise {{ :nsi:tds:cryptographie:rsa.py |}} correspondant à ce que l'on a vu dans le [[nsi:terminales:securite:rsa|cours RSA]] 
 +  * ''Sb'' est de type ''bytes''. On préfère une écriture texte hexadécimale. On peut calculer ''S = Sb.hex()''.
   * la transaction est alors complétée : ''%%("Paul", "Judith", 5, S)%%''   * la transaction est alors complétée : ''%%("Paul", "Judith", 5, S)%%''
  
-Dans l'exemple, la signature est un long ''bytes'' :+Dans l'exemple, la signature est :
  
 <code python> <code python>
-b"\x12\xd1\xcc\x8b'\x16O\xdcD\x0b\xde\x81\x904\x7f\xe0HD\x89\xbf\x9e\x04\xe7\x1f,\xd6\xed\xf1\x82\x91\r\xd4\x93\xc0,h\xbf\x01\xfau*)\x7f\xa3L5\x8djE\x1d\xef\xfcw\xdf9\xb3"+'12d1cc8b27164fdc440bde8190347fe0484489bf9e04e71f2cd6edf182910dd493c02c68bf01fa752a297fa34c358d6a451deffc77df39b3'
 </code> </code>
  
Ligne 130: Ligne 131:
   * comme dans ce qui précède, on produit le texte ''%%T = "Paul;Judith;5"%%'',   * comme dans ce qui précède, on produit le texte ''%%T = "Paul;Judith;5"%%'',
   * on hache ce texte : ''%%z = hashlib.sha256(T.encode('utf8'))%%''   * on hache ce texte : ''%%z = hashlib.sha256(T.encode('utf8'))%%''
-  * on déchiffre ''S'' avec la ''Kpu'' de Paul : ''%%z2 = rsa.decypher(S, Kpu)%%''+  * on cherche la version ''bytes'' de ''S'' : ''Sb = bytes.from_hex(S)'' 
 +  * on déchiffre ''Sb'' avec la ''Kpu'' de Paul : ''%%z2 = rsa.decypher(Sb, Kpu)%%''
   * on compare si ''z == z2''. Si oui, la signature est valide.   * on compare si ''z == z2''. Si oui, la signature est valide.
  
Ligne 258: Ligne 260:
         # le fichier doit contenir le contenu de __str__         # le fichier doit contenir le contenu de __str__
         # si le fichier existe déjà, il ne faut rien faire         # si le fichier existe déjà, il ne faut rien faire
 +        
 +    def next_filename(self) -> str:
 +        """
 +        renvoie le nom de fichier du bloc suivant
 +        """
 +        return self.FOLDER + self.empreinte() + self.EXT    
  
  
Ligne 265: Ligne 273:
         lance la procédure de chargement pour construire la blockchain         lance la procédure de chargement pour construire la blockchain
         """         """
 +        self.blocs = []
 +        self.keys = {}
 +        self.credits = {}
         self.load()         self.load()
  
Ligne 278: Ligne 289:
         #   empreinte du bloc         #   empreinte du bloc
         # créer le bloc0 avec les infos du fichier mettre bloc0 dans self.blocs         # créer le bloc0 avec les infos du fichier mettre bloc0 dans self.blocs
-        # créer un self.comptes = { identifiant: (compte, n, e) } pour stocker +        # créer un self.keys = { identifiant: (n, e) } pour stocker les clés des comptes 
-        #   les infos sur les comptes+        # créer un self.credits = { identifiant: credit } pour stocker les crédits des comptes
         # à partir de là, tant que l'empreinte du dernier bloc correspond à un fichier,         # à partir de là, tant que l'empreinte du dernier bloc correspond à un fichier,
         # charger le fichier, lire la transaction, l'ajouter à la chaîne         # charger le fichier, lire la transaction, l'ajouter à la chaîne
Ligne 308: Ligne 319:
         id_cible: identifiant cible         id_cible: identifiant cible
         value: quantité  à transférer         value: quantité  à transférer
-        renvoie l'empreinte+        renvoie l'empreinte sous forme digest
         """         """
         # fabrique le texte formé de la façon id_source;id_cible;value         # fabrique le texte formé de la façon id_source;id_cible;value
-        # encode, hash, +        # encode, hash 
-        # renvoie digest()+        # renvoie digest
  
-    def compte(self, identifiant:str) -> int:+    def credit(self, identifiant:str) -> int:
         """         """
-        renvoie la valeur de compte pour identifiant+        renvoie la valeur de crédit pour identifiant
         """         """
 </code> </code>
Ligne 370: Ligne 381:
 judith = Client("Judith", (16218573123863373407, 6385025328607971353)) judith = Client("Judith", (16218573123863373407, 6385025328607971353))
  
-print(f"Le compte actuel de Paul est de {b.compte('Paul')}"+print(f"Le compte actuel de Paul est de {b.credit('Paul')}"
-print(f"Le compte actuel de Judith est de {b.compte('Judith')}")+print(f"Le compte actuel de Judith est de {b.credit('Judith')}")
 t = paul.transaction("Judith", 5) t = paul.transaction("Judith", 5)
 success = b.add_transaction(*t) # * pour ventiler les morceaux du tuple t dans les arguments success = b.add_transaction(*t) # * pour ventiler les morceaux du tuple t dans les arguments
nsi/tds/cryptographie/blockchain.1681234345.txt.gz · Dernière modification : de goupillwiki