Вопрос или проблема
Я нашел несколько уязвимостей, которые хочу продать (легально!).
В случае, если они будут раскрыты публично до того, как я смогу их продать, я хочу иметь возможность доказать, что знал о них раньше для похвальбы.
Сейчас я рассматриваю следующую систему (если вы видите лучший вариант, я хотел бы его услышать):
- SHA-2 кодировать метку даты (2000-01-01) и описание уязвимости
- опубликовать SHA-2 в веб-приложении, которое сохраняет дату
- если в будущем будет раскрыта уязвимость, я смогу опубликовать свое описание, и каждый сможет проверить, что оно создает SHA-2, и дату, когда SHA-2 была опубликована
Для работы этого метода мне нужно веб-приложение, которое:
- сохраняет метку времени для данных
- не позволяет мне изменять данные без изменения метки времени и не позволит этого в будущем
- позволяет каждому видеть метку времени публично
- не исчезнет завтра (конечно, это “мягкое” требование, но также важное)
- позволяет мне публиковать любые данные, которые я хочу (исключает, например, Stack Overflow, где разрешены только вопросы о программировании)
- скрытие меток времени SHA перед раскрытием было бы плюсом, но не обязательно: это скрыло бы количество уязвимостей, что желательно, но не существенно для меня. Это можно достичь с помощью функции “невосстанавливаемого удаления”, как для ответов на Stack Exchange, или других механизмов контроля конфиденциальности.
- не отправляет уведомления людям, которых это не касается. Например, я не хочу публиковать на своей основной ленте Facebook, чтобы не спамить своих друзей. Я мог бы создать фейковый аккаунт, но это может противоречить условиям использования Facebook (НУЖНО СДЕЛАТЬ)
Несколько рассмотренных мной вариантов:
- отправить себе по электронной почте. Но, насколько я знаю, я не могу сделать электронную почту общедоступной
- большие социальные сети с постами/комментариями: можно использовать, но я боюсь, что они изменят правила меток времени в какой-то момент, поскольку это не является целью их разработки:
- Twitter: нельзя редактировать. Нельзя восстановить удаленное или контролировать конфиденциальность, но несколько аккаунтов выглядят допустимыми.
- Facebook: можно редактировать, но оставляет неизменяемую историю. Удаление окончательное.
- Google +: показывает “отредактировано в” в заголовке при наведении
- GitHub: заголовки проблем являются кандидатом, поскольку любое изменение заголовка сопровождается неизменяемым комментарием. Однако описания и комментарии к проблемам можно редактировать без следа.
Кто-нибудь видит лучший вариант?
РЕДАКТИРОВАНО
После того как Грант дал мне ключевое слово “Trustytimestamping”, я нашел другие источники:
-
https://crypto.stackexchange.com/questions/12647/a-timestamping-authority-digital-notary: тонны альтернатив. Предлагаю переместить дальнейшее обсуждение туда, если оно когда-то не будет закрыто.
-
https://stackoverflow.com/questions/25052925/does-anyone-know-a-freetrial-timestamp-server-service: закрыто как не по тематике
Также есть одна вещь, которую я должен улучшить в своей системе: моя пара имя <email>
должна быть включена в файлы, которые будут хешироваться.
Одна из опций — https://www.btproof.com
Он берет ваш текст, создает его хеш и превращает этот хеш в биткоин-адрес и отправляет немного денег туда. Это создает постоянную (по крайней мере, пока кто-то имеет полную копию биткоин-цепочки) запись хеша с крайне сложной для подделки меткой времени. Деньги, отправленные на адрес, теряются навсегда.
Вы могли бы опубликовать криптографические хеши файла X в разделе объявлений в местной газете. Если кто-то затем будет оспаривать существование файла X на дату издания газеты, вы можете сослаться на газету и отправить им копию файла X (которую, конечно, вы сохранили в нескольких местах).
Как я ответил в 2014 году, но сообщение было удалено как ссылка, это идеальный случай использования для распределенной системы, такой как блокчейн, поскольку ключевым вопросом является то, что вы не хотите доверять одному конкретному лицу. Вы просто должны хешировать свой контент и публиковать хеш на блокчейне. И выбор самого популярного блокчейна (Bitcoin) кажется лучшим вариантом для обеспечения доступности данных на более долгое время и для усложнения атаки на блокчейн с помощью атаки 51%.
Самый простой способ сделать это — использовать веб-сервис, который берет немного долларов, например, через PayPal, и записывает данные за вас, но эти сервисы, похоже, все со временем умирают по каким-то причинам, думаю, законным или экономическим:
- https://bitproof.io это то, что я указал в удаленном ответе, но сейчас этот веб-сервис уже не работает
- https://cryptograffiti.info тоже уже не работает. Как я упоминаю в этой статье в блоге, этот сервис был относительно популярен, и многие люди использовали его для внедрения изображений в блокчейн
- https://www.btproof.com был упомянут Грантом, но теперь он тоже не работает
Но вы всегда можете сделать это с локального узла биткоина с помощью командной строки. Существует несколько способов кодирования произвольных данных на блокчейне биткоина, но использование OP_RETURN
является одним из самых простых.
Процедура слегка технически сложна, и мне не удалось сразу найти хорошо упакованный вспомогательный скрипт для этого, хотя он наверняка существует, но то, что вам нужно сделать, детально описано здесь: https://github.com/BlockchainCommons/Learning-Bitcoin-from-the-Command-Line/blob/9b97c50471226fc8fdb6063508c75db156bf5122/08_2_Sending_a_Transaction_with_Data.md
По сути, вы устанавливаете биткоин через:
sudo snap install bitcoin-core
затем открываете графический интерфейс, даете ему синхронизироваться и покупаете небольшое количество биткоинов, просто чтобы оплатить комиссию за транзакцию, которую мы вот-вот совершим.
Затем можно записать SHA локального файла contract.jpg
в блокчейн (не тестировалось, возможны ошибки ниже):
op_return_data="$(sha256sum contract.jpg)"
utxo_txid=$(bitcoin-cli listunspent | jq -r '.[0] | .txid')
utxo_vout=$(bitcoin-cli listunspent | jq -r '.[0] | .vout')
changeaddress=$(bitcoin-cli getrawchangeaddress)
rawtxhex=$(bitcoin-cli -named createrawtransaction inputs=""'[ { "txid": "'$utxo_txid'", "vout": '$utxo_vout' } ]''' outputs=""'{ "data": "'$op_return_data'", "'$changeaddress'": 0.0146 }''')
signedtx="$(bitcoin-cli signrawtransactionwithwallet $rawtxhex | jq -r '.hex')"
bitcoin-cli sendrawtransaction $signedtx
Теперь осталось только пожалеть, что я не купил немного биткоинов в 2014 году!!!
.
Ответ или решение
Теория
Доверенная временная маркировка (trusted timestamping) — это механизм, при котором создается криптографически защищенное доказательство существования некоторого документа или данных на определённый момент времени. Этот процесс позволяет удостоверить, что информация существовала до определённого события без необходимости раскрытия самой информации.
Основной принцип этого метода заключается в использовании криптографических хэшей и Asymmetric Cryptography для создания уникального отпечатка (хэша) данных, который затем передается на доверенный сервер временной маркировки или записывается в распределённую систему, такую как блокчейн. Эти утверждения могут быть использованы для последующего подтверждения того, что вы знали о содержимом на момент, когда временная метка была создана.
Пример
Рассмотрим алгоритм SHA-2. Этот алгоритм создаёт хэш-значение из входных данных, обеспечивая неизменность и невозможность предсказать метод обратного восстановление исходных данных только по хэш-значению. Вы можете взять текст файла, содержащего описание уязвимости, добавить к нему отметку текущей даты, и затем с помощью SHA-2 получить хэш. Этот хэш может быть опубликован в общедоступной сети для фиксации его существования на определенный момент времени.
Одним из примеров использования является публикация хэш-значения на социальных платформах, такие как Twitter или Facebook, где исторически фиксированные временные отметки или метки редактирования могут подтвердить время создания. Также можно использовать блокчейн (например, Bitcoin), чтобы записать хэш как часть транзакции, что обеспечит весьма надёжную и долгосрочную гарантию, так как данные, записанные в блокчейн, практически невозможно изменить.
Применение
Для решения задачи, связанной с доказыванием, что вы знали о существовании уязвимости до её публичного раскрытия, можно применять следующие шаги:
-
Генерация Хэша: Использовать инструмент командной строки или соответствующее программное обеспечение для создания SHA-2 хэша от вашего документа, включающего описание уязвимости и метку времени.
-
Публикация Хэша:
- Вы можете выбрать одну из корпоративных социальных сетей для публикации (с учетом их политик по неразрушимости данных).
- Альтернативно, с целью повышения надежности и долговечности, опубликовать хэш в блокчейне, например, Bitcoin. Для этого можно использовать функциональность
OP_RETURN
в транзакциях, позволяющую записывать небольшой объем данных в блокчейн. - Если доступно, используйте специальные сервисы для временной метки, которые гарантируют неизменяемость и независимость данных (например, в прошлом был популярен сервис btproof).
-
Хранение Оригинала: Убедитесь, что файла-оригинал, который использовался для генерирования хэша, хранится в безопасных местах с резервным копированием. Это необходимо, чтобы в будущем предъявить его в случае необходимости верификации.
-
Документирование процессуальных шагов: Зафиксируйте все операции и принятые решения в ходе этого процесса, включая используемые продукты, версии программного обеспечения, используемые команды и скрипты. Это позволит вам показать наглядный и проверяемый путь, которым вы шли для создания доказательств.
Таким образом, нижеописанные шаги обеспечивают транзакционную простоту и доверенные оригинальные доказательства без раскрытия какого-либо несанкционированного содержимого, что идеально подходит для случаев необходимости подтверждения интеллектуальной собственности, например, в виде найденных уязвимостей. Ключом в этой системе является выбор платформ и технологий, которым можно доверять для долговременной гарантии подлинности и защиты данных.