Bei dieser Frage geht es darum, IPFS mit Ethereum Smart Contracts zu kombinieren, um Bedingungen und Verschlüsselung zu überprüfen, um den Zugriff einzuschränken.
Eins-zu-eins-Dateifreigabe mit einem bekannten Empfänger ist kein Problem. Der 'Sender' würde die Datei mit dem Pubkey des Empfängers verschlüsseln, sie auf IPFS hochladen und den Hash an den Empfänger senden. Der Empfänger könnte die Datei dann mit seinem Privkey entschlüsseln.
Mein Problem tritt auf, wenn ich mit (mehreren) unbekannten Parteien zu tun habe. Wenn wir IPFS-Hashes mit Ethereum kombinieren, könnten wir beispielsweise den IPFS-Hash an einen Empfänger übertragen, der darauf zugreifen und ihn entschlüsseln möchte, sobald bestimmte Bedingungen erfüllt sind, z. eine Zahlung erfolgt ist. Diese Empfänger sind also vorher nicht bekannt, wir können die Datei nicht mit dem Pubkey des Empfängers verschlüsseln.
Wir können den Entschlüsselungsschlüssel nicht einfach auf der Ethereum-Blockchain speichern, dieser Schlüssel wäre für jeden sichtbar und somit könnten die Leute auf die verschlüsselte Datei auf IPFS zugreifen, ohne z. Zahlung.
Eine Lösung besteht darin, die zu ihren Assets gehörenden Entschlüsselungsschlüssel in einem separaten zentralen Datenspeicher zu speichern, wodurch ein Single Point of Failure für unsere dApp wieder möglich wird.
Ich frage mich also, ob es Lösungen gibt, um dieses Problem zu lösen, z. B. das sichere Speichern der Entschlüsselungsschlüssel in der Kette.
Danke vielmals.
Haben Sie sich Shamirs Secret-Sharing-Algorithmus angesehen? Sie könnten IPFS verwenden, um die Geheimnisse zwischen allen Parteien zu teilen, und die öffentlichen Ethereum-Schlüssel der anderen verwenden, um verschlüsselte Kommunikation miteinander zu senden.
https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing
Wenn Sie nicht unbedingt die Ethereum-Hauptkette verwenden müssen, können Sie unter Verwendung geheimer Verträge eine private Quorum-Blockchain zwischen den Parteien aufbauen https://www.jpmorgan.com/global/Quorum .
Sie sollten sich Proxy- Neuverschlüsselung und Nucypher ansehen .
Im Wesentlichen funktioniert das so, dass Sie einen zufälligen Schlüssel erstellen und Ihre Daten mit diesem Schlüssel verschlüsseln. Anschließend verschlüsseln Sie den Schlüssel mit Ihrem öffentlichen Schlüssel. und stellen Sie diesen verschlüsselten Schlüssel Ihren Daten voran. Wenn Sie Bob dann Zugriff auf die Daten gewähren möchten, erstellen Sie einen Neuverschlüsselungsschlüssel mit seinem öffentlichen Schlüssel und Ihrem privaten Schlüssel. Anschließend senden Sie diesen Neuverschlüsselungsschlüssel an einen Proxy-Dienst. Bob kann dann den verschlüsselten Entschlüsselungsschlüssel, den er vom Anfang der Datei erhalten hat, an den Proxy-Dienst senden. Der Proxy verschlüsselt den Schlüssel mit dem Neuverschlüsselungsschlüssel neu. Dieser neu verschlüsselte Schlüssel erlaubt Bob und nur Bob, den Schlüssel zu entschlüsseln. Sobald der Schlüssel entschlüsselt ist, kann Bob den entschlüsselten Schlüssel verwenden, um die Daten der Datei zu entschlüsseln.
Ich würde wetten, dass es extrem schwierig wäre, das mit Ethereum zu tun. Vor diesem Hintergrund gibt es die folgenden Optionen, die Sie ausprobieren können:
Weder 1 noch 2 ist eine genaue Lösung für Ihr Problem, aber es könnte ein Ausgangspunkt für eine Diskussion sein.
Bob kann den mit seinem öffentlichen Schlüssel verschlüsselten Entschlüsselungsschlüssel in der Blockchain speichern. Wenn Alice mit der Bedingung kommt, dass sie bezahlt hat, liest Bob den verschlüsselten Entschlüsselungsschlüssel aus der Blockchain, entschlüsselt ihn und verschlüsselt ihn erneut mit Alices öffentlichem Schlüssel, um ihn in der Blockchain zu speichern. Was Alice bei Bedarf mit ihrem privaten Schlüssel entschlüsseln kann.
Das Verschlüsseln von Mediendateien nimmt im Allgemeinen viel Rechenleistung und Speicherplatz sowie insgesamt Zeit und Gas in Anspruch. Aber in Anbetracht dessen, was @Kherwa gesagt hat; Sie können den öffentlichen Schlüssel von Alice verwenden, um die Datei zu verschlüsseln und auf IPFS zu speichern. Dies wird die Medien jedoch auf eine einzige Brieftasche beschränken, die Verwendung von nicht fungiblen ERC721-Token könnte dasselbe für Sie tun, jedoch mit zusätzlicher Flexibilität.
In der ersten Situation müssen Sie wissen, wann der Medienverschlüsselungsprozess abgeschlossen ist, und möchten vorzugsweise, dass die IPFS-URL irgendwo mit dem Smart Contract und dem zugehörigen Wallet für einen späteren Abruf gespeichert wird. Ich empfehle Ihnen, eine aktionsbasierte Multi-Contract-Architektur zu verwenden, die nach der Zahlung darauf wartet, dass Ihr Etherium-Orakel nach Abschluss des Verschlüsselungsprozesses zurückruft und Ihnen die Details des IPFS-Standorts sendet. Sie können diese Daten dann in der Vertragstransaktion speichern, sodass Alice ihre Medien jederzeit und überall abrufen kann. Ich glaube, dass dies eine normale sichere Methode sein soll, da die Leute nicht dazu neigen, ihre privaten Schlüssel, auch bekannt als ihre Brieftasche, preiszugeben. Das mögliche Risiko bei dieser Methode könnte darin bestehen, dass jemand seinen privaten Schlüssel veröffentlicht und jeder auf die Inhalte zugreifen kann.
Bei einem nicht fungiblen Token ist die Situation anders. Ein ERC721-Token könnte ein Produkt mit einer eindeutigen ID darstellen. Diese eindeutige ID stellt ein gemeinsames Geheimnis für den Inhalt dar, um zu verhindern, dass das gesamte Geheimnis bekannt wird und damit Missbrauch. Der Vorteil bei all dem besteht darin, dass das Produkt auf eine andere Brieftasche übertragen werden kann, sodass der neue Besitzer auf die Inhalte zugreifen kann. Dies wäre sehr nützlich für viele verschiedene Anwendungen, einschließlich Hardware aller Art. Ich bin mir nicht sicher, wie dies im Moment auf IPFS implementiert werden könnte und ob es irgendeine Art von Zeugen braucht, damit das gemeinsame Geheimnis funktioniert. Obwohl ich immer noch darüber nachdenke, wie man ein solches System implementiert, sehe ich viel Potenzial. Nimm es aber nicht zu ernst.
In beiden Fällen liegt das eigentliche Problem im Endknoten, wenn die Daten der Mediendatei oder des Produkts, wenn Sie so wollen, entschlüsselt und für die Wiedergabe zwischengespeichert werden. Jeder Client, der mit dieser Art der Verschlüsselung umzugehen weiß und den privaten Schlüssel verwenden darf, ist in gewissem Sinne in der Lage, die Medien zu kopieren und sie außerhalb der Kette zu verteilen und zu sehen, wo immer er möchte. Ich glaube daher, dass die vernünftigste Option Live-Streaming-Medien mit einer Art Abonnementstruktur sind oder Leute, die nach privaten Inhalten suchen.
davinci26
Rob Hitchens
Nico
hextet
Niksmac
hextet
Niksmac