Ich habe einen Anwendungsfall, wo ich brauche:
1- Meine Daten sind für die Öffentlichkeit nicht sichtbar.
2- Um die Rechte meiner Kunden/Benutzer zum Anzeigen dieser Daten aus meinem Smart Contract widerrufen zu können.
Wie hat das schon mal jemand gemacht?
Ich habe darüber nachgedacht, meine Daten-Client-Seite zu verschlüsseln / zu entschlüsseln, damit die Daten in der Blockchain niemals klar sichtbar sind und das solide genug erscheint. (Der Client würde den privaten Schlüssel halten)
Aber dann sehe ich nicht, wie ich meine Benutzer daran hindern kann, die Ereignisse für diesen Vertrag mit so etwas wie zu sehen
contractInstance.EventName({x: y}, {fromBlock: 0, toBlock: 'latest'});
oder indem ich Getter direkt von ihrem lokalen Knoten aufrufe, wenn ich ihr Recht widerrufen möchte, es zu sehen.
Ich dachte daran, die Daten in der Blockchain ein zweites Mal neu zu verschlüsseln und sie von meinem Vertrag für die Adresse in einer Art Liste entschlüsseln zu lassen, aber das würde erfordern, dass mein Vertrag den privaten Schlüssel enthält, und das würde effektiv alles unbrauchbar machen.
Gibt es eine andere/bessere Lösung für dieses Problem?
Bearbeiten :
Ein bisschen mehr zu meinem Anwendungsfall, es ist eine Art Registrierung. Ich hoste Daten auf der Blockchain, ich gebe meinen Benutzern mit grundlegenden Rechten das Recht, Daten hinzuzufügen/zu bearbeiten (ich bin Eigentümer des Vertrags und es gibt eine Liste autorisierter Benutzer, die Funktionen zum Hinzufügen/Bearbeiten verwenden können). ,Der Benutzer kann nur seine eigenen Daten bearbeiten, kann aber den gesamten Satz sehen, wenn er abonniert ist.
Ich möchte, dass dieselbe Benutzerliste NUR die Daten lesen kann (abonnementbasiertes System), sodass sie die Daten nach Ablauf des Abonnements nicht mehr lesen können.
Es fällt mir schwer, mir das richtige Design vorzustellen, da das Verschlüsseln der Daten und das Senden an die Blockchain in Ordnung ist, während der private Schlüssel in meinem privat verteilten Client gespeichert ist, aber das würde immer noch bedeuten, dass der Client den Schlüssel zum Entschlüsseln der Daten für immer behält . Oder ich müsste den gesamten Datensatz jedes Mal neu verschlüsseln, wenn ein Client die Sub abmeldet, was nicht realistisch ist.
Sie können niemanden mit Zugriff auf die Blockchain daran hindern, den Status zu lesen und Code auf beliebige Weise auszuführen. Sie können Daten verschlüsseln, aber das hindert die Leute nicht daran, sie zu sehen, sondern sie nur zu interpretieren.
Angenommen, Sie sind damit einverstanden, dass Personen, die das Abonnement beendet haben, auf die Daten zugreifen können, die ihnen bereits zur Verfügung standen – was Sie im Grunde sowieso nicht verhindern können –, gibt es mehrere Möglichkeiten, wie Sie dies erreichen können.
Eine besteht darin, die standardmäßige Verschlüsselung mit öffentlichen Schlüsseln für mehrere Empfänger zu verwenden: Verschlüsseln Sie jede Nachricht mit einem zufällig generierten Schlüssel und verschlüsseln Sie diesen Schlüssel dann mit dem öffentlichen Schlüssel jedes Benutzers, der darauf zugreifen können soll. Wenn ein Benutzer sein Abonnement beendet, entfernen Sie ihn aus dem Satz aktiver Schlüssel. Wenn sich ein neuer Benutzer anmeldet, fügen Sie ihn dem Set hinzu und verschlüsseln Sie die Geheimnisse aller früheren Nachrichten, auf die er zugreifen können sollte.
Eine leichte Variation kann eine einfachere Schlüsselverwaltung ermöglichen: Verwenden Sie einen Schlüssel für jede „Epoche“. Eine Epoche endet jedes Mal, wenn ein Benutzer sein Abonnement beendet. Wenn Sie eine Nachricht einfügen, verschlüsseln Sie sie mit dem aktuellen Epochenschlüssel (stellen Sie sicher, dass Sie auch einen IV verwenden, um Wörterbuch- und Known-Plaintext-Angriffe zu verhindern). Bereitstellung eines Schlüsselspeichers, mit dem Benutzer auf die Epochenschlüssel für jede Epoche zugreifen können, die sie abonniert haben; entweder außerhalb der Kette oder durch Verschlüsselung dieser Schlüssel mit dem öffentlichen Schlüssel jedes Benutzers, der sie verwenden darf.
Werfen Sie einen Blick auf Quorum. Es läuft 'über' ein Ethereum-Netzwerk und macht meistens das, wovon Sie sprechen.
Nick Johnson
jayD
Nick Johnson
Nick Johnson
jayD
Nick Johnson
jordaniac89
nrek