Speichern und Weitergeben verschlüsselter Daten an einen anderen Eigentümer

Ich habe eine ganze Weile über diese Situation nachgedacht und frage mich, ob es eine Möglichkeit gibt, dies auf der öffentlichen Ethereum-Blockchain zu lösen.

Benutzer A speichert einige Daten in irgendeiner Weise verschlüsselt in der Blockchain. (zum Beispiel mit dem privaten Schlüssel von A). Diese Daten sind somit nur für A lesbar. Nun möchte A das Eigentum an diesen Daten wieder verschlüsselt an B „übertragen“ und gleichzeitig sicherstellen, dass die Daten während des Vorgangs nicht manipuliert werden. Das bedeutet, dass die Verschlüsselung nicht Off-Chain stattfinden kann: Erstens kann B seinen privaten Schlüssel aus offensichtlichen Gründen nicht an A senden, aber mehr noch, wenn A die Daten mit dem Schlüssel von B Off-Chain dort neu verschlüsseln würde wäre keine Möglichkeit zu überprüfen, ob die Daten immer noch die gleichen sind.

Ich weiß, dass es keine einfache Möglichkeit gibt, diese Logik mit einem Smart Contract zu implementieren. Das offensichtliche Problem dabei ist, dass Smart Contracts „nicht“ verschlüsseln können, weil Sie ihnen den Schlüssel dafür geben müssen, wodurch die Verschlüsselung von Anfang an unbrauchbar wird.

Abgesehen davon, gibt es eine Möglichkeit, genau diesen Prozess mit anderen Tools zu erreichen und gleichzeitig maximale Sicherheit zu gewährleisten?

Wenn Sie "übertragen" sagen, meinen Sie einen Vorgang, bei dem A nach der Übertragung an B keinen Zugriff mehr hat? Wenn dies der Fall ist, ist dies nicht möglich (obwohl Sie möglicherweise etwas erstellen könnten, durch das A keine zukünftigen Versionen der Daten erhält). Wenn Sie meinen, dass auch B Zugriff haben soll, kann A die Daten mit den öffentlichen Schlüsseln von B mit einem öffentlichen Schlüsselsystem verschlüsseln. Jetzt kann es öffentlich gepostet werden (auch auf einer Blockchain, aber das scheint für große Datenmengen etwas übertrieben zu sein).
@lungj ja, ich meine so, dass A keinen Zugriff mehr auf zukünftige Versionen der Daten hat - auf ältere Versionen könnte noch zugegriffen werden. Was wäre dann ein Ausweg dafür? Vielen Dank!
Am einfachsten ist es wahrscheinlich, wenn A einen Entschlüsselungsschlüssel an B sendet, der mit dem öffentlichen Schlüssel von B verschlüsselt ist, sodass nur B die Nachricht lesen kann. Die verschlüsselten Daten können über einen vertrauenswürdigen oder anderen Kanal an B übertragen werden. B gibt die Daten neu ein. Ohne die Daten zu modifizieren, weiß A, was die Daten sind (weil A einen Entschlüsselungsschlüssel für die mit B geteilte Version hat). Aber wenn die Daten modifiziert werden, kann A ihren Inhalt nicht bestimmen (unter der Annahme, dass ein geeignetes Verschlüsselungsschema ausgewählt wird).
Ich hatte die gleiche Art von Frage: ethereum.stackexchange.com/questions/48540/… keine bessere Antwort gefunden

Antworten (3)

Zunächst einmal werden Informationen mit dem öffentlichen Schlüssel verschlüsselt und mit dem privaten Schlüssel entschlüsselt, nicht umgekehrt (d . h. signieren und verifizieren ).

Beim erstmaligen ASpeichern von Daten Awird ein neues Schlüsselpaar ( privater und öffentlicher Schlüssel) aus dem Hash oder diesen Daten selbst generiert.

Danach Averschlüsselt sie zuerst die Daten mit dem neu generierten öffentlichen Schlüssel und verschlüsselt danach den neu generierten privaten Schlüssel mit ihrem eigenen öffentlichen Schlüssel. Bei der Übertragung Awird der neu generierte private Schlüssel entschlüsselt und mit dem öffentlichen Schlüssel von verschlüsselt .B

Dann Bkann er diesen privaten Schlüssel mit seinem eigenen privaten Schlüssel entschlüsseln und dann Daten mit diesem privaten Schlüssel entschlüsseln und bestätigen, dass es sich tatsächlich um dieselben Daten handelt (da er sie entschlüsseln kann und wenn er falsche Daten in die Blockchain eingibt, wäre sie nicht in der Lage, sie zu entschlüsseln ).A

Jetzt können Sie entscheiden, ob Sie jedes Mal, wenn Daten geändert werden, ein Schlüsselpaar generieren oder das Schlüsselpaar ab der ersten Dateneingabe in der Blockchain verwenden möchten. Und wenn Sie Bden Zugriff darauf beschränken möchten, Awann Bsich die Daten das nächste Mal ändern, müssen BSie nur ein neues Schlüsselpaar aus geänderten Daten generieren.

Der Vertrag benötigt ein Ereignis mit der Zeichenfolge „cryptedPrivateKey“ und der Zeichenfolge „cryptedData“.

Bei der Übertragung geben Sie einfach die BAdresse von neben dem privaten Schlüssel ein, der in einem anderen Ereignis mit dem öffentlichen Schlüssel von Bverschlüsselt wurde .

In dapp werden Sie feststellen, Bob sich seine Adresse im Übertragungsereignis befindet, und versuchen, Daten zu entschlüsseln , und wenn die Übertragung funktioniert, ist sie legitim.

Sie können je nach Bedarf mit public oder private verschlüsseln und mit dem anderen entschlüsseln. (Wir mussten das vor 25 Jahren in der Schule machen)
Es gibt ein Forschungspapier namens SmartDHX, das dies so implementiert, wie Sie es beschrieben haben.

Smart Contracts sollten sensible Daten aus zwei Gründen nicht mit privaten Schlüsseln verschlüsseln:

1.- Um Daten zu verschlüsseln, müssen sie die Daten kennen, und das impliziert, dass sie im Blockchain-Transaktionsdatenfeld öffentlich sind.

2.- Der Smart Contract, der den privaten Schlüssel einer Person verwendet, bedeutet, dass der private Schlüssel als Argument an eine bestimmte Funktion des Vertrags übergeben wird und auch als Transaktionsdatenfeld im Ledger aufgezeichnet wird. Geben Sie niemals private Schlüssel preis.

Es sollte also die DApp oder das Wallet dafür verantwortlich sein, die Daten mit dem öffentlichen Schlüssel des Empfängers zu verschlüsseln (offchain) und sie dann nur als Speicherdienst an den Vertrag zu senden.

Um den Vermögenswert zu übertragen, sollte die Verschlüsselung auch außerhalb der Kette durchgeführt werden, indem die DApp/Wallet die neuen verschlüsselten Daten an den Vertrag sendet.

Danke für deine Antwort. Ich verstehe die 2 Punkte definitiv, da ich hoffte, es in meinem Beitrag deutlich zu machen, und ich hatte bereits den einfachen Ansatz ausgeschlossen, dass der Smart Contract die Verschlüsselung durchführt. Wie kann ich außerhalb der Kette sicherstellen, dass es sich bei den zu entschlüsselnden Daten und den neu gespeicherten verschlüsselten Daten um dieselben Daten handelt? Und wie führt ein Benutzer sowohl die Entschlüsselung als auch die Verschlüsselung mit dem privaten Schlüssel des anderen Benutzers durch?
Die Off-Chain-DApp oder Wallet, die die Verschlüsselung durchführt, sollte die Daten, den ersten öffentlichen Schlüssel und den zweiten öffentlichen Schlüssel kennen. Auf diese Weise kann es die Verschlüsselung für zwei verschiedene Benutzer derselben Daten durchführen und überprüfen, ob das erste Ergebnis mit der vorherigen Version übereinstimmt.
Bedeutet dies, dass, wenn die Wallet/dApp, die für die Off-Chain-Verschlüsselung verwendet wird, von ihren Entwicklern aufgegeben wird, z. B. eine zukünftige Hardfork nicht unterstützt, die „dApp“ nicht mehr funktioniert? Es ist also keine echte dApp?

Ich hatte einen ähnlichen Anwendungsfall ( wie man private Daten in Ethereum speichert ). Das Beste, was ich gefunden habe, ist das Folgende:

Während A Eigentümer der Daten ist, speichert er diese Daten mit seinem öffentlichen Schlüssel auf der Blockchain. Also ist A der einzige, der es entschlüsseln kann.

Wenn A das Eigentum an B überträgt, liest er die Daten und decodiert sie außerhalb der Kette, codiert sie dann mit dem öffentlichen Schlüssel von B neu und speichert sie dann in der Kette ...

Wenn Sie wirklich beweisen wollen, dass es A war, der es getan hat, können Sie dies ganz einfach durch einen Smart Contract tun, indem Sie beispielsweise sicherstellen, dass A die Daten von B gespeichert hat.

Wenn beispielsweise das Eigentum in einem Smart Contract gespeichert ist, kann nur der aktuelle Eigentümer das Eigentum (oder zugehörige Daten) ändern, sodass nur A Daten ändern und B zuweisen kann.