Was sind eigentlich Zero-Knowledge-Proofs?
Zwischen all dem On-Chain-Rauschen gibt es aber ein Thema, bei dem sich wirklich alle Köpfe drehen: Zero-Knowledge-Protokolle (Zero-Knowledge-Proofs). Eine Schlüsseltechnologie in der Schlüsseltechnologie, könnte man sagen. Höchste Zeit für eine Erklärung.
Was ist ein Zero-Knowledge-Proof?
Grob vereinfacht sind Zero-Knowldege-Protokolle und Zero-Knowledge-Proofs Mechanismen, mit denen Person A Person B beweisen kann, dass sie etwas weiß. Allerdings ohne das Wissen an sich preiszugeben.
In der Fachterminologie würde man sagen: Bei Zero-Knowledge-Proofs geht es darum, dass eine Partei, ein Prover, einer anderen Partei, einem Verifier, beweisen kann, dass sie über eine bestimmte Information verfügt. Der Knackpunkt dabei ist, dass der Prover das tut, ohne die Information an sich zu verraten.
Damit ein Beweismechanismus als Zero-Knowledge-Protokoll gilt, muss er folgende Kriterien erfüllen:
- Vollständigkeit: Wenn die Aussage, die der Prover macht, stimmt, wird sie einen ehrlichen Verifier überzeugen.
- Zuverlässigkeit: Wenn die Aussage des Prover falsch ist, kann sie den Verifier nicht damit überzeugen.
- Null-Wissen (Zero-Knowledge): Wenn die Aussage stimmt, erfährt der Verifier nicht mehr, nur dass die Aussage des Prover stimmt.
Ein Beispiel aus dem Alltag: James Bond (Prover) ist pleite, weil er betrunken mit seinem Aston Martin einen Unfall gebaut hat. Aus der Not heraus will er Informationen an den russischen Geheimdienst (Verifier) verkaufen. Der russische Geheimdienst würde sagen: „Beweise uns erstmal, dass du die Informationen hast. Zeig sie uns, dann kommen wir vielleicht ins Geschäft.“ James Bond wird das nicht wollen, weil der russische Geheimdienst die Informationen dann ja schon gesehen hat und womöglich nicht mehr kauft. Für James Bond wäre es praktisch, wenn es einen Weg gäbe, zu beweisen, dass er die Informationen hat, ohne die tatsächlichen Informationen preiszugeben.
Matthew Green, ein Professor der John Hopkins Universität, erklärt den Zweck von Zero-Knowledge-Proofs mit Passwörtern. In der Regel funktionieren Passwörter so: Wir tippen ein Passwort, das nur wir kennen, bei einem Login ein. Die Website nutzt eine Hash-Funktion, um aus unsere Eingabe einen Hash-Wert zu errechnen. (Ein Passwort aus Buchstaben kann dann zum Beispiel zu einer eindeutigen Zahlenfolge verrechnet werden.) Dann vergleicht sie den Hash-Wert der Eingabe mit dem gespeicherten Hash-Wert. Wenn die Hash-Werte übereinstimmen, geht die Website davon aus, dass wir das richtige Passwort eingegeben haben.
Das Problem bei dem Vorgang ist nur, dass wir beweisen, dass wir das Passwort kennen, indem wir es als Ganzes an die Website beziehungsweise den Server schicken. Server können gehackt werden. Unser Passwort kann verloren gehen.
Bei einem Zero-Knowledge-Proof würden wir der Website beweisen, dass wir das Passwort kennen, ohne das eigentliche Passwort zu verraten. Die Website würde dabei nichts über uns erfahren, außer, dass wir das Passwort kennen. Sie hätte null Ahnung, zero knowledge, sozusagen.
Müssen Zero-Knowledge-Proofs immer kompliziert und digital sein?
Zero-Knowledge-Proofs müssen nicht immer digital sein, aber ein bisschen muss man sich den Kopf schon zerbrechen. Der Mathematiker Jean-Jacques Quisquater hat allerdings schon mal einen Artikel unter dem Titel „Wie man seinen Kindern Zero-Knowledge-Protokolle erklärt“ veröffentlicht.
Ein einfaches Beispiel, um ein Zero-Knowledge-Protokoll zu erklären, sind zwei verschiedenfarbige Bälle – der Kryptologe Konstantinos Chalkias erklärt das ungefähr so: Stell dir vor, du (Prover) hast eine blinde Freundin (Verifier) sowie einen blauen und einen roten Ball. Bis auf die Farbe sind die Bälle identisch. Du willst der Freundin beweisen, dass du selbst zwischen den Bällen einen eindeutigen Unterschied erkennst, obwohl sie ihn nicht sehen kann. Du bittest deine blinde Freundin also, beide Bälle hinter dem Rücken zu halten und in einer Weise zu tauschen, die nur sie kennt. Dann hält sie die Bälle wieder vor sich, und du sagt ihr, welcher Ball rot und welcher Ball blau ist. Beim ersten Mal könnte es noch ein Zufallstreffer sein. Aber je öfter ihr die Prozedur wiederholt, desto sicherer wird deine Freundin sein, dass du wirklich den einen Ball zweifelsfrei von dem anderen Ball unterscheiden kannst und sie somit verschiedenen Farben haben.
Ganz in der Tradition klassischer Philosophie gibt es natürlich auch ein paar Höhlen-Beispiele. Wer selbst mal ein Zero-Knowledge-Protokoll ausprobieren möchte: Vom MIT gibt es auch ein Beispiel zum Mitmachen.
Ok, ich hab’s verstanden. Aber warum sind diese Zero-Knowledge-Proofs jetzt plötzlich wichtig?
Abgesehen von James Bond interessiert sich vor allem die Krypto-Szene für Zero-Knowledge-Proofs: Viele Krypto-Netzwerke wie Bitcoin oder Ehtereum sind nicht anonym, sondern pseudonym. Die Konten und Transaktionen sind öffentlich einsehbar. Man weiß nur nicht, wer den Schlüssel für die jeweiligen Konten hat. Mittlerweile gibt es allerdings Methoden, herauszufinden, wem welches Konto gehört, und das hat für einige Nutzer zu Problemen geführt.
Auch traditionelle Banken interessieren sich sehr für Krypto-Währungen. Viele ihrer Kunden fänden es aber bestimmt nicht so lustig, wenn ihre Konten öffentlich einsehbar wären. Daher haben zum Beispiel Banken wie JPMorgan in ihrer Blockchain Quorum und ING angefangen, mit Zero-Knowledge-Protokollen herumzuhantieren.
Aber bei Zero-Knowledge-Protokollen geht es nicht nur um anonyme Transaktionen. „Blockchain-basierte Anwendungen leiden unter hohem Rechen- und Speicheraufwand, die sich negativ auf die Skalierbarkeit auswirken“, schreiben die Blockchain-Forscher Eberhard und Tai in einem Artikel. Zero-Knowledge-Proofs könnten diese Anwendungen effizienter machen.
Wo kommt der Begriff her?
Die ersten, die den Begriff in einem wissenschaftlichen Umfeld prägten, waren Wissenschaftler des MIT in den 1980er Jahren. Shafi Goldwasser, Silvio Micali und Charles Rackoff ging es um ein theoretisches System, in dem eine Partei (Prover) einer andere Partei beweist, dass eine mathematische Aussage richtig ist.
Zero-Knowledge-Proof-Erklärwettbewerb
Zugegebenermaßen sind Zero-Knowledge-Proofs etwas abstrakt und nicht so einfach zu erklären. Falls jemandem eine bessere Erklärung einfällt, freuen wir uns, darüber in den Kommentaren zu lesen. Das beste ausgedachte Beispiel belohnen wir mit einem „Digital Pioneers“-T-Shirt.
Ein weiteres Beispiel:
Mein Hund Bobbi, der seit kurzem im Wohnzimmer schlafen muss, hat sich in der Nacht einen Knochen aus dem Vorratsschrank geholt. Den möchte er auch eigentlich nicht mehr weggeben.
Als ich morgens aufwache, stelle ich fest das Bobbi seine Pfote auf dem Knochen hat. Da dieser aber splittert, biete ich Bobbi an, den Knochen gegen etwas Käse aus dem Kühlschrank zu tauschen.
„Woof woof wooooof woof woof?“, was soviel bedeutet wie: Woher weiß ich das du wirklich Käse hast?“
Ich schaue ihn an und sage „Vertraust du mir nicht“? Damit verstand er, das ich nicht lüge (Hunde sind loyal, gehen für ihr Herrchen durch die Hölle und sind sowieso die besseren Menschen).
Er stand auf, kam gemächlich zum Kühlschrank, nahm den Käse und rannte damit wieder in sein Körbchen. Nun hat Bobbi einen Knochen und Käse.
Die Moral von der Geschicht: Einen Beagle traut man nicht (wenn’s ums Essen geht ;-)). Und Hunden sind Zero Knowledge Proofs egal!
#truestory #ichwilldastshirtgewinnen
Hallo zusammen,
interessanter Artikel. Jedoch ist mir eines noch nicht klar geworden:
Hier wird gut und lange beschrieben WAS ein Zero-Knowledge-Proof ist – Hab ich kapiert.
Allerdings geht mir nicht ganz hervor WIE er funktioniert. Da gibt es das Beispiel mit dem Ball – macht Sinn. Aber heißt das, dass die Funktionsweise allgemein darauf beruht, dass Vorgänge bzw. test solange wiederholt werden, biss sie als glaubwürdig erscheinen?
LG
…und funktioniert es bei dem Ball nicht auch nur, weil das Mädchen den Ball sowieso nicht sehen kann? In dem Moment wo ich ihr zeige welcher Ball der Richtige ist, weiß Sie ja auch, welcher Ball welcher ist. Aber genau das will ich doch eigentlich nicht …. oder?
Man nehme ….
ein normales unverfälschtes Kartenspiel mit 52 Karten. Nun nimmt man eine Karte heraus ohne sie zu zeigen. Die Herz 9.
Jetzt muss man beweisen, dass es eine rote Karte ist ohne die Karte zu zeigen. Das heisst man muss einen Beweis über ein Wissen führen ohne dieses Wissen zu veröffentlichen. Ein typischer Zero-Knowledge-Proof.
Die Lösung ist recht einfach in diesem Falle, denn man braucht dem Verifier – also den Zuschauern – nur die schwarzen Karten aus den Spiel geben. Wenn es alle 26 schwarzen Karten sind, dann muss die eine, die man hat zwingend eine rote sein. Damit ist der Bewies erbracht und keiner der Zuschauer weiss, welche rote Karte man hat.
Joe Martin – https://blockchain-mythen.de/
Mhhhm aber in dem Fall haben die anderen ja alle Karten … Und aus den restlichen roten könnte man doch schließen dass eine der zwei roten 9er – in dem Fall das Herz – fehlt …. Oder verstehe ich da was falsch
Als ich mich vor einem halben Jahr intensiv mit Verschlüsselungsverfahren auseinander gesetzt habe bin ich auf den folgenden Artikel gestoßen: https://hackernoon.com/eli5-zero-knowledge-proof-78a276db9eff
Imho die am besten verständliche Erklärung.
Zero-Knowledge-Proofs sind ein sehr spannendes Konzept. Häufig jedoch auch aufwendig in der Erzeugung wie z.B. zkSNARKs und damit für „schnelle“ Proofs nicht wirklich nutzbar (wenn wenige Sekunden für einen Proof erfüllt werden müssen).
ERKLÄRWETTBEWERB
Mein Beispiel hier:
Ich (Prover) möchte einem Interessenten für mein Haus (Verifier) beweisen, dass mir das Haus, das ich verkaufen will, auch wirklich gehört. Allerdings ohne meine eigenen Unterlagen im dafür zu zeigen (Grundbucheintrag, Kaufvertrag, etc.). Die will ich nicht digital verschicken.
Wie kann er mir also vertrauen und wissen, dass es wirklich stimmt?
Anstelle die Daten offenzulegen, könnte ich ihm mit einer Bestätigung von einem Notar, Grundbuchamt, etc. beweisen, dass es so ist, ohne die genauen Daten offenzulegen. Somit hat er den Beweis, ohne dass ich meine Daten weitergeben musste.
Da auf der Blockchain auch evtl. Notare, Ämter vertreten sein könnten, könnte die somit gleich miteinbezogen werden.
Ein kleiner Fehler durch die Autokorrektur. Im 2. Satz muss es natürlich heißen „ihm“ und nicht „im“.
Was soll denn auf dieser Bestätigung stehen? Wenn nicht deine Daten, woher weiß der Interessent dann, dass du es verkaufen kannst? Er weiß bestenfalls nur, dass es das Haus gibt, aber nicht, dass du der Eigentümer bist.
Der Gedanke dabei ist, dass die Bestätigung mit mir sozusagen verknüpft ist. Auf der Bestätigung steht dann drauf, dass das Haus existiert und ich der Eigentümer bin. Mehr Daten werden ja nicht weitergegeben.
Ein Beispiel für einen Anwendungsfall der Zero-Knowledge-Proof:
Klaus, ein 25-jähriger Student aus Köln, möchte hochprozentigen Wodka im Internet bestellen. Da das Gesetz die Abgabe von Alkohol an Minderjährige untersagt, muss Klaus über einen Zero-Knowledge-Proof dem Online-Shop bestätigen, dass er Volljährig ist. Sein eigentliches Alter wird dabei nicht veröffentlicht und bleibt geheim.
Das ist ein typisches (Public) Blockchain Szenario. Wenn seine Identität auf einer Pubic Blockchain hinterlegt ist, kann über einen smart contract einfach bestätigt werden, dass er über 18 Jahre alt ist ohne, dass weitere Daten bekannt gegeben werden. Solche Anwendungsfälle gibt es zu tausenden.
Muss die Polizei z.B. wissen, wer ich bin in einer Verkehrskontrolle oder nur, ob ich Alkohol getrunken habe und ob ich eine gültige Fahrerlaubnis habe. Muss der Türsteher meinen Ausweis mit Namen sehen oder reicht es nicht, wenn ich beweisen kann, dass ich über 18 Jahre alt bin. Und so weiter und so weiter…
Zero Knowledge Proofs auf einer Public Blockchain werden unsere Welt massiv verändern.
Der Artikel erklärt zwar gut was Zero-Knowledge-Proofs sind (zumindest kann ich mir daraunter jetzt etwas vorstellen), allerdings überhaupt nicht wie sie in der Parxis funktionieren könnten (z.B. am Besiepil der Passwörter).
Das Bälle Beispiel hat ein Problem, denn die Blinde Frau muss dafür die Bälle haben. Ohne diese Funktioniert es nicht. Somit hat die Blinde Frau durchaus wissen, nur halt kein vollständiges. Referenziert eher zum Passwort Hash da hier der Server auch Informationen hat um die Eingabe zu verifizieren, nur im besten Fall keine vollständige (klartext). Ansonsten hätte mich auch sehr die technischen Aspekte interessiert um solche Probleme zu lösen.
Mich erinnert das etwas an die alte Praxis, alphabetisch sortierte Buchstabenketten wissenschaftlicher Artikel zu veröffentlichen, bevor man den eigentlichen Text veröffentlichte, um später beweisen zu können, dass man „der/die Erste“ war.
Für den Teaser dieses Artikels („In der Blockchain-Szene gibt es gerade kein heißeres Thema als Zero-Knowledge-Protokolle und Zero-Knowledge-Proofs. Was also ist das, wozu ist das gut und warum ist das wichtig? Eine Erklärung.“) wäre die passende Zero-Knowledge-Aussage demnach:
„Aaaaaaaaaaäbbcccdddddddddeeeeeeeeeeeeeeeeeeeeefggggggghhhhiiiiiiiiiiikkkkkkllllllllmmnnnnnnnnnnoooooooooooopprrrrrrrrrrsssssssssssssßttttttttuuuuuuwwwwwwzzzz“
Dies stellt einen aber vor das gleiche Problem wie das Passwort-Hashwert-Beispiel. Um zu wissen, dass die Buchstabenfolge tatsächlich die gewünschten Informationen und nicht den neuesten IPCC-Bericht abbildet, muss der Empfänger oder zumindest eine „Autorität“ den Inhalt kennen, um ihn verifizieren zu können.
Eine Aussage, die ich mit dieser Variante jedoch mit hoher Wahrscheinlichkeit beweisen kann, ist lediglich, dass es sich bei meinen Informationen um einen (in diesem Falle) deutschen Text handelt – schließlich kommen ä und ß vor. In längeren Texten käme noch die sprachspezifische Verteilung der Buchstaben zum Tragen (wenige y im Deutschen, viele y im Englischen).
Das Beispiel mit den Bällen ist falsch, weil hier genau die Info kommuniziert wird, die ja geheimgehalten werden soll, nämlich die Farbe. Beim Zero-Knowledge-Proof soll es ja darum gehen, die Info nicht offen zu legen. Das Kartenbeispiel ist noch das Anschaulichste. Wobei ich mir nicht sicher bin, ob es streng genommen nur „Nicht-Schwarz“ und nicht „rot“ beweist.
Gibt es hier einen Mathematiker? Der Zero-Knowledge-Proof ist doch eine äquivalente Bedingung, oder? Ein Mathematiker hätte hierfür bestimmt ein Beispiel.
hm, hatte falsch gelesen, er will ja seine Sehkraft beweisen, nicht die Farbe. Dann passt das Beispiel mit den Bällen annähernd…
„NIcht-Schwarz“ entspricht „rot“, weil die Parameter fest gelegt sind. Deshalb funktioniert das Beispiel in einer deterministischen Umgebung. Der Schlüssel ist „normales unverfälschtes Kartenspiel mit 52 Karten“ (unverfälscht) und das legt die Bedingungen fest.
Das Passwort Hashing ist kein Beispiel von Zero-Knowledge-Proof, da es ungehasht an den Server gehen muss. Der Server hat nur den Hash des Passwords gespeichert. Er hasht dann das übermittelte Password und vergleicht diesen Wert mit dem in seiner Datenbank.
Würde der Nutzer den Hash des Passwords übermitteln und der Server diesen Wert mit dem in seiner Datenbank vergleichen, würde der Hash zum eigentlichen Password. Ein Angreifer, der die Hashes in der Datenbank des Servers gestohlen hat, könnte sich dann mit diesen Hashes einloggen. Genau dies möchte man aber mit dem Hashing verhindern.
Zero-Knowledge-Protokolle sind schwer zu erklären. Und es ist noch schwerer, gute Beispiele dafür zu finden. Aus Sicht der Redaktion haben alle Erklärungskommentare ihre Stärken und es ist nicht leicht zu sagen, welcher der beste ist. Wir fanden allerdings Patrick Schmitz Hund am unterhaltsamsten, und erklären ihn damit zum Gewinner nach Humor-Punkten.
Worin besteht der Unterschied zur klassischen Challenge-Response-Authentifizierung, bei der die Seiten nur einen Hash speichern (https://en.wikipedia.org/wiki/Challenge%E2%80%93response_authentication#Password_storage) ?
Hier mein Versuch einer Erklärung:
Ich (Prover) möchte meiner Oma ein Paket schicken. Ihr Leibwächter (Verifier) gibt es nur an sie weiter, wenn er ganz sicher sein kann, dass das Paket von mir ist.
Zum eigentlichen Inhalt lege ich eine bestimmte Menge eines radioaktiven Materials (wir nehmen ausnahmsweise an, dass es für die Umgebung unbedenklich ist).
Ich schicke das Paket zu einer bestimmten Uhrzeit los, diese Uhrzeit und die augenblickliche Radioaktivität schreibe ich mir auf. Der Leibwächter teilt mir die Uhrzeit des Paketempfangs mit, misst in diesem Augenblick die Radioaktivität und fragt mich nach der Stärke der Radioaktivität. Anhand der vergangenen Zeit kann ich nun wieder die jetzt etwas schwächere Radioaktivität berechnen und übermittle den Wert an den Leibwächter. Der Vergleich und die Übereinstimmung identifiziert mich als Absender. Zur Erhöhung der Sicherheit könnte man jedesmal einen anderen radioaktiven Stoff verwenden…
Nun kann Oma sich freuen…..