Шифровать данные с помощью открытого ключа

У меня есть три поля данных в форме, которая вернет строку. Я хотел бы хэшировать значение этих трех строк и сохранить его в блокчейне. Однако данные в этих трех строках являются конфиденциальными, и я хочу, чтобы только человек, имеющий доступ к закрытому ключу открытого ключа, которым он был зашифрован, мог видеть данные. Есть ли способ сделать это. На данный момент я использую sha256()функцию Solidity для хеширования и сохранения ее в сопоставлении, но так же любой может расшифровать ее и получить данные, которые я сохранил.

Ответы (2)

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

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

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

SHA256 предназначен для хеширования , а не для шифрования. Никто не может «расшифровать» что-то из хэша. (Но, как упоминалось выше, если вы хешируете смарт-контракт, значит, вы уже поделились открытым текстом, поэтому никому не нужно ничего «расшифровывать».)

Итак, если я зашифрую данные с помощью открытого ключа получателя и сохраню эти зашифрованные данные в блокчейне (через вызов функции надежности). Тогда как я могу получить эти зашифрованные данные из солидности и расшифровать их, используя закрытый ключ получателя (метамаска). Спасибо за вашу помощь
Я не уверен, о какой части вы спрашиваете. На стороне Ethereum в этом нет ничего… контракт хранит байты, а затем получатель извлекает их. Для автономного кода, который выполняет шифрование и дешифрование, вы можете использовать любую криптографию, которую вы хотите для этого.
Таким образом, мое приложение будет хранить данные медицинской справки в блокчейне. Врач войдет в свою учетную запись, заполнит поля, а также выберет, кто может просматривать сертификат, введя свой открытый ключ. После нажатия кнопки «Отправить» поля данных будут зашифрованы с использованием предоставленного открытого ключа, а зашифрованное сообщение будет сохранено в эфириуме. Зашифрованное сообщение также будет отправлено по электронной почте работодателю. Таким образом, работодатель затем перейдет на веб-платформу, введет зашифрованное сообщение и, войдя в систему с помощью метамаски, сможет просмотреть детали.
Похоже, вы хотите повторно использовать пары ключей Ethereum для шифрования. Это возможно, но не очень просто... при обычном использовании Ethereum открытый ключ пользователя не раскрывается (за исключением его восстановления из подписанной транзакции). MetaMask не предоставляет методов шифрования или дешифрования, а также не предоставляет простого способа получить закрытый ключ пользователя для самостоятельного выполнения дешифрования.

Я делал это несколько раз, а также создал учебник, см. здесь, чтобы сделать это в javascript: https://github.com/pubkey/eth-crypto/blob/master/tutorials/encrypted-message.md

Выглядит хорошо, но можем ли мы на самом деле получить доступ к закрытому ключу от подключенного пользователя внутри Dapp для части расшифровки? Звучит как проблема.
@gneric очень хороший вопрос ... из децентрализованного приложения у вас нет доступа к закрытому ключу (по уважительной причине), так как это может работать? Может быть, вы можете вызвать некоторые функции с помощью web3 для метаска для расшифровки сообщения?
@Suisse Да, на самом деле в то время я занимался исследованиями. Именно метамаска personal_sign, подписывает сообщение, с ключами, что держит.
@gneric, значит, возможно, что пользователь 1 может зашифровать сообщение «привет» ->, чтобы только другой конкретный пользователь 2 (и пользователь 1) мог расшифровать сообщение?
нет, я так не думаю, у пользователя 2 не будет ключа дешифрования (pk пользователя 1) для восстановления сообщения.
один из способов — использовать симметричное шифрование. Все стороны могут использовать один и тот же сгенерированный ключ и делиться им вне цепочки для расшифровки сообщений друг друга. research.csiro.au/blockchainpatterns/general-patterns/…