Биткойн (Часть 2)

Как работает биткойн

Ассиметричные ключи

Биткойн – это открытый протокол. Протокол – это набор правил, которому должны соответствовать биткойн-программы. Он открытый, любой может его проверить. Этот протокол позволяет связываться биткойн программам друг с другом через интернет.

Кто мешает написать программы нарушающие правила в свою пользу? Никто. Просто клиенты, которые не соответствуют протоколу, просто игнорируются другими клиентами. Аналогия – игра в шахматы, но люди находятся в разных местах и ходы отправляются по почте. Люди знают правила и по другому ходить не дадут. Так и с биткойном.

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

Биткойн-адрес – это производная открытого ключа.

У меня есть 50 биткойнов и я хочу отправить их своему другу  Джо. Джо генерирует свой биткойн адрес, на самом деле он создает пару ассиметричных ключей. Закрытый ключ хранится у Джо, а производная от открытого ключа (биткойн-адрес) отображается на экране и пересылается мне. Используя биткойн-адрес Джо, я начинаю транзакцию на своем телефоне, указывая сумму, которую хочу отправить ему. Затем я подписываю эту транзакцию цифровой подписью, используя мой закрытый ключ, и отправляю транзакцию в интернет.

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

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

Хеширование

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

Как хранить пароли пользователей от системы так, чтобы если систему взломали, то пароли не пострадали?

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

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

Допустим, есть миллион значений «хеша», тогда шансы правильно угадать будут равны 1 милионная. Допустим для этого нужно 24 часа.  Вместо определенного значения, мы можем сказать, что мы бы хотели найти любое значение хеша между 1 до 10.  Тогда это займет в 10 раз меньше 2,4 часа. Если хотим, чтобы находить задачу за 10 минут, то тогда нужно находить значения от 1 до 150.

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

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

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

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

Расскажите друзьям

Опубликовать в Мой Мир
Опубликовать в Одноклассники

Добавить комментарий