Рейтинг:2

Подписи от асимметричного шифрования

флаг in

Позволять $(K_{enc},K_{dec})$ быть асимметричной парой ключей. Мне кажется, что схему подписи можно создать, разрешив использовать открытый ключ проверки. $K_{ver}=K_{dec}$ (асимметричный ключ дешифрования) и секретный ключ подписи. $K_{знак}=K_{enc}$ (асимметричный ключ шифрования). Скажи с $Ч$ некоторая хэш-функция и $м$ должен быть подписан: $$ s=\texttt{sign}(m,K_{sign})=\texttt{encrypt}(H(m),K_{enc}) $$ $$ \texttt{проверить}(s,m,K_{ver})=\left\{ \begin{массив}{cc} \text{True}&\text{if} H(m)=\texttt{decrypt}(s,K_{dec})\ \текст{Ложь}&\текст{еще}. \конец{массив} \правильно. $$ Другими словами, один подписывает, зашифровывая (хэш) документ, и любой может проверить, расшифровав (и хешировав).

Н.Б. Публичные/частные роли ключей меняются местами между приложениями! $K_{знак}=K_{enc}$ хранится в секрете (забудьте, что он будет общедоступным в качестве ключа шифрования) и $K_{ver}=K_{dec}$ становится общедоступным (забудьте, что он будет закрытым в качестве ключа дешифрования).

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

Если это не так, что пошло не так?


Одна проблема, отмеченная в комментариях, возникает, когда $K_{dec}$ раскрывает информацию о $K_{enc}$. Это определенно происходит в некоторых (большинстве) схемах, скажем, когда ключ шифрования действительно представляет собой некую запутанную версию ключа дешифрования, но не во всех. Предотвратить это более или менее означает разработать схему подписи («расшифровка с открытым ключом»), что делает мой вопрос неинтересным.

Единственный конкретный пример, который приходит на ум, — это подпись RSA, где симметрия между показателями шифрования/дешифрования делает вышеописанное возможным.

knaccc avatar
флаг es
В криптографии ЕС открытый ключ $K_{enc}$ может быть тривиально получен из закрытого ключа $K_{dec}$. Таким образом, если вы выдадите $K_{dec}$ публике, общественность сможет определить ваш $K_{enc}$, а вашу «подпись» можно будет подделать.
poncho avatar
флаг my
Если мы что-то неправильно понимаем, может быть полезно, если вы возьмете какой-нибудь алгоритм шифрования с открытым ключом (кроме RSA) и напишите именно то, что вы предлагаете...
fgrieu avatar
флаг ng
Я предлагаю изменить заголовок вопроса на «Подпись из асимметричного шифрования», потому что (цифровая) подпись считается частью асимметричной криптографии.
Рейтинг:6
флаг ng

Хорошо

Метод в вопросе приводит к системе подписи, которая всегда успешно проверяет сообщение, которое она подписывает; и есть комбинации схем асимметричного шифрования и хэшей, где эта система подписи соответствует Свойство безопасности EUF-CMA, в том числе:

  • РГАЭС-ОАЭП близко к тому, что практикуется, и стандартный криптографический хеш, такой как SHA-256. Однако для части RSA необходимы две настройки:
    • Выбор $е$ случайным и большим битовым размером (половина битового размера $n$ вроде нормально) а не $е=65537$ как обычное (или другое более низкое угадываемое значение, или случайное, но слишком низкое для безопасности¹ метода вопроса)

    • Выражение ключа дешифрования $K_{dec}$ как $(н,д)$ а не как обычно $(n,e,d,p,q,d_p,d_q,q_\text{Inv})$, используемый стандартными реализациями, которые заботятся о производительности.

      Оба изменения необходимы для сохранения $е$ из $K_{enc}=(n,e)$ секрет, когда мы делаем $K_{dec}=(n,d)$ общественность, как в вопросе.

  • Шифрование RSA, как в оригинальная статья кроме как с $n$ достаточно большой, чтобы противостоять современным методам факторизации², и хеш-значение значительно больше, чем указано выше, чтобы противостоять Атака Десмедта и Одлызко.

Плохо

Метод небезопасен при применении к большинству асимметричных криптосистем.

Обратите внимание, что $K_{dec}$ должен быть обнародован, так как это ключ проверки, и $K_{enc}$ должен храниться в секрете, так как это ключ подписи. Таким образом, отношение между двумя ключами должно быть таким, чтобы мы можем сделать $K_{dec}$ общественности при сохранении тайны $K_{enc}$. RSA — это единственное хорошо известное мне семейство схем шифрования, которое может обладать этим свойством (и, как объяснялось выше, его практическая реализация не имеет).

Для многих систем асимметричного шифрования это свойство нельзя применить. Например, в Эль-Гамаль и это современный потомок ECIES, $K_{dec}$ это целое число, которое кодирует, как добраться до элемента группы $K_{enc}$ путем применения внутреннего группового закона к определенному элементу публичной группы; поэтому выявление $K_{dec}$ неизбежно раскрывает $K_{enc}$, нарушая безопасность конструкции вопроса.

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

Когда мы рассматриваем безопасность реализации, возникает еще одна проблема: реализация $\texttt{шифровать}$ не нуждается в защите от утечки побочного канала своего ключевого ввода, поскольку обычно он является общедоступным. Однако такая защита требуется для системы подписи вопроса.

Метод имеет тенденцию строить схемы подписи с нестандартными характеристиками.

Сравнение подписи RSA (в том числе по методу вопроса) с EdDSA на стандартном уровне безопасности:

  • Подпись довольно большая (256 байт против 64 байт)
  • Открытый ключ большой (обычно 260 байт по сравнению с 32 байтами).
  • Генерация подписи медленная (например, в десятки раз медленнее)
  • Генерация ключей мучительно медленная (в сотни раз медленнее).

И метод не совсем тот, что используется для создания подписи RSA, даже близкий родственник RSA-FDH. Это использует функцию закрытого ключа RSA из учебника. $h\mapsto s=h^d$ подписать широкий хэш $ч=Н(М)$; и учебник функции открытого ключа RSA $s\mapsto h=s^e\bmod n$ с последующим сравнением $h\overset?=H(M)$ в проверке. В отличие от метода вопроса, открытый ключ $(п,е)$ остается открытым, а закрытый ключ $(n,e,d,p,q,d_p,d_q,q_\text{Inv})$ остается тайной. По сравнению с этим или RSASSA-PKCS1-v1_5 или же РСАССА-ПСС, метод подписи вопроса:

  • Знаки почти в четыре раза медленнее, потому что он не может использовать $(n,e,d,p,q,d_p,d_q,q_\text{Inv})$ форма для $K_{dec}$
  • Проверяет примерно в сто-тысячу раз медленнее, потому что не может использовать маленькую $е$.

¹ С $n$ известно, если один из $е$ или же $д$ известно и меньше $n^{0,292}$, то другой можно найти, см. Боне и Дерфи. Поэтому обычное ограничение в 256 бит $е$ (например, встроенный в метод генерации ключей FIPS 186-4) такова, что раскрывающая $д$ позволяет найти $е$.

² Первоначальная рекомендациячто $д$ следует выбирать из достаточно большого множества, чтобы криптоаналитик не мог найти его прямым переборомзатем вычислить $е$ от $д$ было неадекватно и позволяло Винера атака, позже улучшенный Боне и Дерфи. Но сохраняя $д$ секрет и изготовление $е$ public, так как метод вопроса требует исправления этой проблемы.

флаг in
Прошу прощения, если я был неясен, но я полагаю, что вы неправильно понимаете мой вопрос так же, как и @poncho. Я не пытаюсь случайным образом засунуть ключи шифрования/дешифрования не в те дыры.
fgrieu avatar
флаг ng
@yoyo: в новой формулировке я согласен, что вы не «случайно засовываете ключи шифрования/дешифрования не в те дыры». Я пересмотрел свой ответ.
Рейтинг:5
флаг my

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

Если это не так, что пошло не так?

Идея выглядит так: «мы возьмем фундаментальную парадигму шифрования с открытым ключом «зашифровать с помощью ключа 1, а затем расшифровать с помощью ключа 2», назовем ключ 1 закрытым ключом, ключ 2 — открытым ключом и пуф у нас есть система подписи».

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

Фгриё уже начал с возражения, наиболее распространенного в отношении схем шифрования с открытым ключом; знание ключа 2 (который в схеме подписи становится открытым ключом) может позволить вам вывести ключ 1. Почти любая схема на основе дискретного журнала или ECC попадает в эту категорию.

Другие способы, которыми это может потерпеть неудачу:

  • Может случиться так, что, учитывая длинную серию сообщений и подписей, мы сможем вывести ключ 1. Ряд схем подписи на основе решетки потерпели неудачу именно по этой причине; оказалось, что каждая подпись пропускала часть закрытого ключа — очевидно, это было решено с помощью текущих схем подписи на основе решетки (таких как Falcon и Dilithium).

  • Может случиться так, что при знании открытого текста «зашифрованный текст» податлив. То есть мы можем изменить зашифрованный текст, чтобы расшифровать его в другой открытый текст. ClassicMcEliece (финалист 3-го раунда NIST) попадает в эту категорию.

Вывод: свойства безопасной системы шифрования с открытым ключом недостаточны для получения безопасной схемы подписи; если кто-то предлагает такую ​​схему подписи, она должна быть тщательно проверена (как и любая другая схема)

флаг in
Я не предлагаю «зашифровать закрытым ключом». Я говорю, что «зашифровать с помощью открытого ключа PKC» — это подпись, а «расшифровать с помощью закрытого ключа PKC» — это проверка. (Общие/закрытые роли ключей переключаются между PKC и схемой подписи.)
poncho avatar
флаг my
@yoyo: так что любой, у кого есть открытый ключ, может подписать, но только тот, у кого есть закрытый ключ, может подтвердить "? Это не соответствует стандартному значению подписи ...
флаг in
@poncho забудьте о публичном/частном (роли между приложениями меняются местами). Я несколько перефразировал вопрос, чтобы избежать путаницы.
poncho avatar
флаг my
@yoyo: похоже, что мой ответ подходит, тогда - с большинством современных схем шифрования с открытым ключом нет смысла «шифровать» с помощью закрытого ключа (тот, который вы держите в секрете) и «расшифровывать» с помощью открытого ключа (тот, который вы публикуете).

Ответить или комментировать

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