Как зашифровать строку с помощью закрытого ключа смарт-контракта и расшифровать ее в автономном режиме

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

Я могу написать базовый Solidity, но мне нужна помощь в том, как сделать этот дизайн мудрым.

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

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

Любые советы очень ценятся.

Ответы (1)

Извините, это невозможно сделать безопасно на блокчейне Ethereum со стандартной плотностью, не в этом режиме. Если вам нужно зашифровать с помощью Solidity в смарт-контракте, все переменные, участвующие в разработке, хранятся в/в блокчейне. Формально это можно доказать.

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

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

decrypt (address encryptedData, uint256 key) returns (byte32 decryptedData)

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

У вас может быть что-то полезное по алгоритмам zk-SNARK, см. https://link.medium.com/Gj2AvUVMeR , но это не тривиально и до сих пор не известно подходящей реализации в Solidity и EVM.