Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
rusldv
7 лет назад

Основы программирования криптовалют. Цифровая подпись.

Основы программирования криптовалют. Цифровая подпись.


Что будет за курс

Как мы знаем в России началось активное осваивание цифровой экономики. Дали зеленый свет технологиям блокчейн и начали осваивать криптовалюты.
Многие страны хотят создать свои криптовалюты (национальные хотят).
Я решил, что нужно заняться изучением этого дела, а одновременно с этим и рассказом о этом нелегком деле.
Нет правда - блокчейн технология одна из сложнейших сфер программирования (да и экономики). Она сочетает сетевые технологии, криптографию, и алгоритмы доказательства работы. При этом легко расширяема для других технологий, например можно добавить виртуальную машину и интерпретатор, как это реализовано в Ethereum.
Поэтому я долго думал как написать данный курс и вот, вроди пришла идея. Будем изучать, ну а непонятные моменты обсуждать в комментариях.
Думаю первое время нужно все-таки рассказать теоретическую часть.

Я решил что первые 3 поста будут такими:

  1. Цифровая подпись.
  2. Транзакции.
  3. Блоки.

Ну начнем.

Что такое цифровая подпись

Ну в общем это шифрование с открытым ключем только наоборот.
Так что начнем с шифрования.

Симметричное и ассиметричное шифрование

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

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

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

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

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

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

Теперь когда вы шифруете свой текст ассиметричным алгоритмом, то вам выдается целых 2 ключа. Один закрытый (приватный), второй открытый (публичный).

Работает это так. Допустим Алиса вам хочет передать текст.Вы генерируете себе пару ключей (открытый и закрытый), а Алисе отправляете только открытый.
Она получает ваш открытый ключ, шифрует им свой текст и отправляет вам по интернету.

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

Как можно догадаться, на примере криптовалют - открытый ключ это адрес вашего кошелька (Биткоина например), вы его всем рассказываете и ждете, кто бы вам туда перевел токенов =) Закрытый ключ вы наоборот сохраняете в надежное место, чтобы не потерять, и ни кто не видел. Так как только он может подтвердить владение токенами.
У нас тут в голосе например открытый ключ начинается на GLS.. и его можно увидеть любому, а закрытые на 5.. они скрыты, и нужно нажать кнопку Показать, чтобы их увидеть или скопировать. Также подобные приватные ключи в разных программах-кошельках обычно хранятся в файле wallet.dat (или с другим расширением), сами эти кошельки повторно шифруются симметричным алгоритмом - то есть паролем, для того, на случай если украдут (скопируют). Кстати wallet-ы лучше хранить в нескольких экземплярах в разных местах, если сотрется, все токены навечно застрянут в блокчейне (именно застрянут, а не останутся. из блокчейна они и так ни куда не денутся) и вы не сможете распорядиться ими.

А вот кстати говоря, пора поговорить, о том что же нам позволяет распоряжаться токенами (передавать их).

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

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

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

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

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

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

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

Ну думаю стало яснее.

В следующей статье напишу про собственно транзакции

5
48.284 GOLOS
На Golos с November 2016
Комментарии (4)
Сортировать по:
Сначала старые