355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Сергей Базанов » Биткоин для всех. Популярно о первой распределенной одноранговой денежной системе » Текст книги (страница 3)
Биткоин для всех. Популярно о первой распределенной одноранговой денежной системе
  • Текст добавлен: 13 мая 2019, 11:00

Текст книги "Биткоин для всех. Популярно о первой распределенной одноранговой денежной системе"


Автор книги: Сергей Базанов



сообщить о нарушении

Текущая страница: 3 (всего у книги 3 страниц)

Популярно об основах криптографии, используемой в протоколе Биткоина

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


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


Разумеется, для понимания работы Биткоина необходимо понимать, как же работают технологии, на которых он базируется. Я просто и наглядно расскажу об этом. Хэширование: Просто и наглядно

Хэширование, или хэш-функция – одна из основных составляющих современной криптографии и протокола Биткоина.


Но, что это такое? Как наглядно представить сущность хэша?


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


Из этого следует, что для любого объема информации, будь-то одна буква или, например, роман Льва Толстого «Война и мир» (или даже всё Полное собрание сочинений этого автора) существует уникальный и неповторимый хэш – короткая символьная строка. Причем, если в той же «Войне и мире» изменить хотя бы один символ, добавить один лишь знак, – хэш изменится кардинально до неузнаваемости.


Как такое может быть? Целый многотомный роман и короткая строчка, которая отражает его!


В этом смысле хэш подобен отпечатку пальца человека или его ДНК.


Хэш подобен отпечатку пальца человека

Как известно, отпечаток пальца уникален и в природе не существует людей с одинаковыми отпечатками. Даже у близнецов отпечатки пальцев разные. Это же касается и структуры ДНК человека. Она уникальна! Нет людей с одинаковой структурой ДНК.



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



Итак, первое свойство хэша – его уникальность:



Каждому набору (массиву) информации присущ строго определенный, уникальный хэш.

Тем не менее, иногда встречаются т.н. коллизии – случаи, когда хеш-функция для разных входных блоков информации вычисляет одинаковые хэш-коды.



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



Следует отметить, что функций, которые вычисляют хэш, существует множество. Но наиболее распространена (в частности, используется в протоколе блокчейна Биткоина) хэш-функция под названием SHA-256 (от Secure Hash Algorithm – безопасный алгоритм хеширования). Эта хэш-функция формирует хэш в виде строки из 64 символов (длина – 256 бит или 32 байта).



Попробуем при помощи функции SHA-256 получить хэш для заголовка этой главы («Хэширование: Просто и наглядно»).



Это будет:

ef3c82303f3896044125616982c715e7757d4cd1f84c34c6b2e64167d2fde766

А теперь изменим заголовок всего лишь на один символ – добавим знак восклицания в конце («Хэширование: Просто и наглядно!»).



Получилось:

a6123e137d1d7f0aad800cdbc0918a65bb7a778a607cb993043d99718ec5a9e1

Как видите, изменение всего лишь на один знак исходного массива информации привело к кардинальному изменению его хэша!



И это второе важное свойство хэша:



– при самом незначительном изменении входной информации её хэш меняется кардинально.



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



Третье важное свойство хэша вытекает из того, что хэш-функция необратима. Другими словами:



– не существует обратной функции, которая из хэша может восстановить исходный массив информации.



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



Это свойство важно, поскольку делает взлом хэша (восстановление исходной информации по её хэшу) или невозможным, или весьма дорогостоящим занятием.



Еще одно важное свойство хэш-функций – это относительно высокая скорость работы.



Хэширование позволяет достаточно быстро вычислить искомый хэш из весьма большого массива входной информации.



Этим хэширование существенно отличается от кодирования (шифрования) и декодирования (дешифрования).



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

Шифрование с открытым ключом: Наглядная иллюстрация

Долгое время традиционная криптография использовала шифрование с тайным или симметричным ключом – один и тот же ключ использовался как для шифрования, так и для расшифровки (дешифрования) данных.


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


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


Шифрование с симметричным ключом

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



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



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



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



Проблема с ключами была решена только в 1975 году, когда Уитфилд Диффи (Bailey Whitfield «Whit’ Diffie) и Мартин Хеллман (Martin E. Hellman) предложили концепцию шифрования с парой ключей: открытым (публичным – public key), который зашифровывает данные, и соответствующим ему закрытым (приватным – private key).



Эта система шифрования получила название криптографии с открытым ключом или асимметричной криптографии.



Работает эта система так:

1. Генерируется случайный закрытый (приватный) ключ (напомним, что ключ – это последовательность символов) и по определенному алгоритму подбирается к нему другой – открытый (публичный) ключ. При этом для любого закрытого ключа существует только один вариант открытого. Т.е. эти ключи (приватный и публичный) всегда работают в паре (связке).



2. Далее полученный открытый (публичный) ключ пересылается по любым открытым каналам связи отправителю тайного сообщения.



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



4. Получатель расшифровывает секретное сообщение, используя свой закрытый (приватный) ключ из пары с открытым (публичным), которым было зашифровано сообщение.


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



Шифрование с асимметричным ключом

Но вернемся к нашему сундуку с сообщением. Как же теперь наглядно представить асимметричное шифрование? Как так можно – запирать одним ключом, а отпирать другим?



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



Первоначально замок с зафиксированной левой половинкой дуги (1) и расфиксированной правой (2), а также с ключом 2 (открытым) доставляется лицу, которое должно отправить тайное послание.



Получив замок и открытый ключ (2), отправитель навешивает его на сундук с тайным посланием и запирает его полученным ключом 2. Теперь сундук закрыт и даже отправитель не может его открыть, поскольку его ключ (2) может только зафиксировать правую часть дуги в замке, но не может освободить от фиксации.



Запертый замком сундук с тайным посланием отправляется получателю, у которого есть ключ (1), снимающий фиксацию правой половинки дуги и тем самым отпирающий замок. Но другие лица, даже если они будут иметь копию публичного ключа (2), открыть замок не смогут.



Получатель открывает замок ключом (1) и тайное послание прочитано!



Пользуясь терминологией асимметричной криптографии с открытым ключом, ключ 1 – это закрытый (приватный) ключ, а ключ 2 – это открытый (публичный) ключ.



В заключение отметим, что асимметричная криптография с открытым ключом получила широкое распространение не только в шифровании шпионских и дипломатических посланий. Асимметричную криптографию используют сайты с поддержкой протокола HTTPS, мессенджеры, Wi-Fi-роутеры, банковские системы и многое другое. На основе асимметричной криптографии базируется электронная подпись. Также на асимметричной криптографии построен алгоритм блокчейна, на котором, в свою очередь, построены все криптовалюты, включая Биткоин.

Электронная цифровая подпись: Просто и наглядно

Электронная цифровая подпись (ЭЦП) документа – это аналог обычной подписи, но возможности её гораздо шире.


Как работает ЭЦП? Как отправить по каналам связи (например, по электронной почте) заверенный и подписанный электронный документ? Попробуем разобраться…


С обычной бумажной почтой нет проблем – подписываете документ; заверяете его у нотариуса; отправляете заказным письмом. Всё! Ваш адресат, получив такое письмо, уверен, что документ подписан лично вами.


С электронной почтой (e-mail) так не получится. Конечно, можно отсканировать заверенный нотариусом документ и отправить его в виде файла, присоединенного к электронному письму. Но распечатка этого файла не будет легитимной.


Как же быть? На помощь приходит криптография!


Ранее в главе «Шифрование с открытым ключом: Наглядная иллюстрация» было рассказано об асимметричном шифровании, когда отправитель шифрует послание открытым (публичным) ключом, а получатель его расшифровывает соответствующим открытому закрытым (приватным) ключом.


У отправителя и получателя совершенно разные ключи, но они алгоритмически связаны – открытым (публичным) ключом можно только зашифровать (запереть) послание, а закрытым (приватным) – только расшифровать (отпереть).


Как это работает на примере с навесным замком с двумя замочными скважинами и двумя разными ключами было наглядно показано в вышеупомянутой главе.


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


Задача решена! Получатель по публичному ключу знает, что письмо отправлено конкретным отправителем, имеющим соответствующий приватный ключ.



Но в реальности нет необходимости зашифровывать само послание. Достаточно вычислить его хэш-код (см. главу «Хэширование: Просто и наглядно»), затем зашифровать этот хэш приватным ключом и присоединить к тексту сообщения. Вот этот зашифрованный хэш и есть ЭЦП – электронная цифровая подпись сообщения.



Получатель послания также вычисляет хэш-код сообщения и сравнивает его с расшифрованным публичным ключом ЭЦП. Если они совпадают, то все Ok – письмо отправлено тем лицом, у которого есть соответствующий приватный ключ.



Но это еще не все! Использование хэширования послания позволяет также контролировать и его целостность – не были ли по пути к адресату в письмо внесены несанкционированные изменения?



Действительно, если расшифрованная ЭЦП не совпадает с хэшем текста послания, то из этого могут следовать две вещи:

1. Письмо подписал другой человек (публичный ключ не соответствует приватному).



2, В текст сообщения были внесены изменения после его отправки.


В любом случае, получатель не может считать принятое сообщение достоверным – оно подделано!



Остается вопрос: Как получатель сообщения узнает, каким публичным ключом надо расшифровывать ЭЦП? Ведь для каждого приватного ключа существует свой уникальный публичный ключ.



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



Орган, выдавший сертификат, является доверительной организацией, которая подтверждает, что соответствующий сертификат ЭЦП выдан конкретному установленному лицу.



Сертификат вместе с ЭЦП прикрепляется к отправляемому посланию и получатель по сертификату идентифицирует личность отправителя и получает публичный ключ, соответствующий приватному ключу отправителя.



Электронная цифровая подпись (ЭЦП) используются не только для отправки корреспонденции. При помощи ЭЦП заверяются документы (например, договоры), банковские операции и многое другое. Технология ЭЦП также используется в протоколах криптовалют, включая Биткоин.



Алгоритмы создания ЭЦП и её проверки. Биткоин для «чайников»

Краткий вводный курс в технологические основы Биткоина Кошельки и транзакции

Как это ни странно звучит, но «биткоин-кошельки» не содержат биткоинов!



Да-да! Именно так! Собственно биткоины, как монеты или расчетные единицы, существуют только в контексте протокола блокчейна Биткоина, а именно в виде записей транзакций в распределенной базе данных, которую еще называют ledger – бухгалтерская книга или гроссбух. Это база данных – блокчейн Биткоина – содержит записи абсолютно всех транзакций за всю историю со всеми существующими на данный момент биткоинами (расчетными единицами).



Что же такое транзакция и как работают т.н. «биткоин-кошельки» (под этим термином будем подразумевать программное обеспечение, при помощи которого совершаются транзакции)? Попробуем разобраться…



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



В этом смысле финансовая транзакция подобна почтовым отправлениям – отправитель со своего почтового адреса отправляет в конверте некую сумму денег на адрес получателя.



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



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



Рассмотрим блокчейн Биткоина (гроссбух – ledger) и записи транзакций в нем. Представьте себе большую таблицу, в каждой строке которой содержатся следующие данные (поля):

– дата и время финансовой операции (перевода денег);

– биткоин-адрес кошелька отправителя;

– биткоин-адрес кошелька получателя;

– сумма перевода.


Это и есть запись транзакции.

.

Примечание:

Этот пример упрощен для понимания. На самом деле транзакции в блокчейне Биткоина записываются как Входы и Выходы (см. ниже).

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



Как это происходит? Все транзакции с определенным биткоин-адресом можно условно разделить на две категории:

1. Входы – пополнения, когда данный адрес выступает в качестве получателя биткоинов.



2. Выходы – платежи, переводы и т.п., когда адрес выступает в качестве отправителя.


Разумеется, при входах баланс (суммарное количество расчетных единиц) биткоин-адреса увеличивается, а при выходах – уменьшается. Подсчитав все входы и выходы, можно узнать текущий баланс конкретного биткоин-адреса (кошелька).

.

Примечание:

Упрощено для понимания. На самом деле учитываются т.н. непотраченные Выходы (подробнее об этом читайте в главе «Блок»).

Но как владельцы этих адресов (кошельков) управляют своими деньгами? Как они совершают платежи и переводы?



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



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



Собственно, эту операцию и совершают специальные компьютерные программы и приложения, называемые «биткоин-кошельками», такие как, например, Electrum или веб-приложение на сайте Blockchain.info и др. Они также подсчитывают баланс биткоин-адреса, отслеживая все непотраченные Выходы по данному адресу, и показывают все предыдущие транзакции по этому адресу.



Функции биткоин-кошелька может также выполнять и основной биткоин-клиент сети – программа Bitcoin Core.



Какие бывают биткоин-кошельки?



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



Поэтому условно все виды биткоин-кошельков можно разделить на две большие группы – «холодные» и «горячие»:



«Холодные» кошельки:

– бумажные – лист бумаги или другого материала (например, пластик) с нанесенным на него биткоин-адресом и приватным ключом. Может также дополняться соответствующими QR-кодами. Для надежности данные биткоин-адреса и приватного ключа к нему хранят отдельно друг от друга, снабдив их одинаковыми метками для сопоставления при пользовании.



– аппаратные – специальные компактные программно-аппаратные устройства, подключаемые к компьютеру через USB-разъем или другим способом. Внешне похожие на флешку. Позволяют надежно (в зашифрованном виде) хранить приватные ключи и осуществлять при помощи их биткоин-транзакции. В принципе, хранить ключи можно на любом внешнем носителе информации (флеш-карта, HD-диск и т.п.), но в этом случае безопасность гораздо ниже.


Конец ознакомительного фрагмента.

Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.


    Ваша оценка произведения:

Популярные книги за неделю

    wait_for_cache