Я объясню, как работают подписи, включающие эллиптические кривые. Криптовалюты в основном используют эллиптические кривые из-за меньшего размера подписей, которые необходимо публиковать в блокчейне.
Когда закрытый ключ, представляющий собой просто большое целое число, сопоставляется с открытым ключом (точкой на заданной эллиптической кривой), это сопоставление имеет определенные математические свойства. Обратите внимание, что это сопоставление выполняется таким образом, что оно является «односторонним». Вы можете легко сопоставить закрытый ключ с точкой эллиптической кривой открытого ключа, но вы не можете практически отменить эту операцию.
Во-первых, точки на эллиптической кривой образуют абелева группа при операции, которую мы называем «сложением». Это означает, что вы можете делать то, что выглядит как простая алгебра с точками. Вы можете брать баллы $А$ и $В$, добавьте их, чтобы получить точку $С$, и вы сможете заметить, что $А+В==В+А$. Обратите внимание, что мы определяем только операции сложения и вычитания, и мы не можем «умножать» точки или «делить» точки с другими точками.
Во-вторых, отображения целых чисел закрытого ключа в точки являются «аддитивно гомоморфными». Это означает, что если у вас есть закрытые ключи $а$ и $б$, которые сопоставляются с открытыми ключами $А$ и $В$, то открытый ключ $а+б$ будет равно обоим $А+В$ и к $С$.
Преобразование закрытого ключа в открытый ключ — это просто взять закрытый ключ. $а$ и рассчитать открытый ключ $aG$, что означает добавить известную точку $G$ самому себе $а$ раз. Поскольку вычисление этого путем добавления G к самому себе заняло бы целую вечность. $а$ время, есть математические ярлыки доступны. Поскольку эти ярлыки существуют только для быстрого выполнения умножения, а не для возврата назад и определения закрытого ключа из любого результата умножения, это становится односторонним "люк"функция.
Теперь представьте, что у меня есть закрытый ключ $а$ и открытый ключ $A=aG$, а ты бросаешь мне вызов. Вы придумали случайное целое число закрытого ключа $х$, и вы просите меня дать вам ответное целое число $у$ так что вы можете убедиться, что $xA==yG$. Я смогу пройти ваше испытание только в том случае, если буду знать секретный ключ $а$, что позволило бы мне вычислить $у=ха$. Это подтвердит, потому что тогда $xA==xaG==yG$.
То, что я описал выше, имеет два недостатка. Во-первых, как только я пройду испытание, вы сможете легко вычислить мой закрытый ключ. $а$ как $у/х$.
Второй недостаток заключается в том, что мне нужно, чтобы вы бросили мне вызов, а не просто предоставили вам подпись, не взаимодействуя с вами.
Первый недостаток устранен путем включения «ослепляющего фактора», который позволяет мне пройти испытание, не раскрывая свой закрытый ключ. Например, с подписью Шнорра я выбираю случайный закрытый ключ. $к$, показать только $К=кГ$, а затем попросите вас бросить вызов $х$. Затем я создаю значение $у$ так что вы можете убедиться, что $xA==K+yG$. Теперь, после того, как я раскрою $у$ чтобы пройти вызов, вы знаете, что я мог только рассчитать $у$ со знанием моего закрытого ключа $а$, но вы не можете вычислить мой закрытый ключ, не зная моего секретного ослепляющего фактора $к$.
Второй недостаток устраняется с помощью Эвристика Фиата-Шамира создать задачу, используя функцию, служащую "Случайный оракул", что позволяет мне придумать случайный вызов без возможности обмана. В случае схемы подписи ECDSA выход этой функции представляет собой координату x открытого ключа, сопоставленного с определенным вводом. В случае Шнорра подпись, функция представляет собой криптографически безопасный хеш, такой как SHA512/256.