В предыдущей части я упомянул электронную подпись. Технология эта старая, проверенная и давно всеми признанная, такую подпись можно даже предъявлять как доказательство в суде. Давайте вспомним, как она устроена и чем может нам пригодиться.
Важное замечание. Здесь и далее я буду иногда говорить о цифрах и числах, а иногда - о буквах и текстах. С точки зрения компьютера это одно и то же. Действительно, если у нас есть текст
HELLO
мы можем вместо каждой буквы написать ее номер в алфавите и получить длинное число
0805121215
Компьютер работает с числами, а мы видим вместо них буквы. Все просто.
Итак, для того, чтобы создать электронную подпись (в варианте, который используется в биткойне), нам понадобится 85-значное случайное число. Очень важно, чтобы оно было совершенно случайным. Это число мы будем называть закрытым (секретным, приватным) ключом. Его нужно хранить в строжайшем секрете.
Из приватного ключа при помощи неких математических преобразований мы получим другое число, которое будет называться открытым (публичным) ключом. Его мы разошлем всем желающим, опубликуем в Facebook - как угодно. Фокус в том, что получить из публичного ключа приватный невозможно. (Разве что перебрать все приватные ключи, но их в сто тысяч раз больше, чем элементарных частиц во Вселенной.)
Теперь, когда нам понадобится подписать документ, мы возьмем текст документа, возьмем наш приватный ключ и путем некоторых математических преобразований получим из них число, которое и будет нашей электронной подписью. Эту подпись мы прикрепим к документу.
После этого любой человек, который захочет проверить, действительно ли мы подписали этот документ, возьмет его, нашу подпись и наш публичный ключ (который мы сообщили всем) и произведет проверку. Если проверка покажет, что подпись верна, значит документ подписали именно мы, ведь больше ни у кого нет нашего приватного ключа. Если же подпись не наша или документ изменили после подписания, проверка тут же это выявит.
Давайте повторим.
Закрытый (приватный) ключ мы храним в секрете и подписываем с его помощью документы.
Открытый (публичный) ключ мы сообщаем всем желающим и проверяем с его помощью подпись под документом.
Как это можно использовать?
Представьте себе камеру хранения со множеством ячеек, в которых хранятся ценности множества разных людей. Ячейки пронумерованы, но имен на них нет, никто не знает кому принадлежит содержимое. Вы подходите к служащему, вручаете ему пачку денег и бумажку, на которой записан ваш открытый ключ. Служащий кладет деньги в свободную ячейку, запирает ее, а бумажку с открытым ключом приклеивает на дверцу снаружи.
Когда вы следующий раз придете за своими деньгами, вы вручите ему документ, в котором написано: “Прошу выдать мне содержимое ячейки №…” Этот документ вы должны подписать своей электронной подписью. Служащий подойдет к ячейке, прочтет открытый ключ, который написан на дверце и с его помощью проверит вашу подпись на документе. Если подпись верна, служащий откроет ячейку и выдаст вам деньги.
Всё.
По такому же принципу работает наша бухгалтерская книга. В ней написано:
256) 2.435823 монет принадлежат обладателю открытого ключа ABCDEF
257) 6.238324 монет принадлежат обладателю открытого ключа GHIJKL
258) ...
...
Если вы захотите передать 5 монет Бобу, вам сначала нужно спросить, какой у него открытый ключ. Он скажет: “Мой открытый ключ - QRTZYX”. Тогда вы напишете следующий документ:
Взять:
Монеты, записанные в строке (257) <подпись>
Передать:
5 монет - обладателю открытого ключа QRTZYX
1.238321 монет - обладателю открытого ключа GHIJKL
Тот, у кого хранится копия бухгалтерской книги, проверит подпись и суммы, и если все верно, добавит новую запись в конец книги.
Документ, который вы написали - это операция с деньгами, перемещение их из одних рук в другие. В бухгалтерии это называется “проводка”, но люди, работающие с биткойном, используют английское слово “транзакция”, означающее то же самое.
Обратите внимание, из чего она состоит.
У нее есть вход - из него берутся деньги. Входов может быть несколько, вы можете взять деньги сразу из нескольких ячеек. Каждый вход подписан электронной подписью.
У нее есть выходы - один или несколько - куда деньги направляются. Заметьте, что 1.238321 монет вернулись опять к GHIJKL. Это сдача - непотраченные деньги.
И еще кое-что. На выходе денег чуть-чуть меньше, чем на входе. Разница составляет 0.000003 монеты. Эти монеты может забрать себе тот, кто запишет вашу транзакцию в книгу. Это его комиссионные. Вы сами можете регулировать их размер. Разумеется, транзакции с более крупными комиссионными попадут в книгу быстрее.
Вот вам настоящая транзакция для примера: https://blockchain.info/ru/tx/13cd8c11f04fc99192c3e416dc96f674b363709cc21de27300c1114b3c51f2d9
Попробуйте найти в ней знакомые элементы.
И последнее на сегодня. Помните, когда вы хотели передать деньги Бобу, он должен был сообщить вам свой открытый ключ? Было бы очень неприятно, если бы он, передавая вам ключ, ошибся в какой-нибудь цифре. Деньги бы просто пропали - никто не смог бы их забрать. Чтобы такого не произошло, к открытому ключу добавляют информацию, позволяющую обнаружить случайную ошибку при наборе. Полученное число записывают буквами, вот так:
1P2duUbxxSAvUAxm4XBxa3JABCRkKVPwFg
Этот набор букв и цифр называют биткойн-адресом. Когда вы просите кого-то отправить вам биткойны, вы даете ему свой адрес - или в таком виде, или в виде QR-кода, который можно легко сфотографировать телефоном. Но об этом - в следующий раз.