Какой рекомендуемый способ передачи секрета в Solidity?

Привет, я новичок в Ethereum, просто пробую кое-что.

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

Каков рекомендуемый способ реализации смарт-контракта, который показывает определенные значения по определенному адресу? Могу ли я зашифровать свое сообщение открытым ключом (адресом) предполагаемого получателя? И позволить получателю расшифровать сообщение своим закрытым ключом? Как бы я сделал это в Solidity?

Спасибо

Связано: Текущие методы отправки зашифрованных сообщений из контрактов

Ответы (1)

In the case where it is acceptable to perform the encryption and decryption off-chain, follow these four steps:

  1. Off-chain, use an encryption library to encrypt the message using the recipient's public key associated with their Ethereum address. An example of how to this: How to encrypt a message with the public-key of an Ethereum address

  2. Submit an Ethereum transaction invoking a method on your contract to store the encrypted message in a contract state variable.

  3. After the transaction confirms, the recipient can make a (non-transaction) call to read the state variable contents from the contract.

  4. Off-chain, the recipient uses their Ethereum private key to decrypt the message.

Note that only step 2 modifies the blockchain.

How would I do that in Solidity?

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

Кроме того, я не знаю, возможно ли это в настоящее время. Операции с эллиптическими кривыми сложны и требуют много газа. В грядущем хардфорке Metropolis новые предварительно скомпилированные контракты обеспечат газосберегающие реализации операций на эллиптических кривых (см. EIP 213 ). Это должно позволить вам реализовать расшифровку в Solidity. Но в этот момент раскрывается закрытый ключ, поэтому трудно придумать вариант использования, который имел бы смысл.