Надежно отправлять симметрично зашифрованные данные по контракту?

Эй, мне было интересно, какой лучший метод будет для отправки зашифрованных данных в контракт, который впоследствии может быть расшифрован либо первоначальным пользователем, либо самим контрактом, но не кем-либо еще.

Мое лучшее предположение сейчас — создать пару ключей с помощью CryptoJS/Forge и зашифровать ее с помощью открытого ключа, а затем надежно удерживать закрытый ключ, пока сообщение не будет готово к расшифровке. Я предполагаю, что закрытый ключ будет раскрыт, как только вы расшифруете, поэтому мне нужно будет генерировать новую пару ключей для каждого события, требующего этого шифрования?

Я никогда не использовал CryptoJS или Forge или любое симметричное шифрование браузера, мне было интересно, как я могу безопасно осуществить это?

Ответы (2)

Ваша лучшая догадка в значительной степени точна. Если вы ожидаете, что контракт выполнит расшифровку, ваш секретный и закрытый ключ должны быть раскрыты для этого. Если это приемлемо, вы можете создать новые пары ключей для каждого секрета, который вы храните.

Если вы просто хотите сохранить секрет и расшифровать его вне контракта, вы, вероятно, можете использовать одни и те же ключи шифрования несколько раз.

Как вы предполагаете, ваш контракт не может быть расшифрован без раскрытия ключа (и недавно расшифрованного открытого текста) миру. Кроме того, остальной мир сможет увидеть ваш ключ раньше, чем ваш контракт, потому что люди смогут получить его из транзакции до того, как он будет добыт.

Возможно, мы сможем быть более полезными, если вы расскажете нам немного больше о том, чего вы пытаетесь достичь.

Хорошо, я хотел бы настроить «игру», которая хранит зашифрованную информацию, пока все пользователи не отправят свой выбор. Затем контракт может расшифровать эту информацию и раскрыть результаты. Есть ли способ сделать это без генерации новых пар ключей в каждой «игре». Возможно, комбинация пар ключей PGP + Ethereum?
Вы говорите об игре, которая хранит информацию, но если у пользователей есть свои собственные ключи, то они также могут хранить свою собственную информацию, не так ли? Если вы хотите, чтобы они передали информацию, попросите их отправить хэш информации в первом раунде, а затем открытый текст в раунде раскрытия. Ваш контракт может воссоздать хеш, чтобы проверить, что они отправили правильный открытый текст.
В идеале они хранят свою информацию. Какой алгоритм шифрования вы бы использовали для этого случая? Или это будет выполнимо со схемами эллиптических кривых, такими как функция четности encrypt_message() или что-то вроде bitcore-lib + ECIES?
Если пользователи хранят свою информацию до тех пор, пока они не раскроют ее, а затем не опубликуют ее в контракте, вам вообще не нужно шифрование. Просто хешируйте открытый текст и отправьте его в контракт, а затем на этапе раскрытия отправьте открытый текст в контракт.