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?
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 A
Speichern von Daten A
wird ein neues Schlüsselpaar ( privater und öffentlicher Schlüssel) aus dem Hash oder diesen Daten selbst generiert.
Danach A
verschlü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 A
wird der neu generierte private Schlüssel entschlüsselt und mit dem öffentlichen Schlüssel von verschlüsselt .B
Dann B
kann 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 B
den Zugriff darauf beschränken möchten, A
wann B
sich die Daten das nächste Mal ändern, müssen B
Sie 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 B
Adresse von neben dem privaten Schlüssel ein, der in einem anderen Ereignis mit dem öffentlichen Schlüssel von B
verschlüsselt wurde .
In dapp werden Sie feststellen, B
ob sich seine Adresse im Übertragungsereignis befindet, und versuchen, Daten zu entschlüsseln , und wenn die Übertragung funktioniert, ist sie legitim.
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.
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.
lungj
el-flor
lungj
weich