Если я хочу доказать, что я написал конкретный документ до определенного момента времени, было бы достаточно сгенерировать хеш sha256 документа и каким-то образом организовать появление этого хэша в блокчейне.
Есть ли простой способ сделать это, просто отправив транзакцию и предоставив ее майнерам организовать для меня ее попадание в блокчейн?
Один из способов, который приходит мне в голову, заключается в том, что я могу рассматривать хеш как закрытый ключ (bitaddress.org сообщит мне адрес и закрытый ключ, соответствующие любому заданному вводу) и отправить биткойн на соответствующий адрес. Затем, когда я публикую документ, любой может пройти тот же процесс и увидеть дату транзакции в блокчейне.
Это кажется немного запутанным. Есть ли более простой способ? В идеале бесплатный, не требующий больших вычислительных ресурсов и не требующий специального программного обеспечения для создания метки времени или ее проверки.
Вы можете кодировать любые произвольные данные, используя команды OP_PUSH и OP_DROP сценария Биткойн. Однако для этого вам понадобится какой-нибудь пользовательский биткойн-клиент, так как стандартный не позволяет отправлять подобные сообщения.
В качестве альтернативы вы можете просто использовать хеш как часть генерации биткойн-адреса и сохранить его в цепочке блоков, уничтожив на нем один сатоши.
Где-то на StackExchange должна быть тема, посвященная кодированию любых данных в блокчейн, так что вы также можете взглянуть на это.
Один из способов вставить произвольный хэш 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, требуется модифицированный клиент. Однако вы могли
Теперь вы можете доказать третьим лицам, что вы являетесь автором документа, отправив заинтересованным сторонам 0,01 BTC.
потрошитель234