Электронная цифровая подпись (ЭЦП) документа – это аналог обычной подписи, но возможности её гораздо шире.
Как работает ЭЦП? Как отправить по каналам связи (например, по электронной почте) заверенный и подписанный электронный документ? Попробуем разобраться…
С обычной бумажной почтой нет проблем – подписываете документ; заверяете его у нотариуса; отправляете заказным письмом. Всё! Ваш адресат, получив такое письмо, уверен, что документ подписан лично вами.
С электронной почтой (e-mail) так не получится. Конечно, можно отсканировать заверенный нотариусом документ и отправить его в виде файла, присоединенного к электронному письму. Но распечатка этого файла не будет легитимной.
Как же быть? На помощь приходит криптография!
Ранее в главе «Шифрование с открытым ключом: Наглядная иллюстрация» было рассказано об асимметричном шифровании, когда отправитель шифрует послание открытым (публичным) ключом, а получатель его расшифровывает соответствующим открытому закрытым (приватным) ключом.
У отправителя и получателя совершенно разные ключи, но они алгоритмически связаны – открытым (публичным) ключом можно только зашифровать (запереть) послание, а закрытым (приватным) – только расшифровать (отпереть).
Как это работает на примере с навесным замком с двумя замочными скважинами и двумя разными ключами было наглядно показано в вышеупомянутой главе.
А теперь представим ситуацию наоборот: отправитель зашифровывает (запирает) свое послание своим закрытым (приватным) ключом, а получатели могут расшифровать (отпереть) это послание соответствующим открытым (публичным) ключом, который они получили ранее от отправителя. Разумеется, эти ключи (приватный отправителя и публичный получателя) являются алгоритмически связанной парой – расшифровать послание можно только открытым ключом, который соответствует закрытому ключу отправителя.
Задача решена! Получатель по публичному ключу знает, что письмо отправлено конкретным отправителем, имеющим соответствующий приватный ключ.
Но в реальности нет необходимости зашифровывать само послание. Достаточно вычислить его хэш-код (см. главу «Хэширование: Просто и наглядно»), затем зашифровать этот хэш приватным ключом и присоединить к тексту сообщения. Вот этот зашифрованный хэш и есть ЭЦП – электронная цифровая подпись сообщения.
Получатель послания также вычисляет хэш-код сообщения и сравнивает его с расшифрованным публичным ключом ЭЦП. Если они совпадают, то всё нормально – письмо отправлено тем лицом, у которого есть соответствующий приватный ключ.
Но это еще не все! Использование хэширования послания позволяет также контролировать и его целостность – не были ли по пути к адресату в письмо внесены несанкционированные изменения?
Действительно, если расшифрованная ЭЦП не совпадает с хэшем текста послания, то из этого могут следовать две вещи:
1. Письмо подписал другой человек (публичный ключ не соответствует приватному).
2. В текст сообщения были внесены изменения после его отправки.
В любом случае, получатель не может считать принятое сообщение достоверным – оно подделано!
Остается вопрос: Как получатель сообщения узнает, каким публичным ключом надо расшифровывать ЭЦП? Ведь для каждого приватного ключа существует свой уникальный публичный ключ.
Для этого существуют т.н. хранилища сертификатов ЭЦП. Каждый отправитель документа подписанного ЭЦП должен получить в соответствующем органе специальный электронный сертификат вместе с приватным ключом, которым он будет зашифровывать хэши своих посланий. Этот сертификат – по сути электронный документ, содержащий открытый ключ и информацию о владельце ключа.
Орган, выдавший сертификат, является доверительной организацией, которая подтверждает, что соответствующий сертификат ЭЦП выдан конкретному установленному лицу.
Сертификат вместе с ЭЦП прикрепляется к отправляемому посланию и получатель по сертификату идентифицирует личность отправителя и получает публичный ключ, соответствующий приватному ключу отправителя.
Электронная цифровая подпись (ЭЦП) используются не только для отправки корреспонденции. При помощи ЭЦП заверяются документы (например, договоры), банковские операции и многое другое. Технология ЭЦП также используется в протоколах криптовалют, включая Биткоин.
Алгоритмы создания ЭЦП и её проверки.
Как это ни странно звучит, но «биткоин-кошельки» не содержат биткоинов!
Да-да! Именно так! Собственно биткоины, как монеты или расчетные единицы, существуют только в контексте протокола блокчейна Биткоина, а именно в виде записей транзакций в распределенной базе данных, которую еще называют ledger – бухгалтерская книга или гроссбух. Это база данных – блокчейн Биткоина – содержит записи абсолютно всех транзакций за всю историю со всеми существующими на данный момент биткоинами (расчетными единицами).
Что же такое транзакция и как работают т.н. «биткоин-кошельки» (под этим термином будем подразумевать способ хранения приватных ключей к биткоин-адресам)? Попробуем разобраться…
Транзакция – это финансовая операция по передаче некоторого количества денег от отправителя к получателю. При этом и отправитель, и получатель должны иметь определенные адреса (метки), между которыми и происходит движение денег.
В этом смысле финансовая транзакция подобна почтовым отправлениям – отправитель со своего почтового адреса отправляет в конверте некую сумму денег на адрес получателя.
В банковских структурах финансовая транзакция называется денежным переводом. А адреса – банковскими счетами. Когда некое лицо хочет отправить определенную сумму денег другому лицу, оно обращается в банк с просьбой перевести эту сумму с его банковского счета на банковский счет получателя.
Представьте себе большую таблицу, в каждой строке которой содержатся следующие данные (поля):
– дата и время финансовой операции (перевода денег);
– биткоин-адрес кошелька отправителя;
– биткоин-адрес кошелька получателя;
– сумма перевода.
Это и есть запись финансовой транзакции.
В протоколе Биткоина банковский счет аналогичен т.н. биткоин-адресу, который еще называют адресом кошелька. Формально это некая уникальная буквенно-цифровая строка, например:
12ctspmoULfwmeva9aZCmLFMkEssZ5CM3x.
Это не просто набор символов, а последовательность, криптографически связанная с приватным ключом от этого адреса. Т.е. биткоин-адрес и приватный ключ к нему являются уникальной парой, подобной публичному и приватному ключу в асимметричном шифровании.
Владелец биткоин-адреса, используя приватный ключ, может отправлять переводы на другие биткоин-адреса. Эти переводы записываются в блокчейн Биткоина (гроссбух – ledger) в виде транзакций.
Отметим, что все транзакции в блокчейне хранятся в незашифрованном виде. Любой человек, используя блокчейн-браузер или Block explorer – специальный сайт, для просмотра содержимого блоков, может увидеть любую транзакцию, включенную в блокчейн, в понятном виде – когда, откуда и куда, какое количество биткоинов было переведено.
Поскольку в блокчейне хранятся абсолютно все транзакции, именно по ним можно не только отследить движение всех монет между биткоин-адресами, но и вычислить, сколько криптоденег находится в данный момент в любом кошельке по его адресу.
Как это происходит? Все транзакции в Биткоине используют Входы (Inputs) и Выходы (Outputs):
1. Входы – пополнения, когда данный адрес выступает в качестве получателя биткоинов.
2. Выходы – платежи, переводы и т.п., когда адрес выступает в качестве отправителя.
Посредством Входов и Выходов транзакции связаны друг с другом – каждый Вход ссылается на Выход предыдущей, родительской транзакции. Таким образом цепочки связанных транзакций отслеживают все денежные потоки между биткоин-адресами внутри блокчейна.
На Входы каждой транзакции поступают средства с Выходов каких-то предыдущих транзакций, тем самым пополняя биткоин-адрес получателя средств. Если Выход не связан с Входом последующей транзакции, он считается непотраченным. Подсчитав все непотраченные Выходы, можно узнать текущий баланс конкретного биткоин-адреса (кошелька).
Но как владельцы этих адресов (кошельков) управляют своими деньгами? Как они совершают платежи и переводы?
Вот для этого и нужны собственно «биткоин-кошельки», в которых помимо уже упомянутого адреса хранятся приватные ключи (криптографически связанные с этим адресом), при помощи которых осуществляются транзакции-выходы.
Когда владелец соответствующего биткоин-адреса (кошелька) хочет перевести расчетные единицы (биткоины) на другой адрес, он дает соответствующее распоряжение в сеть Биткоина, подписанное электронно-цифровой подписью (ЭЦП), сформированной при помощи соответствующего приватного ключа от биткоин-адреса.
Собственно, эту операцию и совершают специальные компьютерные программы и приложения, называемые «биткоин-кошельками», такие как, например, Electrum или веб-приложение на сайте Blockchain.info и др. Они также подсчитывают баланс биткоин-адреса, отслеживая все непотраченные Выходы по данному адресу, и показывают все предыдущие транзакции по этому адресу.
Функции биткоин-кошелька может также выполнять и основной биткоин-клиент сети – программа Bitcoin Core.
Какие бывают биткоин-кошельки?
Прежде всего, отметим главное: биткоин-кошельки хранят приватные ключи от ваших биткоин-адресов. Это хранение может быть «холодным» или офлайн (без подключения к интернету) и «горячим» или онлайн (с подключением к интернету и сети Биткоин).
Поэтому условно все виды биткоин-кошельков можно разделить на две большие группы – «холодные» и «горячие»:
«Холодные» кошельки:
– бумажные – лист бумаги или другого материала (например, пластик) с нанесенным на него биткоин-адресом и приватным ключом. Может также дополняться соответствующими QR-кодами для быстрого сканирования и добавления ключей в программу-клиент для совершения транзакций. Для надежности данные биткоин-адреса и приватного ключа к нему хранят отдельно друг от друга, снабдив их одинаковыми метками для сопоставления при пользовании.
– аппаратные – специальные компактные программно-аппаратные устройства, подключаемые к компьютеру через USB-разъем или другим способом. Внешне похожие на флешку. Позволяют надежно (в зашифрованном виде) хранить приватные ключи и осуществлять при помощи их биткоин-транзакции. В принципе, хранить ключи можно на любом внешнем носителе информации (флеш-карта, HD-диск и т.п.), но в этом случае безопасность гораздо ниже.
Образец «холодного» бумажного кошелька.
Преимущества бумажного кошелька заключается в том, что приватные ключи в нем сберегаются офлайн, поэтому не подвержены кибератакам или сбоям оборудования.
Однако, в последнее время бумажные кошельки стали применяться гораздо реже, поскольку их вытеснил более удобный способ хранения – SEED-ключи (см. ниже).
«Холодные» кошельки, как правило, используются для надежного и длительного хранения большого количества биткоинов. Разумеется, в данном случае подразумевается не собственно хранение биткоинов в кошельках, а хранение доступа к соответствующим биткоин-адресам, на балансе которых находятся биткоины. Фактически, как было отмечено выше, в «холодных» кошельках хранятся приватные ключи от этих биткоин-адресов.
«Горячие» кошельки:
– приложения для компьютеров (десктопов и ноутбуков) – специальные компьютерные программы-клиенты для работы с биткоин-адресами и осуществления транзакций. Позволяют также отслеживать историю транзакций и вести учет. Пример – Electrum, Bitcoin Core, Jaxx, Xapo и т. п.
– мобильные приложения – аналогичные программы для смартфонов. Могут дублировать соответствующие приложения для компьютеров.
– он-лайн (веб-сервисы) – веб-сайты, предоставляющие услуги онлайн доступа к биткоин-адресам и проведения транзакций. Например, упоминаемый выше Blockchain.info или Coinbase.com.
Безопасность «горячих» кошельков обеспечивается внутренним программным шифрованием биткоин-адресов и использованием пользовательских паролей и двухфакторной авторизации.
Большинство «горячих» кошельков поддерживают технологию т. н. SEED-ключа. Собственно, SEED – это набор случайных английских слов. Как правило их 12, но бывает и 18 или 24. Выглядит это так:
tango ten bravo game press go extra wink regular apple mimic anchor
Эта бессмысленная цепочка слов позволяет генерировать практически неограниченное количество биткоин-адресов, связанных с SEED. А программа биткоин-кошелька предоставляет доступ пользователю по конкретной последовательности SEED.
Зная свой SEED-ключ пользователь может воспользоваться любым программным кошельком, который поддерживает технологию SEED.
Краткие итоги:
– В биткоин-кошельках не хранятся собственно биткоины (расчетные единицы).
– Все биткоины существуют в контексте транзакций – записей их движения от одного биткоин-адреса к другому. Эти записи хранятся в блокчейне.
– Баланс конкретного кошелька определяется путем расчета всех непотраченных Выходов биткоин-адреса этого кошелька.
– Биткоин-адрес (кошелька) криптографически связан с приватным ключом, при помощи которого осуществляются выходные транзакции с этим адресом.
– Биткоин-кошельки для конкретного адреса хранят его приватный ключ.
– Биткоин-кошельки позволяют удобно управлять (просматривать баланс и транзакции), а также совершать переводы и платежи (выходные транзакции) с конкретного адреса.
– Биткоин-кошельки бывают «горячими» и «холодными».
– SEED-ключ позволяет получить доступ к множеству связанных с ним биткоин-адресов при помощи любого программного биткоин-кошелька, поддерживающего технологию SEED.