Вступление

Пока писал статьи про биткоин ( раз, два ) читал в том числе лонгрид про блокчейн в блоге Вастрика. Здесь разбираю ошибки и объясняю, почему считатью логнрид неудачным.

Валидация блоков

image

Ничего подобного математики не доказали. А если кто-то докажет – это будет очень большое достижение. Здесь спутаны два понятия:

  1. Задачи, которые считаются сложными
  2. Доказано сложные задачи

Задач, которые считаются сложными, известно много, и они действительно используются в криптографии. Но нет доказательства их сложности. То есть нет математического доказательства утверждения “Не существует алгоритма нахождения корректного хеша блока в биткоин эффективнее полного перебора”. Сложность этой задачи основана на том, что хеш-фукнция SHA-256 на данный момент считается криптографически стойкой. Но история знает случаи, когда хеш-функции, ранее считавшиеся стойкими были сломаны. Самый известный пример – функция MD5.

image

Задача в биткоин не такая. Задача – чтобы двойной хеш SHA-256 начинался на столько-то нулей. Конечно, это небольшая деталь. Но это пост про блокчейн, который децентрализованный и открытый. Автор сам предлагает нам сходить и посмотреть на живой блок биткоина. А также даёт в качестве источника Bitcoin Wiki, где это подробно описано. Если автор не разбирался – то зачем написал конкретно, можно написать обтекаемо (как обычно и делают): “хэш блока должен начинаться на 10 нулей”. Да, фраза “хеш SHA-256 для всего блока начинался, скажем, на 10 нулей” выглядит более научно, но проблема в том, что она неверная.

image

В реальности глазами проверить, что хеш вычислен правильно, конечно, нельзя. Даже если в начале хеша есть нужное количество нулей – это ещё не означает, что он правильный. Чтобы проверить, участнику нужно честно вычислить хеш записи и сверить его. Скорее всего, здесь имелось в виду, что проверить правильность nonce намного легче, чем найти такой nonce.

Работа блокчейна

image
Странно, что автор не нашёл ответа, потому что статья Сатоши есть в списке литературы, она всего 8 страниц, а конкретно этому вопросу посвящён отдельный блок. К тому же деревья Меркла используется ещё, например, для работы лёгких узлов. Что должно было быть “быстрее”, мне вообще не понятно.

image

Автор сам пишет про различные применения блокчейна, но почему-то если это делает минздрав, то это вызывает сарказм. Ссылки на то, что конкретно хотел минздрав нет, поэтому напишу как я это понимаю. Идея в том, чтобы медицинские данные хранить децентрализовано на многих узлах. В этом случае:

  1. У всех узлов будет полный набор данных. Например, не будет такого, что человек обратился в одну больницу, а его карта в другой
  2. Данные лучше защищены. Поскольку хранится много копий, если одна испортится, это не проблема – данные можно восстановить из остальных копий
  3. Поверх можно добавить много полезной логики, например, шифрование для защиты, цифровые подписи врачей и т. д. Есть даже проекты применения смарт-контрактов.

image Теория вероятности тут ни при чём. Время зависит не от количества узлов в сети, а от их мощности. Один средний узел будет решать задачу не десятки лет, а те же 10 минут. Хотя узлы ищут хеш параллельно, они соревнуются между собой. К тому же у каждого узла-майнера свой блок (как минимум блоки различаются транзакцией с наградой майнеру). Написано так, как будто есть один блок и все вместе ищут хеш к нему – на самом деле это не так. На соревновании бегунов результат на 100 метров будет около 10 секунд вне зависимости от того, сколько бегунов бежит. В одном забеге может выиграть один, в следующем – другой, но среднее время от этого не поменяется.

Ключи

image

вы у себя на компьютере генерируете пару длинных простых чисел - публичный и приватный ключ

В биткоин ключи не являются простыми числами, более того, в биткоин используется криптография на эллиптических кривых и публичный ключ – это, вообще говоря, не число, а точка на кривой. Я вообще сходу не смог вспомнить ни одной криптосистемы, в которой бы ключами были простые числа. Самое близкое, что приходит на ум – это RSA, но там простые числа не являются приватным и публичным ключом, они лишь задействованы в процессе генерации ключей. Подробнее про RSA можно почитать тут. Создаётся впечатление, что автор считает, как будто RSA используется в биткоин – на самом деле это не так, RSA к биткоин не имеет отношения.

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

Не понятно, что значит “наоборот тоже работает”, потому что описан один и тот же случай: сообщение зашифровано на публичном ключе и расшифровывается на приватном. К слову, в биткоин вообще не используется шифрование.

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

Автор явно не знает разницы между шифрованием и цифровыми подписями. Во фрагменте как раз описывается схема работы подписи, которая почему-то называется шифрованием. Шифрование на приватном ключе вообще не имеет смысла: для расшифровки используется публичный ключ, который всем известен, то есть зашифрованный текст сможет расшифровать кто угодно. А вот подпись как раз вычисляется на приватном ключе: чтобы кто угодно мог её проверить с помощью публичного ключа.

Обо всех этих свойствах хорошо рассказано в «Книге Шифров» по ссылке выше

Ссылки на книгу нет, но я думаю имеется в виду “Книга шифров: Тайная история шифров и их расшифровки” Саймона Сингха. Это научно-популярная книга по истории криптографии. Автор не является профессиональным криптографом, а является профессиональным научпопером. Сама книга – это сборник сюжетов по истории криптографии: частично правдивых, частично анекдотичных. Никакого хорошего описания свойств ключей в этой книге нет. Единственное – это краткое полуматематическое описание RSA в приложении. Если хотите разобраться в криптографии не рекомендую эту книгу. Лучше возьмите Шнайер “Прикладная криптография”.

Меня удивило вот что: аудитория Вастрика - это в основном айти специалисты. То есть люди образованные, которые хорошо разбираются в теме. Как такое описание осталось, неужели никто не поправил и не объяснил Вастрику, что не так? Покопавшись, оказалось, что поправили и в телеграм-канале даже написан пост-исправление:

image
Проблема в том, что в исправлении ошибок не меньше:

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

В этом как раз ошибки существенной не было. Обычно публичный ключ генерируется из приватного, поэтому часто так и пишут, вместо “публичный и приватный ключи связаны”.

оба ключа абсолютно одинаковы. Зашифровал приватным — можешь расшифровать публичным, и наоборот. Они равнозначны, у приватного нет волшебных свойств расшифровывать всё подряд.

Они не “равнозначны”. В RSA это так, потому что схема шифрования и схема подписи в RSA использует одну и ту же операцию – возведение в степень. Здесь по-прежнему перепутаны шифрование и подписи. На самом деле приватный ключ используется для генерация подписи и расшифрования, а публичный – для проверки подписи и шифрования. После “исправления” я уверен, что автор считает, как будто в биткоин используется подписи RSA. Это нет так, в биткоин используется подпись ECDSA.

Заключение

Почему были допущены ошибки? Изначально пост заявлен как обзорный: всё простыми словами, чтобы даже “друзьям-гуманитариям” было понятно. Тем не менее в тексте довольно много технических подробностей. Как мне видится, этому есть несколько причин:

  1. Технология блокчейна сложная. Описать её понятно без технических деталей невозможно
  2. Если выкинуть технические части, то от поста мало что останется
  3. Основная аудитория блога – люди из айти. Если в тексте не будет технических моментов, то статью не будут читать

Блокчейн – это сложная технология Техническая часть блокчейна – это криптография. Криптография – сложный раздел математики и чтобы не наделать ошибок, в неё нужно погружаться. В криптографической части автор до конца не разобрался, но всё же решил включить эту часть в пост. Зачем? Моё мнение – чтобы пост выглядел более “научно” и “солидно”. А имеем, что имеем.

📢тг-канал