In einem früheren Artikel haben wir unsere Leser mit wenigen wichtigen Eigenschaften einer Blockchain bekannt gemacht und kurz erklärt, wie eine Anwendung diese vorteilhaft ausnutzt. Einige dieser Eigenschaften würden einen riesigen Nachteil mit sich bringen, wenn wir zusätzliche Instrumente nicht reingebracht hätten.
In diesem Artikel erläutern wir, welche Verschlüsselung wir zusätzlich zu der für eine Blockchain üblichen Private- und Public-Key-Verschlüsselung verwenden und wie eine Anwendung diese nutzt, um Vorteile aus den Nachteilen zu ziehen.
Pedersen-Commitments
„Ein Commitment-Verfahren ist ein kryptographisches Zwei-Parteien-Protokoll, das es einer Partei ermöglicht, sich gegenüber der anderen Partei auf einen Wert festzulegen, ohne etwas über diesen Wert zu verraten. Später kann dieser Wert dann aufgedeckt werden.“ (https://de.wikipedia.org/wiki/Commitment-Verfahren).
Das Verfahren der Pedersen-Commitments ist eine Erweiterung des allgemeinen Verfahrens.
Durch die Verwendung der Pedersen-Commitments schafft man es bei einer Anwendung gewisse Informationen zwischen zwei beteiligten Parteien auszutauschen, ohne dass einer der unbefugten Parteien aus demselben Netzwerk über den Klartext erfährt. Dabei bleibt die vollständige Validierung der Transaktionen durch das komplette Netzwerk erhalten.
Das geniale an dieser Verschlüsselungsart ist, dass die Summe der Geheimtexte gleich dem Geheimtext der Summe der Klartexte ist, nämlich:
PC(a, f1) + PC(b, f2) = PC(a + b, f1 + f2)
Wobei die Funktion PC die Verschlüsselungsfunktion ist, und einen Hash-Wert nach der Berechnung ergibt. Die beiden Blinding-Faktoren f1 und f2, die in die Berechnung des geheimen Textes mit reinfließen. Die Blinding-Faktoren kennen nur die beiden befugten Parteien. Die einzelnen Geheimtexte aus der linken Seite der Gleichung kennt jeder, aber ohne die Klartexte a und b zu kennen. Die Klartexte kennen ebenfalls nur die beiden befugten Parteien.
Ohne den Betrag im Klartext sowie den Blinding-Faktor zu kennen, ist es nicht möglich den Hash von einem Pedersen-Commitment zu berechnen. Aus dem Hash den Betrag und den Blinding-Faktor zu errechnen, geht ebenfalls nicht, da die Commitment-Funktion sowohl eine surjektive (mehrere Werte können gleichen Hash ergeben) als auch eine irreversible Funktion ist, nämlich eine nicht umkehrbare Funktion.
Im einfacheren Beispiel wird gleich erklärt, ohne in die Detailtiefe des Anwendungsfalles zu gehen, mit welchem Prinzip diese Verschlüsselung in einer Anwendung ermöglicht, ohne die Beträge offen zu legen, die Validierung der Transaktion vorzunehmen:
Der Knoten 1 schließt einen Vertag mit dem Knoten 2 ab. Der Knoten 1 schuldet für die Leistung 100 €. Diese beiden Parteien kennen den Betrag. Der Knoten 1 übermittelt dem anderen seinen generierten Blinding-Faktor 20 und teilt mit jedem Teilnehmer der Blockchain das berechnete Pedersen-Commitment PC ( 100 €, 20 ). Einige Zeit später kommt es zu einem neuen Vertrag. Diesmal schuldet 1 nochmal 200€ für die Leistung. Auch diesmal wird der generierte Blinding-Faktor 30 dem Knoten 2 übermittelt und das PC ( 200 €, 30 ) wird jedem mitgeteilt.
Nun kommt es zum Zeitpunkt der Auszahlung. Der Knoten 2 erinnert den Knoten 1 über den auszuzahlenden Betrag in Gesamthöhe von 300 € und veröffentlicht die Information über das Commitment der Summe PC ( 100 € + 200 €, 20 + 30 ) im gesamten Netzwerk. Das Netzwerk kennt einzelne Commitments und bestätigt somit die gesamte auszuzahlende Summe.
In einem weiteren Artikel wird auch konkret beschrieben, wie genau diese Verschlüsselung verwendet, in unterschiedlichen Blockchain-Use-Cases eingesetzt werden kann und wie die einzelnen Konsortien untereinander sicher kommunizieren, da die Validierung nicht beeinträchtigt ist, trotz dass die Klartexte geheim bleiben.