Можно ли получить открытый ключ из адреса ETH?

Цель (не задавая вопрос XY) :

  • отправить ETH на адрес
  • web3.jsскрипт, отслеживающий его и действующий на транзакцию
  • если msg.value > 0.1 etherтогда...
  • ... зашифровать файл с помощью открытого ключа msg.senderи опубликовать в IPFS
  • только исходный отправитель ETH (у него есть закрытый ключ) может расшифровать файл

Глядя на вопрос: как генерируются адреса ethereum?

  1. Начните с открытого ключа (128 символов / 64 байта)

  2. Возьмите хэш открытого ключа Keccak-256. Теперь у вас должна быть строка размером 64 символа / 32 байта. (примечание: SHA3-256 со временем стал стандартом, но Ethereum использует Keccak)

  3. Возьмите последние 40 символов/20 байт этого открытого ключа (Keccak-256). Или, другими словами, отбросить первые 24 символа/12 байт. Эти 40 символов / 20 байт и есть адрес. С префиксом 0x он становится длиной 42 символа.

Открытый ключ для адреса — это односторонняя функция, так как же мы можем спроектировать систему для достижения этой цели?

Ответы (1)

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

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