Эта статья – отрывок из книги Путеводитель по биткойну для непрофессионала Логан Брутше и публикуется здесь с разрешения автора.

Криптография – это наука о применении математических функций к фрагментам данных, чтобы гарантировать их безопасность..

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

Хотя это правда, мы никогда не можем гарантировать, что данная система не имеет уязвимостей – в конце концов, системы созданы несовершенными людьми – мнение о том, что «все может быть взломано», ложно. С начала 90-х у нас был доступ к криптографическим методам, которые просто невосприимчивы к взлому. Именно применение таких методов иногда оставляет место для эксплуатации..

Саму криптографию нельзя взломать для создания поддельной криптографической подписи (которая будет определена в ближайшее время), так же как нельзя взломать математику, чтобы сделать 2 + 2 = 5, хотя и криптография, и математика могут использоваться неправильно.. Если система, использующая криптографию, дает сбой, это потому, что разработчик неправильно применил криптографию.. Это не потому, что криптография не работает, или потому, что кто-то «взломал» криптографию – точно так же, как это не ошибка математики, если ваш банк неправильно обращается с вашей учетной записью, или ошибка электронной почты, когда ваша мама загружает незнакомое вложение и получает компьютерный вирус. . Это важное различие, потому что Биткойн является прямым приложением установленной криптографии..

Криптография – не новая, непроверенная технология. Все криптографические методы, используемые Биткойном, используются с момента появления Интернета и необходимы для многих распространенных Интернет-протоколов, используемых каждый день.. Наука криптографии считается надежной и важной компьютерными учеными точно так же, как ракетостроение считается надежным и важным в НАСА..

Ключевые пары: краеугольный камень криптографии

Пары ключей являются краеугольным камнем криптографии, используемой в блокчейнах.. Пара ключей состоит из двух частей: закрытого ключа и открытого ключа. Эти ключи на самом деле представляют собой не что иное, как очень большие числа с определенным математическим соотношением, используемые вместо паролей и имен пользователей..

Вы будете обрабатывать открытый ключ, такой как ваше имя или имя пользователя: в большинстве случаев вы делитесь им со всеми, кто спрашивает, и те, у кого он есть, могут использовать его, чтобы ссылаться на вас или связываться с вами. Это связано с вашей репутацией (или, в случае Биткойна, с вашей историей транзакций), поэтому у вас может быть несколько открытых ключей (и, следовательно, несколько пар ключей), которые вы используете для разных целей. Открытый ключ может использоваться для ссылки или просмотра учетной записи, но сам по себе не может разрешать какие-либо действия с этой учетной записью..

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

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

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

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

Криптографические подписи

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

А пока я просто еще раз отмечу, что эти технологии используются во многих распространенных интернет-протоколах и являются устоявшейся частью информатики..

Представьте себе двух человек, Алису и Боба, которые уже обменялись открытыми ключами лично. Алиса хочет отправить Бобу сообщение, но Боб очень подозрительный человек и не поверит, что сообщение действительно пришло от Алисы, если он не сможет доказать это математически, вне всяких сомнений. Чтобы облегчить это доказательство, они соглашаются использовать криптографическую подпись..

Для создания подписи Алиса использует алгоритм генерации подписи своего компьютера, который принимает в качестве входных данных ее закрытый ключ и ее полное сообщение, а также генерирует криптографическую подпись. Затем она отправляет Бобу это комбо сообщение / подпись, но, что очень важно,, не отправляет свой закрытый ключ.

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

Короче, этот процесс криптографической подписи позволяет Бобу проверить, что сообщение не было создано или изменено какой-либо третьей стороной и должно быть создано с использованием закрытого ключа Алисы, без необходимости (или возможности) знать ее закрытый ключ. Все, что ему нужно, это комбинация сообщения / подписи и ее открытый ключ..

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

Тем не менее, этот метод используется каждый день и считается надежным в криптографическом сообществе. Когда вы посещаете веб-сайт и его адрес начинается с https, буква «s» означает, что сайт прошел проверку с помощью криптографической подписи. Ваш компьютер использовал алгоритм проверки подписи, как и Боб в приведенном выше примере, чтобы убедиться, что веб-сайт действительно исходит из правильной пары ключей. Эта криптографическая подпись используется для обеспечения того, чтобы любое дальнейшее взаимодействие между вами и веб-сайтом было зашифрованным и аутентичным. Если этот тест не пройден, современные браузеры предупредят вас и пометят сайт как опасный..

Достаточно огромные числа

Ранее я кратко упоминал, что закрытые и открытые ключи функционируют как имена пользователей и пароли, но на самом деле представляют собой не что иное, как чрезвычайно большие числа с особым математическим соотношением. В связи с этим мне часто задают следующие вопросы:

«Разве нельзя просто компьютер угадать или пересчитать кучу чисел и попробовать их в качестве закрытых ключей? Разве они в конечном итоге не натолкнутся на закрытый ключ какой-то целевой пары ключей и, таким образом, не получат контроль над этой идентификацией? » Действительно, в случае с Биткойном это позволило бы злоумышленнику украсть деньги, хранящиеся у некоторой пары ключей..

Хороший вопрос, но этого не происходит. Как указывалось ранее, есть несколько биткойн-адресов с биткойнами на миллионы долларов, которые не менялись годами – даже при том, что для их кражи потребуется только правильный закрытый ключ – правильное огромное количество! Если бы вы могли угадать закрытый ключ к этим адресам, деньги были бы вашими, чтобы отправить куда угодно. В отличие от пароля, вы можете проверять закрытые ключи локально на своем компьютере, и сервер не ограничивает количество раз или скорость их попытки..

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

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

В любом случае создание закрытого ключа – для чего требуется только возможность создавать случайные числа – остается тривиальным делом. Использование закрытого ключа для генерации подписей, а также проверка этих подписей на открытый ключ также остаются простыми в вычислительном отношении. Но работа, необходимая для угадывания закрытого ключа, растет экспоненциально с каждой дополнительной цифрой. Чтобы сделать закрытые ключи «невосприимчивыми» к угадыванию методом перебора, нам нужно только добавить достаточное количество цифр – нам нужно только сделать их достаточно большими..

Итак, насколько огромен достаточно большой? Закрытые ключи, используемые в Биткойне, представляют собой 256-битные целые числа, что составляет число из семидесяти шести цифр.. Сила размера этого числа невероятна. Следующая иллюстрация во многом заимствована из книги Брюса Шнайера. Прикладная криптография, и является убедительной демонстрацией достаточно огромных чисел.

Во-первых, осознайте, что конкретным следствием второго закона термодинамики является то, что для изменения одного двоичного бита информации требуется минимальная энергия (изменение 1 на 0 или наоборот). Это означает, что для выполнения любого вычислительного процесса требуется минимум энергии, независимо от используемого оборудования..

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

Используя немного математики и термодинамики, вы обнаружите, что совершенно эффективный компьютер может пересчитать 2178 значений с учетом всей годовой выработки энергии Солнцем. Если мы разделим это значение на количество возможных закрытых ключей, 2256, мы обнаружим, что этот гипотетический компьютер сможет угадывать или подсчитывать только 0,0000000000000000000003% от общего числа возможных закрытых ключей – с учетом всей годовой выработки энергии Солнца..

Кроме того, это всего лишь подсчет и не включает в себя гораздо более сложную задачу фактической проверки каждого закрытого ключа, чтобы увидеть, соответствует ли он правильному открытому ключу. Таким образом, с вероятностью 0,0000000000000000000003% на этом компьютере к концу года был обнаружен правильный закрытый ключ, он даже не осознает этого..

Эти цифры не имеют ничего общего с технологией устройств; это максимумы, которые возможны в соответствии с законами термодинамики, установленными с 1930-х годов. И они настоятельно подразумевают, что атаки методом перебора 256-битных ключей (которые использует Биткойн) будут невозможны до тех пор, пока компьютеры не будут построены из чего-то другого, кроме материи, и не будут занимать что-то, кроме места.

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

Для более глубокого изучения Биткойн и криптографии возьмите книгу Логана Брутше., Путеводитель по биткойну для непрофессионала.