Nonce in der Kryptographie: Nonce Covert Channel Attack

Blog_nonce.png

Während einige glauben, dass „nonce“ für „einmal verwendete Zahl“ steht, liegt sein Ursprung wahrscheinlicher im Mittelenglischen, wo „nosse“ sich auf eine einzelne Gelegenheit oder Instanz bezieht. 

Der Nonce spielt eine entscheidende Rolle bei der Gewährleistung der Einzigartigkeit des Hashs jedes Blocks, der als kryptografischer Fingerabdruck und Kennung für den Block dient. Dieser Hash ist für das Wachstum der Blockchain von grundlegender Bedeutung. Miner können Hashwerte manipulieren und möglicherweise mathematische Probleme beim Erstellen neuer Blöcke lösen, indem sie den Nonce anpassen.

Der Wert von Nonces beim Krypto-Mining

Beim Blockchain- Mining , das auf dem Proof-of-Work-Konsensalgorithmus basiert, lösen Netzwerkknoten mathematische Probleme, um der Kette neue Blöcke hinzuzufügen.

Wenn wir in einen Block hineinschauen, um dessen Inhalt zu sehen, finden wir einen Blockheader und eine Liste von Transaktionen. Der Blockheader enthält:

  • der Hash des vorherigen Blocks;
  • der Merkle-Root-Hash (gehashte Transaktionen);
  • ein Zeitstempel;
  • die Mining-Schwierigkeit (eine Zielzahl, die regelmäßig angepasst wird, sodass der Hash-Wert des Blockheaders gleich oder niedriger ist);
  • der Nonce.

Um einen Block zur Kette hinzuzufügen, müssen die Miner nicht nur dessen Hash berechnen. Sie müssen dies so tun, dass das Ergebnis das vom Netzwerk festgelegte Schwierigkeitskriterium erfüllt. Andernfalls würden Blöcke zu schnell hinzugefügt (die Hash-Berechnung ist eine ziemlich einfache Operation) und das Netzwerk wäre nicht in der Lage, rechtzeitig einen Konsens zu erzielen.

Der Nonce wird verwendet, um diese „übermäßige Geschwindigkeit“ zu vermeiden. Wenn der Miner einen Block empfängt, fügt er ihn dem Hash hinzu und berechnet den Hash des resultierenden „Sets“. Wenn das Ergebnis nicht mit dem durch das Schwierigkeitsziel festgelegten Wert übereinstimmt, ändert der Miner den Nonce-Wert und berechnet den Hash neu.

Dieser Ansatz erfordert eine beträchtliche Rechenleistung der Netzwerkknoten, da die Miner buchstäblich Milliarden von Nonces durchsuchen müssen, um die richtige zu finden.

Wenn der richtige Nonce-Wert gefunden ist, erhält man die erforderliche Hash-Summe und der Block wird erstellt. Anschließend wird er mit dem Netzwerk geteilt, damit er von anderen Minern überprüft und, wenn keine Fehler vorliegen, der Blockchain hinzugefügt werden kann. Der Miner, der den neuen Block erstellt hat, erhält eine Belohnung.

Nonces zielen in erster Linie darauf ab, die Generierung identischer Hashes zu verhindern, wenn derselbe Klartext mehrfach mit demselben privaten Schlüssel verschlüsselt wird. Dies verringert das Risiko, dass ein Lauscher durch Frequenzanalyse Erkenntnisse gewinnt. Aber was passiert, wenn dieser Nonce nicht zufällig ist? Schauen wir uns an, wie der Nonce berechnet wird.

Verdeckter Nonce-Kanalangriff

Die Haupttechnologie, die den beiden wichtigsten Kryptowährungen Bitcoin und Ethereum zugrunde liegt, ist der Elliptic Curve Digital Signature Algorithm (ECDSA). 

ECDSA ist eine Methode zum Erstellen digitaler Signaturen, um den Besitz Ihrer Krypto-Assets nachzuweisen. Jede Signatur dient als Beweis für zwei Dinge:

  1. Sie besitzen einen privaten Schlüssel. Jeder private Schlüssel ist mit einem öffentlichen Schlüssel verknüpft. Ihre Krypto-"Adresse" ist im Wesentlichen eine Kurzversion dieses öffentlichen Schlüssels. 
  2. Sie haben Ihren privaten Schlüssel verwendet, um eine bestimmte Nachricht (Transaktion) zu signieren.

ECDSA basiert auf dem Prinzip, dass es einfach ist, aus einem privaten Schlüssel einen öffentlichen Schlüssel zu generieren, es jedoch fast unmöglich ist, aus einem öffentlichen Schlüssel einen privaten Schlüssel abzuleiten. Es gibt jedoch bestimmte begrenzte Bedingungen, unter denen Sie die Signatur einer Transaktion verwenden können, um den privaten Schlüssel zu entschlüsseln. Es könnte etwas technisch werden, aber wir erklären es.

Zur Generierung von Signaturen verwendet ECDSA einen privaten Schlüssel ( d ), eine Zufallszahl ( k ) und den Hash einer Nachricht (h). Diese werden mit Q, dem mit dem privaten Schlüssel verknüpften öffentlichen Schlüssel ( d ), und zwei im ECDSA-Algorithmus standardisierten Zahlen, G und n , kombiniert . Diese Elemente arbeiten in einem speziellen Algorithmus zusammen, um eine digitale Signatur zu berechnen.

r = k * G mod n

s = {h + d * r}/{k} mod n

Der Nonce-Wert

Die Zufallszahl  k  in ECDSA-Signaturen ist entscheidend und muss vertraulich bleiben, da sie nur einmal verwendet werden darf. Aus diesem Grund wird sie auch als Nonce bezeichnet. Angenommen, ein Angreifer entdeckt den Nonce, der für eine bestimmte Signatur verwendet wird. In diesem Fall kann er den privaten Schlüssel aufdecken, der zum Signieren dieser Nachricht verwendet wurde. Durch etwas Algebra kann die folgende Formel hergeleitet werden.

d = (s*kh)*r^(-1) mod n

Wenn ein Nonce für zwei verschiedene Signaturen wiederverwendet wird, wird der private Schlüssel, der zum Signieren dieser Signaturen verwendet wird, ebenfalls angreifbar. Auch hier können wir den verwendeten Nonce mithilfe einiger algebraischer Berechnungen aus der folgenden Gleichung ableiten.

k = (h1-h2)*(s1-s2)^(-1) mod n

Wie können Sie die Wiederverwendung von Nonce erkennen?

Denken Sie an die Formel zur Generierung von r im ECDSA-Algorithmus: r = k * G mod n . Da G und n Konstanten sind, ist die einzige Variable, die sich zwischen Signaturen ändert, k, die Zufallszahl. Wenn k also für zwei Nachrichten wiederverwendet wird, haben ihre Signaturen dasselbe r. Aus diesem Grund sollte k niemals wiederverwendet werden.

Wenn wir dies wissen, können wir wiederverwendete ECDSA-Nonces in Ethereum-Transaktionen identifizieren, indem wir nach zwei Transaktionen vom selben Konto mit demselben r , aber unterschiedlichen s- Werten suchen.

Wie Tangem Wallet Sie vor dem verdeckten Nonce-Kanalangriff schützt

Der Nonce für ECDSA wird in einer zertifizierten (CC EAL5+) Bibliothek von Samsung mithilfe eines zertifizierten Hardware-Zufallszahlengenerators generiert; wir können den Nonce in keiner Weise beeinflussen – wir können ihn nicht einmal erkennen.

Wenn eine Wallet ohne Seed-Phrase erstellt wird, werden dasselbe TRNG-Modul und dieselben zertifizierten Bibliotheken zum Generieren privater Schlüssel verwendet. Dies gilt für alle Arten von Tangem Wallets, wenn keine Seed-Phrase vorhanden ist (die empfohlene Option). In diesem Szenario geschieht alles innerhalb der Karte (das TRNG-Modul ist Teil des Chips) und es werden keine externen Daten verwendet. Der ECDSA-Nonce verlässt die Tangem-Karte nie und wird geheim gehalten.

Nonce im Blockchain-Explorer

Der Nonce in einer Transaktion ist nur ein Zufall bei der Namensgebung. Es handelt sich um die Sequenznummer der Transaktion (sichtbar in jedem Blockchain-Explorer), die zum Schutz vor Replay-Angriffen (der Möglichkeit, dieselbe Transaktion zu wiederholen) in der Blockchain verwendet wird. Es ist Teil der Daten, die in der Transaktion signiert sind. Daher hängt es einfach von der Anzahl der vorherigen Transaktionen ab und wird aus dem aktuellen Status der Blockchain abgeleitet, unabhängig vom TRNG und der Tangem-Karte.

Einzelne Adressen im Tangem Wallet

Auch wenn die Nichtwiederverwendung von Adressen dazu führen kann, dass die Wiederverwendung von Nonces für Bitcoin und andere UTXO-basierte Blockchains kein Problem darstellt, löst dies das Problem im Allgemeinen nicht. Kontobasierte Blockchains wie Ethereum sind für die Verwendung mit einem einzigen Schlüsselpaar konzipiert und haben in ECDSA-Signaturen immer noch denselben Nonce, während zum Schutz vor Transaktionswiederholungen ein völlig anderer Nonce verwendet wird. Diese Arten von Blockchains erfordern also ohnehin eine ordnungsgemäße Nonce-Generierung.


Mit dem richtigen TRNG von Tangem Wallet müssen Sie sich keine Sorgen machen, dass es versehentlich zweimal denselben Nonce generiert. Die Wahrscheinlichkeit ist ähnlich hoch wie bei der versehentlichen Generierung desselben privaten Schlüssels wie bei Ihnen – es ist praktisch unmöglich.