Symmetrisch verschlüsselte Daten sicher zum Vertrag senden?

Hey, ich habe mich gefragt, was die beste Technik wäre, um verschlüsselte Daten an einen Vertrag zu senden, die später entschlüsselt werden können, entweder vom ursprünglichen Benutzer oder vom Vertrag selbst, aber von niemand anderem.

Meine derzeit beste Vermutung ist, ein Schlüsselpaar mit CryptoJS/Forge zu erstellen und es mit dem öffentlichen Schlüssel zu verschlüsseln und dann den privaten Schlüssel sicher aufzubewahren, bis die Nachricht entschlüsselt werden kann. Ich vermute, dass der private Schlüssel sofort nach der Entschlüsselung offengelegt wird. Müsste ich also für jedes Ereignis, das diese Verschlüsselung erfordert, ein neues Schlüsselpaar generieren?

Ich habe noch nie CryptoJS oder Forge oder andere browsersymmetrische Verschlüsselungen verwendet. Ich habe mich gefragt, wie ich das sicher abziehen kann.

Antworten (2)

Ihre beste Vermutung ist ziemlich genau richtig. Wenn Sie erwarten, dass der Vertrag die Entschlüsselung durchführt, müssen Ihr geheimer und privater Schlüssel dafür offengelegt werden. Wenn dies akzeptabel ist, können Sie für jedes gespeicherte Geheimnis neue Schlüsselpaare generieren.

Wenn Sie nur das Geheimnis speichern und außerhalb des Vertrags entschlüsseln möchten, könnten Sie wahrscheinlich damit einverstanden sein, dieselben Verschlüsselungsschlüssel mehrmals zu verwenden.

Wie Sie vorschlagen, kann Ihr Vertrag nicht entschlüsselt werden, ohne den Schlüssel (und den neu entschlüsselten Klartext) der Welt zugänglich zu machen. Auch der Rest der Welt wird Ihren Schlüssel vor Ihrem Vertrag sehen können, da die Leute ihn aus der Transaktion erhalten können, bevor er abgebaut wird.

Wir können möglicherweise hilfreicher sein, wenn Sie uns etwas mehr darüber erzählen, was Sie erreichen möchten.

Ok, ich möchte ein "Spiel" einrichten, das verschlüsselte Informationen enthält, bis alle Benutzer eine Wahl getroffen haben. Der Vertrag ist dann in der Lage, diese Informationen zu entschlüsseln und die Ergebnisse offenzulegen. Gibt es eine Möglichkeit, dies zu tun, ohne jedes "Spiel" neue Schlüsselpaare zu generieren? Vielleicht eine Kombination aus PGP + Ethereum-Schlüsselpaaren?
Sie sprechen davon, dass das Spiel die Informationen enthält, aber wenn die Benutzer ihre eigenen Schlüssel besitzen, können sie auch ihre eigenen Informationen besitzen, oder? Wenn Sie möchten, dass sie sich zu Informationen verpflichten, lassen Sie sie in der ersten Runde den Hash der Informationen und dann in der Enthüllungsrunde den Klartext senden. Ihr Vertrag kann den Hash neu erstellen, um zu überprüfen, ob der richtige Klartext gesendet wurde.
Yaa idealerweise halten sie ihre eigenen Informationen. Welchen Verschlüsselungsalgorithmus würden Sie für diesen Fall verwenden? Oder wäre dies mit elliptischen Kurvenschemata wie der Funktion encrypt_message() von Parity oder so etwas wie bitcore-lib + ECIES machbar?
Wenn Benutzer ihre eigenen Informationen aufbewahren, bis sie sie preisgeben und dann im Vertrag veröffentlichen, benötigen Sie überhaupt keine Verschlüsselung. Hashen Sie einfach den Klartext und senden Sie den Hash an den Vertrag. Senden Sie dann in der Offenlegungsphase den Klartext an den Vertrag.