как я могу вставить произвольный хэш sha256 в блокчейн?

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

Есть ли простой способ сделать это, просто отправив транзакцию и предоставив ее майнерам организовать для меня ее попадание в блокчейн?

Один из способов, который приходит мне в голову, заключается в том, что я могу рассматривать хеш как закрытый ключ (bitaddress.org сообщит мне адрес и закрытый ключ, соответствующие любому заданному вводу) и отправить биткойн на соответствующий адрес. Затем, когда я публикую документ, любой может пройти тот же процесс и увидеть дату транзакции в блокчейне.

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

Ответы (5)

Вы можете кодировать любые произвольные данные, используя команды OP_PUSH и OP_DROP сценария Биткойн. Однако для этого вам понадобится какой-нибудь пользовательский биткойн-клиент, так как стандартный не позволяет отправлять подобные сообщения.

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

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

Спасибо. Теперь, когда на bitaddress.org добавлена ​​вкладка «мозговой кошелек», я думаю, что проще всего просто вставить хэш документа (или даже весь документ, если он достаточно короткий) во вкладку мозгового кошелька и внести монету на полученный адрес. Затем, если мне нужно доказать, что документ существовал в то время, я могу направить людей на bitaddress.org для его проверки.

Один из способов вставить произвольный хэш SHA-256 в блокчейн — использовать его для генерации адреса Bitcon, а затем отправить на этот адрес очень небольшое количество биткойнов. Биткойн-вики хорошо освещает фактический процесс генерации адреса из закрытого ключа ECDSA здесь и здесь .

Однако, если вы предпочитаете не выполнять вычисления вручную, есть полезная утилита командной строки под названием bitcoin-tool. Предположим, мы хотим сгенерировать биткойн-адрес из хэша SHA-256 строки «test»:

$ ./bitcoin-tool \
  --input-file <(echo -n "test" | openssl dgst -sha256 -binary) \
  --input-format raw \
  --input-type private-key \
  --network bitcoin \
  --output-type all \
  --public-key-compression uncompressed
address.hex:00b311d5766f9623408747554bcdec1d8dc05eeaf0
address.base58:13VhJywL2p5upGoXpU3RvECR7Heoq
address.base58check:1HKqKTMpBTZZ8H5zcqYEWYBaaWELrDEXeE
public-key-ripemd160.hex:b311d5766f9623408747554bcdec1d8dc05eeaf0
public-key-ripemd160.base58:3VhJywL2p5upGoXpU3RvECR7Heoq
public-key-ripemd160.base58check:HKqKTMpBTZZ8H5zcqYEWYBaaWELuen1WX
public-key-sha256.hex:c8d47a3b796bce36d80dd2e8622ce1bcc4eab1f4a78e8cd3e12b7db44d1c428a
public-key-sha256.base58:EWxTRzHpLN7GjXx6nwqDWJ6DSmrNTVYroZ2VdC7fg8Gq
public-key-sha256.base58check:2XSw67i599jF6FWxAApzSy2xBec9HrNCT7ZqWUo5dFhkqoDeQ3
public-key.hex:045f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca54ba511b8b782bc5085962412e8b9879496e3b60bebee7c36987d1d5848b9a50
public-key.base58:PPBn9d92VkgAZeSLkWyyRSzZusyAaR79PQEjVGX2UoXqHxmgEmr1BvJBYtXXux6TrytQ7FtYqAV2h7TxuMN1sxH5
public-key.base58check:3XTsV9raUUfajGdt6HibXREKMHXkZBQY6BLs9NSVGfE63GRFzKeBYQzCRVQzkkAQhnDkry1S6DdSXpmshbGuL73oiRr6Rs
private-key-wif.hex:809f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
private-key-wif.base58:fD8GVhUgAUmnrJPuyfqkUMDCk3RueN9bTskWv8nEsDWYF
private-key-wif.base58check:5K2YUVmWfxbmvsNxCsfvArXdGXm7d5DC9pn4yD75k2UaSYgkXTh
private-key.hex:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
private-key.base58:Bjj4AWTNrjQVHqgWbP2XaxXz4DYH1WZMyERHxsad7b2w
private-key.base58check:2DFtpKRbW2nfrzgAgE25onW3vwCQwM7S1iHk34LW9cwH1kzmHp

Затем мы отправим небольшое количество биткойнов по адресу, указанному в третьей строке: 1HKqKTMpBTZZ8H5zcqYEWYBaaWELrDEXeE. Конечно же, этот адрес видел много активности на протяжении многих лет. Неудивительно, что он имеет нулевой баланс. Если бы кто-то отправил монеты на этот адрес, мы бы смогли их потратить, так как у нас есть закрытый ключ.

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

$ ./bitcoin-tool \
  --input-file <(echo -n "test" | openssl dgst -sha256 -binary) \
  --input-format raw \
  --input-type private-key \
  --network bitcoin \
  --output-type all \
  --public-key-compression compressed
address.hex:005ec7f2d15a1f20eab67d60f09effca58b43eee9f
address.base58:12Kb2TaC79MfRSvRsaivP8eUWQYUW
address.base58check:19eA3hUfKRt7aZymavdQFXg5EZ6KCVKxr8
public-key-ripemd160.hex:5ec7f2d15a1f20eab67d60f09effca58b43eee9f
public-key-ripemd160.base58:2Kb2TaC79MfRSvRsaivP8eUWQYUW
public-key-ripemd160.base58check:9eA3hUfKRt7aZymavdQFXg5EZ6KD5ucx5
public-key-sha256.hex:2ad1722dab79ddc2bb3a7b7fe3b397176bda623ad9ad94ca52022aa44f5213c9
public-key-sha256.base58:3t9Mnijb12wM4TYXj4jgAAUyMgK6o9eUbqwWTruXPeRN
public-key-sha256.base58check:KrjTuGpsnRCbBDsP4UGYKa2SeFhDAfWLruDUeEQMtTPyTLqaV
public-key.hex:025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca
public-key.base58:htT5U6vHyh8jy39y6AuJuRDH95z23Q1VgRpNmTBK2aPb
public-key.base58check:5cYvx6NBYNdcJUym9WydRRs6329UTzJgzKii8dESmw2ZXwAYnt
private-key-wif.hex:809f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a0801
private-key-wif.base58:3ueX5Pff9rqahNbn8q8SAsiCrpyiwMvLw7d153XLgCeDNtp
private-key-wif.base58check:L2ZovMyTxxQVJmMtfQemgVcB5YmiEDapDwsvX6RqvuWibgUNRiHz
private-key.hex:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
private-key.base58:Bjj4AWTNrjQVHqgWbP2XaxXz4DYH1WZMyERHxsad7b2w
private-key.base58check:2DFtpKRbW2nfrzgAgE25onW3vwCQwM7S1iHk34LW9cwH1kzmHp

Обратите внимание, что полученный адрес отличается: 19eA3hUfKRt7aZymavdQFXg5EZ6KCVKxr8. Тем не менее, это по-прежнему такой же действующий биткойн-адрес, и на протяжении многих лет он также проявлял некоторую активность , хотя и не так сильно, как адрес, связанный с несжатым ключом.

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

private-key.hex:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
private-key.base58:Bjj4AWTNrjQVHqgWbP2XaxXz4DYH1WZMyERHxsad7b2w
private-key.base58check:2DFtpKRbW2nfrzgAgE25onW3vwCQwM7S1iHk34LW9cwH1kzmHp

Тем не менее, вы должны быть осторожны при преобразовании необработанных закрытых ключей в адреса, так как вы можете легко получить разные адреса.

До сих пор мы рассмотрели преобразование произвольного хэша SHA-256 в закрытый ключ, но мы также можем преобразовать его в открытый ключ. Это может быть более подходящим для публичных доказательств. Например, если вы публикуете документ и хотите, чтобы другие могли убедиться, что он существовал до определенного момента времени, вы можете взять хэш SHA-256 этого файла, преобразовать его в открытый ключ, а затем отправить небольшое количество биткойнов на соответствующий адрес. На самом деле есть такой пример из жизни. Изис Агора Лавкрафт, главный разработчик Tor Project , подвергалась преследованиям со стороны ФБР. Об этом она сообщила в своем блоге . В посте она написала:

В случае, если ФБР ищет данные о пользователях Tor или мостах Tor, и особенно в случае, если повестка в суд окажется запечатанной или сопровождаемой NSL: исходное опубликованное содержимое этого поста заархивировано в виде PDF-файла здесь , а RIPE160 (SHA256 (PDF)) равен 5541405e08048658cf457b3c59bf42a51f84a1a3 и, следовательно , биткойн-адресу 18mnc4BCud3vjAdLbCc3QhyrjN84VTT1iM , чтобы подтвердить криптографически верифицируемым образом то, что я опубликовал до этого момента времени.

В этом случае хэш SHA-256 PDF-файла был преобразован в несжатый открытый ключ, который мы можем проверить следующим образом:

$ ./bitcoin-tool \
  --input-file <(curl https://fyb.patternsinthevoid.net/blog.patterns-in-the-void-2016-04-30.pdf | openssl dgst -sha256 -binary) \
  --input-format raw \
  --input-type public-key-sha \
  --network bitcoin \
  --output-type address \
  --output-format base58check \
  --public-key-compression uncompressed
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 4022k  100 4022k    0     0  1228k      0  0:00:03  0:00:03 --:--:-- 1229k
address.hex:005541405e08048658cf457b3c59bf42a51f84a1a3
address.base58:12Bta5yx2FwcU7yg2B6V3u9HFFWGS
address.base58check:18mnc4BCud3vjAdLbCc3QhyrjN84VTT1iM
public-key-ripemd160.hex:5541405e08048658cf457b3c59bf42a51f84a1a3
public-key-ripemd160.base58:2Bta5yx2FwcU7yg2B6V3u9HFFWGS
public-key-ripemd160.base58check:8mnc4BCud3vjAdLbCc3QhyrjN84WuGgTg
public-key-sha256.hex:0e4498fb5f299159452f97f9113edfb7dbb3973859f96c22c874dc7dafbdcb27
public-key-sha256.base58:xhNoGDN2QGu7J3bf8aYM8xrvuvJcuEBqQQGZwqsfraz
public-key-sha256.base58check:7HTSYwK5m87PyqNaAKz9H87PAzubhzP2ev9LoAxZcCvQjqcXA

Конечно же, public-key-ripemd160.hex:5541405e08048658cf457b3c59bf42a51f84a1a3соответствует опубликованному значению RIPE160(SHA256(PDF))и address.base58check:18mnc4BCud3vjAdLbCc3QhyrjN84VTT1iMсовпадает с опубликованным биткойн-адресом. Наконец, депозит в размере 0,001 BTC на этот адрес 01.05.2016 доказывает, что адрес существовал на эту дату. Поскольку для создания PDF-файла постфактум (т. е. для сопоставления с существующим биткойн-адресом) потребуется, по крайней мере, успешная атака прообразом полного раунда SHA-256, сочетание этих фактов выходит за рамки любого разумного (криптографически информированного) сомневаюсь, что рассматриваемый документ существовал по крайней мере еще 01 мая 2016 г.

Хотя я понимаю искушение повторно/злоупотреблять блокчейном для таких вещей, почему бы не использовать специально созданный для этого сервис? Посмотрите на guardtime.com, в частности на http://www.guardtime.com/software/developer-tools/

Пожалуйста, проверьте этот инструмент временных меток блокчейна , он бесплатно делает именно то, что вам нужно (этот блокчейн имеет 0 комиссий за запись этих данных), и технически лучше.

Ссылка не работает.

Невозможно прикрепить метаданные к цепочке блоков без создания альтернативной цепочки, для которой, как указал ThePiachu, требуется модифицированный клиент. Однако вы могли

  • Создать кошелек
  • Отправьте 1 BTC на этот кошелек
  • Добавьте как общедоступный адрес биткойн-кошелька, так и блок вашего депозита в 1 BTC.
  • Используйте закрытый ключ биткойн-кошелька, чтобы подписать содержание статьи

Теперь вы можете доказать третьим лицам, что вы являетесь автором документа, отправив заинтересованным сторонам 0,01 BTC.

Полностью упускает суть.