Найти в Дзене

Блокчейн 3. Безопасность данных.

Оглавление

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

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

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

Хеширование.

Что такое хеширование? Это когда мы берем какие то данные: тексты, числа, и ставим им в соответствие какой то короткий уникальный идентификатор, по которому уже можно определить, что за данные мы имеем ввиду.

"Дети играют во дворе." - g459h

"Номер телефона 85325263403" - 5g02m

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

У хеш-значений есть несколько интересных особенностей:

- Они всегда однообразны, одинаковой длины, и это удобно для того чтоб хранить и использовать их.

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

- Для одних и тех же данных всегда будут создаваться одни и те же хеш-значения.

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

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

Хеширование можно использовать для всяких разных целей. Например:

- Сравнить данные между собой. Ведь создать хеш-значения и сравнить их часто бывает быстрее чем сравнивать исходные данные.

- Проверить, изменились ли данные, ведь тогда изменятся и их хеш-значения.

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

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

Открытые и закрытые ключи.

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

а - 23

б - 98

в - 56

Такой набор чисел называется "ключ". Теперь чтоб зашифровать например текст "абб" мы заменяем буквы на числа и получаем "239898". Затем можно пойти в обратную сторону и расшифровать этот текст, заменяя числа на буквы.

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

Создадим два ключа: открытый и закрытый. Закрытый ключ - такой что им можно только зашифровать сообщение, но расшифровать им ничего нельзя. А открытым наоборот, можно только расшифровывать уже готовые сообщения.

Конечно чтоб провернуть такое уже не достаточно просто менять буквы на числа, и там будет более сложная реализация.

Цифровая подпись.

Возьмем какие то данные, например транзакцию, и вычислим для нее хеш-значение. А потом соединим транзакцию и ее хеш-значение вместе и зашифруем закрытым ключом. Такой зашифрованный текст называется "цифровая подпись". Теперь любой человек в мире может вычислить хеш для транзакции, расшифровать цифровую подпись открытым ключом и проверить - совпадают ли хеш-значения полученные из транзакции и из цифровой подписи. Если да, то значит транзакция реально создана настоящим автором.

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