С появлением и развитием компьютерных технологий проблема аутентичности информации, передаваемой по телекоммуникационным каналам, встала особенно остро – ведь подделать незащищенный цифровой документ гораздо проще, чем рукописный. Поэтому долгое время компьютерные документы распечатывали, подписывали вручную и в большинстве случаев ставили на них чернильную печать. Затем документ сканировался и передавался как графическое изображение, содержащее как печатные данные, так и рукотворные регалии. Но и в этом случае никаких гарантий от подделок существовать не могло. По крайней мере, до тех пор, пока технологии не перешли на совершенно новый качественный уровень – создание документов с цифровой электронной подписью, сформированной на базе алгоритмов асимметричной криптографии.
Цифровая электронная подпись – это результат работы определенного криптографического алгоритма, на вход которого подается два необходимых элемента: хеш набора данных, подлежащих подписанию, и секретный ключ владельца подписи. Цифровая подпись обладает целым рядом полезных свойств, главным из которых является то, что сформировать подпись может только владелец секретного ключа и никто иной. Точнее, могут иметь место вычислительные попытки восстановить секретный ключ из открытого, но, как мы убедились ранее, сделать это крайне сложно, и вероятность подобного исхода исчезающе мала. Цифровую подпись можно проверить на подлинность, зная открытый ключ владельца подписи. При этом подписанный конкретной подписью документ уже не сможет быть изменен ни в одном своем бите, поскольку подпись в этом случае сразу утратила бы свою валидность. Это произошло бы потому, что изменился бы хеш подписываемого документа, от которого напрямую зависит формирование самой подписи. То есть электронная цифровая подпись не только идентифицирует ее автора, но еще и гарантирует неизменность документа, который ею подписан.
Для формирования цифровой электронной подписи необходимо в первую очередь выбрать достаточно криптостойкий алгоритм асимметричной криптографии. Затем сформировать на его базе пару ключей – секретный и публичный. После чего вычислить хеш подписываемого блока данных, например, какого-то документа, предварительно выбрав подходящий алгоритм хеш-функции. Хеширование преследует две цели: защиту целостности исходных данных и создание их цифрового отпечатка в стандартизированной форме. После чего, имея хеш данных и закрытый ключ, мы запускаем алгоритм формирования ЭЦП и получаем на выходе результат в виде строки данных. Проверка подлинности подписи и целостности подписанных данных в различных алгоритмах шифрования математически отличается друг от друга. Однако общим принципом проверки является вычисление двух результатов, полученных разными способами, при этом для получения одного из них в обязательном порядке используется открытый ключ подписанта. Затем эти результаты сравнивают и в случае их неравенства делают вывод, что подпись подделана либо исходные данные претерпели изменения после подписания.
В качестве примера рассмотрим алгоритм RSA. Здесь сравниваются хеши подписанного блока данных, где первый хеш получается стандартным способом как результат действия хеш-функции над исходными данными, а второй вычисляется при помощи открытого ключа. Затем два полученных хеша сравниваются, после чего можно сделать выводы о подлинности подписи, то есть ее математическом соответствии подписанным данным. Следует еще раз подчеркнуть, что формирование ЭЦП или процедура ее проверки проводятся при помощи математических операций, присущих только конкретному, предварительно выбранному алгоритму шифрования. Как правило, для этого используются алгоритмы факторизации или дискретного логарифмирования, в том числе и на множестве точек эллиптических кривых. Именно последний способ в основном применяется в блокчейн-средах как наиболее криптостойкий. Схема примера подписания и проверки подписи при помощи алгоритма RSA показана на рисунке:
Следует также отметить, что электронная цифровая подпись совершенно не обязательно базируется на алгоритмах асимметричного шифрования. Существуют методики ее использования и для симметричных систем. В этом случае необходим еще один субъект – третье лицо в виде арбитра, которому доверяют обе стороны и который хранит общий секретный ключ. Очевидно, что данная схема используется достаточно редко в силу отсутствия эффективных алгоритмов и необходимости безусловного доверия третьим сторонам. Поэтому в подавляющем большинстве случаев используют алгоритмы асимметричной криптографии, а в блокчейн-проектах их применяют повсеместно.
Помимо стандартной цифровой подписи, в различных реализациях блокчейн-проектов применяются некоторые экзотические ее формы. Например, «слепая подпись», которую еще называют «доказательством с нулевым разглашением». Алгоритм слепой подписи прост: один участник системы шифрует свое сообщение и посылает его другому участнику, который является доверенным узлом (доверенным для некоторого множества других узлов) в системе. Этот доверенный участник ставит свою подпись на зашифрованном сообщении, при этом фактически не имея понятия о его содержимом. После чего подписанное сообщение возвращается его исходному отправителю, который обратно дешифрует его, оставляя только подпись доверенного узла. Это можно было бы сравнить с ситуацией, когда доверенный участник получает заклеенный конверт, внутри которого, помимо листа с сообщением, находится также и копировальный лист. Получатель, не вскрывая конверт, ставит на него свою подпись, которая через копировальный лист автоматически отпечатывается на листе с сообщением. По возвращении конверта отправителю тот изымает из него подписанное сообщение, достигнув таким образом желаемого – получить подпись доверенного узла, не разглашая ему само сообщение. Подобную операцию можно провести и чисто математически, используя протоколы асимметричной криптографии, например, при помощи алгоритма факторизации RSA.
Для чего используются такие замысловатые приемы? На самом деле вариантов предостаточно. В качестве примера приведем систему тайного голосования на выборах. Чтобы получить бюллетень, избиратель должен быть идентифицирован сотрудником избирательной комиссии, который не должен видеть, каким образом проголосует избиратель. Использование технологии слепой подписи гарантирует, что бюллетени получат только идентифицированные избиратели, имеющие право голоса. В результате можно говорить о доверии к результатам выборов, поскольку в обществе присутствует доверие к сотрудникам избирательных комиссий. По аналогичному принципу работает и система электронного голосования, где проверяющий узел подписывает сообщение от идентифицированного им избирателя (содержащее зашифрованную информацию о его выборе), после чего возвращает ему подписанное сообщение. Подпись в данном случае означает, что факт права участия избирателя в голосовании был проверен доверенным узлом сети. Избиратель, получив подписанное сообщение, отправляет его на адрес специального счетчика, который учитывает его как легитимный голос за одного из кандидатов. Подобные алгоритмы уже используются в ряде стран на выборах в различные органы власти – от муниципальных структур до национальных парламентов. Самой известной страной, использующей интернет-голосование на базе национальных идентификационных карт, является Эстония, которая впервые применила эту процедуру на парламентских выборах 2007 года.