Codex32: Ein Shamir Secret Sharing Verfahren
Blockstream Research

Codex32: Ein Shamir Secret Sharing Verfahren

Andrew Poelstra

Seit 2020 spiele ich neben Blockstream Research mit der Idee einer Kryptographie ohne elektronische Computer. Das ist keine neue Idee: Die gesamte Geschichte der Kryptographie bis zum 20. Jahrhundert verlief so. Aber die moderne Kryptographie mit hundertstelligen Zahlen und komplexen Algorithmen nutzt seit jeher Computer. Und das aus gutem Grund: Computer können Vorgänge in einer Milliardstelsekunde ausführen, für deren Ausführung Menschen eine Minute brauchen würden.

Eine milliardenfache Verlangsamung ist das geringste Problem für ein manuell berechenbares Kryptosystem. Menschen sind nicht nur langsam; sie können sich auch nur eine begrenzte Anzahl präziser Anweisungen gleichzeitig merken, sie haben begrenzte Geduld, solche Anweisungen zu lesen, und es fällt ihnen schwer, langwierige Berechnungen durchzuführen. Auch machen Menschen häufig Fehler, selbst bei Dingen, die sie schon oft erfolgreich getan haben.

Wie sich herausstellt, können wir trotz der Komplexität der Verwaltung geheimer Daten viele Vorgänge mithilfe von Arbeitsblättern und einfachen Werkzeugen, die ausgedruckt und ausgeschnitten werden können, immer noch manuell durchführen.

Heute veröffentlichen wir Codex32: A Shamir Secret Sharing Scheme, eine neue Broschüre, die im Blockstream-Store erhältlich ist. Codex32 enthält heraustrennbare Arbeitsblätter zum Berechnen von Prüfsummen und zum Weitergeben von Geheimnissen, Papiercomputer, die ausgeschnitten und zusammengebaut werden können, ein Arbeitsblatt zum Entfernen von Verzerrungen bei Würfelwürfen und wunderschöne Kunstwerke von Micaela Paez und M. Lufti' As'ad.

Wir werden untersuchen, was der Kodex bewirkt, aber zunächst wollen wir uns mit der Frage befassen, die Sie seit dem ersten Satz dieses Beitrags beschäftigt: Wozu?

Die Prämisse hinter Codex32 besteht darin, dass Sie zwecks Ableitung von Bitcoin-Adressen einen BIP-32-Master-Seed generieren, seine Prüfsumme bilden und ihn aufspalten.

Warum manuelle Berechnung?

Elektronische Computer sind ziemlich erstaunlich. Sie können Berechnungen viel schneller als Menschen durchführen, ohne Fehler, und das über Jahre hinweg ohne Pause oder Langeweile. Doch übermenschliche Geschwindigkeit bedeutet, dass ihr Handeln von Menschen nicht wirklich kontrolliert werden kann.

Das ist kein rein philosophisches Problem. Dieses Problem ist der Grund, warum wir eine milliardenschwere Cybersicherheitsbranche und die Open-Source-Software-Bewegung haben. Aus diesem Grund bestehen Sicherheitsforscher darauf, dass Wahlmaschinen Papieraufzeichnungen erstellen, die von Hand gezählt werden können. Computer können mit Schadsoftware infiziert sein, ihr Code könnte bösartig sein, sie können geheime Daten über Nebenkanäle preisgeben oder Dinge nicht löschen, und sie können fehlerhaft sein. Diese Probleme sind bei Software nahezu unlösbar, gelten aber auch für Hardware, wo für die Verifizierung komplexe Tools und Fachwissen erforderlich sind. Und wie in The Age of Surveillance Capitalism (Die Ära des Überwachungskapitalismus) ausführlich beschrieben, arbeiten selbst Computer, die „richtig funktionieren“, wahrscheinlich den Interessen ihrer Benutzer zuwider.

Jedes Mal, wenn Sie Hardware austauschen oder Software aktualisieren, treten all diese Bedenken erneut auf. (Wenn Sie Ihre Software nicht aktualisieren, wächst sie einfach unbegrenzt.) Bei Updates besteht auch das Risiko, dass Kompatibilitätsprobleme auftreten, sodass auf Ihre Daten nicht mehr zugegriffen werden kann.

In unserem täglichen Leben akzeptieren wir diese Dinge meist als Kosten der Zugehörigkeit zu einer digitalen Gesellschaft, aber wenn es um die geheimen Schlüsseldaten geht, die einen Inhaber Vermögenswert wie Bitcoin steuern, können diese Kosten zu hoch sein.

Wenn wir mit Stift und Papier rechnen, können wir sicher sein, dass keine geheimen Daten irgendwo auftauchen, wo wir sie nicht hingeschrieben haben. Wir können unsere eigenen Zufallsdaten auf transparente Weise erstellen. Wir können wählen, wie lange wir für die Durchführung verschiedener Vorgänge benötigen möchten, was das Timing von Angriffen verfälscht. Wir können sicher sein, dass unsere Prozesse kompatibel bleiben, solange unsere Anweisungen irgendwo geschrieben, vielleicht ausgedruckt und in einem Safe aufbewahrt werden. Und diese Sicherheiten sind nicht nur real, sie fühlen sich auch real an und geben uns einen Seelenfrieden, den elektronische Computer niemals erreichen können.

Brain Wallets und Papier Wallets

Diese Ideen erinnern die Leser möglicherweise an einige alte Ideen, die in den BitcoinTalk-Foren herumschwirren. Zum Beispiel ein „Paper Wallet“, bei dem ein Nutzer einen Seed (oder privaten Schlüssel) auf ein Blatt Papier schreibt und diesen offline speichert. Metallgeräte wie Cryptosteels oder ColdTi sind natürliche Erweiterungen dieser Idee, die Naturkatastrophen oder überflutete Keller mit viel größerer Wahrscheinlichkeit überstehen.

Die Offline-Speicherung von Seed-Daten ist eine gute Idee, um die Sicherheit Ihrer Bitcoin-Bestände zu erhöhen. Es wird empfohlen, ein metallisches Medium zu verwenden, obwohl säurefreies Papier an einem trockenen und feuerfesten Ort auch funktionieren kann. Bei einer solchen Speicherung gibt es einen Kompromiss zwischen der Erstellung von mehr Kopien (erhöht das Diebstahlrisiko) oder weniger (erhöht das Verlustrisiko). Der Codex gibt Benutzern mehr Freiheit bei diesem Kompromiss, indem er ihnen ermöglicht, ihre Daten in mehrere Teile aufzuteilen, sodass die Originaldaten nur wiederhergestellt werden können, wenn genügend davon zusammengeführt werden.

Eine weitere Idee aus derselben Zeit ist die eines „Brain Wallet“ (oder Brainwallet), in dem der Benutzer seine geheimen Daten auswendig lernt, anstatt sie physisch zu sichern. Davon raten wir dringend ab. Ein Problem dabei besteht darin, dass Benutzer dazu ermutigt werden, schwache Seed-Wörter zu wählen, die zu kurz oder zu stark strukturiert sind oder die in gedruckter Literatur vorkommen. Selbst wenn solche Seeds auf verschiedene Weise optimiert und gesteuert werden, verfügen sie nicht über genügend Entropie, um einem Angreifer mit großer Rechenleistung standzuhalten. Einer der frühesten Bitcoin-Betrügereien war eine Website, die den Benutzern „helfen“ sollte, solch schwache Seeds für die Verwendung mit Brain Wallets herzustellen.

Das Problem besteht letztendlich darin, dass es schwierig ist, sich sehr zufällige Dinge zu merken. Die Struktur, die gebräuchliche Phrasen, Gedichte und Kurzgeschichten so einprägsam macht, macht es Angreifern auch leichter, Ihre Wörter zu erraten.

Das zweite Problem bei Brain Wallets besteht darin, dass das menschliche Gedächtnis fehlbar ist. Es ist leicht, uns selbst davon zu überzeugen, dass wir hochintelligente Menschen sind, deren Gedächtnis nicht versagen würde. Aber Intelligenz hilft nicht, wenn Sie sich den Kopf stoßen, Fieber bekommen, ein Trauma erleben oder einfach nach ein paar Jahren die Motivation verlieren, Ihr Erinnerungsauffrischungsritual durchzuführen.

Der richtige Weg, Seed-Daten zu generieren, besteht darin, mindestens 128 Bit gleichmäßig zufälliger Daten zu erzeugen, und der richtige Weg, sie zu speichern, erfolgt außerhalb eines Gehirns. Der Kodex bietet eine Möglichkeit, solche Daten durch Würfeln und Anwenden eines Von-Neumann-Extraktors zu erzeugen, um Verzerrungen zu beseitigen. Es gibt andere Möglichkeiten, gute Seeds aus Würfeln zu gewinnen, die oft als Diceware bezeichnet werden.

Wie viel geht tatsächlich manuell?

Lassen Sie uns vor diesem Hintergrund die verschiedenen Dinge besprechen, die Benutzer möglicherweise mit ihren Seed-Backups tun möchten.

  • die Integrität des Backups überprüfen.
  • sicherstellen, dass sich die vom Backup kontrollierten Münzen nicht bewegt haben.
  • das Backup neu aufspalten, wenn es sich um ein geheimes, gemeinsam genutztes Backup handelt.
  • eine neue Wallet aus dem Backup wiederherstellen oder initialisieren.

Einige Benutzer möchten möglicherweise auf die „neue Wallet“ verzichten und einfach alles auf Papier erledigen. Leider gibt es derzeit keine Möglichkeit, Adressen abzuleiten oder Transaktionen ohne den Einsatz von Elektronik zu signieren. Die oben genannten Aufgaben sind jedoch möglich

Integrität des Backups überprüfen. Langzeitspeichermedien können beschädigt oder abgenutzt werden, sodass sie nicht mehr lesbar sind. Es gibt einen Mechanismus zum Erkennen und Beheben einer kleinen Anzahl unabhängiger Fehler, der als Fehlerkorrekturcode oder Prüfsumme bezeichnet wird. Der Codex stellt Arbeitsblätter bereit, mit denen Benutzer Prüfsummen für ihre Daten erstellen und überprüfen können. Wenn die Prüfsumme stimmt, ist alles in Ordnung. Wenn nicht, wissen Sie, dass Sie einen Fehler gemacht haben. Das Erstellen einer Prüfsumme dauert 30–60 Minuten und muss zweimal durchgeführt werden, um beim ersten Mal gemachte Fehler zu erkennen. Die Überprüfung einer Prüfsumme nimmt genauso viel Zeit in Anspruch und muss nur einmal durchgeführt werden..Sicherstellen, dass sich die Coins nicht bewegt haben. Ein Offline-Backup kann nicht viel tun, um den Status der Blockchain zu überprüfen. Verwenden Sie stattdessen eine Nur-Lesen Online-Wallet, um die Blockchain auf jede Bewegung Ihrer Münzen zu überwachen, ohne jemals Zugriff auf geheime Daten zu benötigen

Backup (neu) aufspalten. Dies ist die interessanteste und leistungsstärkste Funktion von Codex32. Der Codex stellt die Werkzeuge zur Verfügung, um ein Geheimnis auf mehrere Teile aufzuspalten, sodass das Geheimnis von einer bestimmten Anzahl von ihnen wiederhergestellt werden kann. Typische Schwellenwerte sind 2 oder 3. Besitzt ein Angreifer weniger Anteile, erfährt er nichts über das Geheimnis

Bei Codex32 besteht der Prozess darin, dass ein Benutzer eine Schwellwert Anzahl zufälliger Anfangsteile generiert und dann anhand dieser Teile nach Bedarf weitere Teile ableitet, insgesamt bis zu 31. Wenn genügend Teile vorhanden sind, können sie später das Geheimnis rekonstruieren.

Der Ableitungsprozess stellt sicher, dass, wenn Ihre anfänglichen Teile über gültige Prüfsummen verfügen, die abgeleiteten Teile und das endgültige Geheimnis automatisch ebenfalls über gültige Prüfsummen verfügen. Das bedeutet, dass Sie Ihre anfänglichen Teile erstellen, ihre Prüfsummen berechnen, zusätzliche Teile ableiten und ihre Prüfsummen überprüfen können – und wenn Ihnen während dieses langwierigen Prozesses Fehler unterlaufen, wird dies im Prüfsummen-Arbeitsblatt erkannt.

Das Ableiten von Teile dauert etwa 5–10 Minuten pro Eingabe Teil und die abschließende Prüfsummenprüfung dauert 30–60 Minuten.

Wiederherstellen oder Initialisieren einer Wallet. Wallets können Codex32-Teile verwenden, um sich selbst zu initialisieren. Der Prozess ist weitgehend derselbe wie bei bestehenden Arbeitsabläufen, die Seed Wörter verwenden

Derzeit gibt es einen offene Pull-Request an Bitcoin Core zur Unterstützung von Codex32, der in der in Bails verwendeten Core-Version enthalten ist. Mehrere andere Wallets haben ihre Absicht bekundet, Codex32 irgendwann zu unterstützen, darunter Blockstream Green, Anchorwatch und Liana. Die technischen Schwierigkeiten einer solchen Unterstützung sind vergleichbar mit den Schwierigkeiten bei der Unterstützung von Segwit-Adressen im Jahr 2016, nur dass sie einfacher sind, da Codex32 einen Großteil der gleichen Logik wiederverwendet.

Was kommt als Nächstes?

Der unmittelbare nächste Schritt für Codex32 besteht darin, die Wallet-Unterstützung zu verbessern. Dies bedeutet, die Rust-Codex32-Bibliothek zu verbessern und zu polieren und Unterstützung in BDK einzuführen.

Wir möchten auch eine Fehlerkorrekturlogik implementieren und die Codex32-Website erweitern, um dies sowie weitere interaktive Funktionen zu unterstützen. Für die Fehlerbeseitigung sind derzeit Computer erforderlich. Zumindest für einzelne Fehler planen wir jedoch eine manuelle Korrektur mit Hilfe von Nachschlagetabellen.

Der Kodex enthält Anweisungen zum Aufspalten und Prüfen von Geheimnissen. Aber es bietet nicht viele Hinweise darauf, was als nächstes zu tun ist: Teile an Personen zu verteilen, denen Sie vertrauen, und einen Zeitplan zur Überprüfung ihrer Integrität zu erstellen.

Wir würden den Leuten gerne empfehlen, ihre Anteile jedes Jahr zu verifizieren, aber der aktuelle Prozess ist mühsam einzurichten: Sie müssen die Anweisungen noch einmal lesen, vielleicht neue Papiercomputer zusammenbauen und dann 30–60 Minuten für die Verifizierung aufwenden. Und wenn dies fehlschlägt, müssen Sie mangels Fehlerkorrekturtabellen alles noch einmal machen. Es handelt sich also nicht um eine realistische Empfehlung.

Wir haben jedoch eine Lösung im Sinn: Quickchecks sind teilweise Prüfsummenprüfungen, die immer noch 99,9 % der Fehler erkennen und auf einem einzigen Blatt Papier zusammengefasst werden können (Anweisungen, Nachschlagetabellen usw.). Es gibt sieben Quickchecks, die zusammen einer vollständigen Prüfsummenüberprüfung gleichkommen. Benutzer können viele Kopien des vollständigen Satzes mit ihren Teilen speichern; Dann schnappen sie sich jedes Jahr einfach die nächste Seite, folgen den Anweisungen zum Ausfüllen (was 10–15 Minuten statt 30–60 Minuten dauert) und vernichten sie.

Im Moment existieren Quickchecks nur als Mathematik. Wir müssen noch die Arbeitsblätter erstellen, Parameter optimieren und Anweisungen ausarbeiten.

Die oben genannten Pläne erfordern ein wenig Arbeit, aber wir haben einige grossartige Ideen für künftige Forschung. Ist es möglich, aus einem bestimmten Seed Hashes zu berechnen, um zusätzliche Seeds abzuleiten, wie dies in BIP 32 der Fall ist? Ist es möglich, eine Multiplikation mit elliptischen Kurven durchzuführen, die die Ableitung von Adressen und die Signierung von Transaktionen ermöglichen würde? Ist es möglich, Verschlüsselungs- oder Handshaking-Protokolle durchzuführen? Zum jetzigen Zeitpunkt wissen wir es eigentlich noch nicht.

If you have specific preferences, please, mark the topic(s) you would like to read: