Проверка загруженного файла
Поддельный кошелёк может выглядеть и вести себя в точности как настоящий — до того момента, когда он отправит вашу фразу восстановления куда-то ещё. Поэтому проверяйте сам файл, а не сайт, с которого вы его получили. ZooBC записывает отпечатки своих релизов в цепочку, и любой может сравнить с ними отпечаток файла — в браузере или из терминала.
Отпечатки в цепочке
Отпечаток — это хеш SHA-256 файла. Измените в файле хотя бы один байт, и хеш изменится полностью, поэтому совпадающий хеш означает тот же самый файл.
Цепочка хранит хеши в двух местах:
- Реестр релизов. Орган выпуска релизов — аккаунт, указанный в генезисе цепочки, — регистрирует каждый релиз со строкой версии и 32-байтовым хешем манифеста и может позже его отозвать. Отдельные файлы тоже внесены в список: у кошелька, обозревателя и файлов адресов свои хеши, а запись набора файлов — это хеш SHA-256 его файла SHA256SUMS. Две трети зарегистрированных мест также могут наложить вето на релиз, а после недели голосования — заменить орган выпуска (релизы и обновления).
- Сообщения транзакций. Любая транзакция может нести хеш в своём сообщении, и этот хеш можно найти поиском.
Поскольку эти записи — часть цепочки, каждый узел даёт о них один и тот же ответ.
Страница /verify
Каждый шлюз отдаёт страницу по адресу /verify. Перетащите на неё файл, и страница:
- вычислит хеш SHA-256 внутри вашего браузера; файл никуда не загружается;
- найдёт хеш в списке релизов (
/api/v1/release/list) и в сообщениях транзакций (/api/v1/search/transactions?q=, за которым следует хеш); - сообщит один из трёх статусов: в цепочке, когда хеш зарегистрирован в цепочке; закрепление ожидается, когда у файла должно быть подтверждение в цепочке, но его хеш не зарегистрирован, так что за файл ручается только шлюз; отозван, когда орган выпуска релизов его отозвал.
При загрузке страница также читает текущий орган выпуска релизов (/api/v1/release/authority) и предупреждает, если ожидается его смена. Отозванный файл — это файл, который был отозван; удалите его.
Без сайта
Можно не доверять даже самой странице. Вычислите хеш сами и запросите список релизов у любого узла, в том числе у собственного:
sha256sum wallet.html
GET /api/v1/release/list
Если вычисленный вами хеш указан для релиза, который не отозван, у вас в руках выпущенный файл. Для набора файлов сверьте со списком хеш его файла SHA256SUMS, а затем выполните sha256sum -c SHA256SUMS рядом с файлами набора. Каждый узел отвечает по одной и той же цепочке, поэтому ни одному отдельному сайту доверять не нужно.
Что публикует шлюз
Каждый шлюз публикует манифест проверки с хешем файла кошелька и хешем его zip-архива. Zip собирается воспроизводимо: одни и те же файлы всегда дают один и тот же архив, а значит, и один и тот же хеш, что позволяет любому собрать его заново и сравнить.
Что ничего не доказывает
- Замок (HTTPS) доказывает только то, на какой сайт вы попали, но не то, что делает файл.
- Размер файла легко подделать.
- Правильный на вид баланс ничего не говорит о том, куда дальше отправится ваша фраза восстановления.
Только хеш, сверенный с цепочкой, говорит вам, что файл — тот самый, который был выпущен.