Блокчейн и криптовалюты
March 31, 2019

Основы blockchain – Часть 2. Криптографическое хеширование, криптография с открытым ключом и цифровые подписи.

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

Сейчас мы поговорим про такие элементы blockchain, как хешинг, криптография, цифровые подписи, которые необходимы для понимания, как же происходят транзакции, обмен цифровыми активами в сети bitcoin.

Начнём мы с такого понятия, как хеш функция.

Хеш функция играет важную роль в реализации технологии blockchain и работает она следующим образом. Хеш функция позволяет взять некую информацию с одной стороны, пропустить её через определённый алгоритм и получить хеш значение, например если мы применяем алгоритм SHA-256, состоящее из 64 знаков, которое будет отображать текст или те значения, которые зашли с другой стороны. Другими словами, любой текст, который пропускается через эту хеш функцию, будет отображаться определённым набором знаков, причём этот набор знаков всегда будет уникальным, как отпечаток пальца.

Здесь важны 2 вещи:

1. Этот слепок, этот отпечаток, этот хеш можно использовать как ID, потому что он всегда будет уникальным и отображать те данные, которые преобразовались в это хеш значение.

2. По хешу нельзя узнать те данные, которые были преобразованы.

Давайте посмотрим, как это работает. В данном случае с одной стороны есть текст “Konstantin”. И с помощью алгоритма SHA-256 мы получаем значение, которое отображается справа. Достаточно поменять первую букву с большой на малую и хеш справа измениться.

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

Пример: у нас есть имя “Konstantin”, получаем определённый хэш.

Добавляем “Greeting Blockchain Architects” -> получаем другой хеш.

Добавляем “2018” -> получаем другой хеш.

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

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

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

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

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

В данном случае Элис отправляет текст Бобу “Привет, мой друг”. И какой-то злоумышленник может посмотреть и понять, что они друзья.

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

Как это работает. Давайте предположим, что Элис хочет передать сообщение Бобу. Мы работаем в открытой сети.

Чтобы как-то защититься от злоумышленника, Элис берёт сообщение, в данном случае “Привет, Боб”, берёт публичный ключ Боба, который выставлен и доступен всем участникам сети, зашифровывает данное сообщение и отправляет его Бобу.

Теперь, по сети пойдёт не текст “Привет, Боб”, а набор каких-то значений, который непонятен, если не знать, как его расшифровать.

Боб получает это сообщение, берёт свой приватный ключ, который есть только у него и расшифровывает. Т.е. Элис публичным ключом зашифровала сообщение, публичный ключ – это производная от приватного ключа, Боб берёт приватный ключ и расшифровывает.

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

В данном случае Боб и Элис поссорятся, но если дело касается финансово значащих данных, то это конечно же не приемлемо.

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

Давайте разбираться, как это работает. Итак опять Элис хочет отправить Бобу сообщение по открытой сети, берёт публичный ключ Боба и зашифровывает сообщение. Дальше берёт исходный текст “Привет Боб” и пропускает его через хеш функцию и получает некий отпечаток, некий слепок, 64-значное значение фразы “Привет Боб”. Дальше Элис берёт свой приватный ключ и зашифровывает этот хеш.

Теперь по сети пойдёт зашифрованное сообщение в паре с цифровой подписью (тот самый хеш, который подписан приватным ключом Элис).

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

Боб, получая зашифрованное сообщение и подпись, берёт текст, берёт свой приватный ключ и расшифровывает это сообщение и получает текст “Привет Боб”. Пропускает этот текст через хеш функцию и получает хеш, некоторый ID, соответствующий этому сообщению.

Дальше самое интересное, Боб берёт публичный ключ Элис, расшифровывает цифровую подпись, получает хеш от Элис и сравнивает с тем, который получился у него. Если хеши соответствуют друг другу, то это говорит о том, что:

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

- сообщение было действительно выслано Элис.

Теперь злоумышленник, может сделать следующее. Подменить сообщение и переправить его Бобу.

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

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

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

Мои контакты

Телеграм: papabotovbotreactorcryptsys

ТамТам: papabotovbotreactorcryptsys