Рейтинг:1

Подделка цифровой подписи

флаг hu

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

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

Выражается символически: Пусть цифровая подпись — s, сообщение — m, открытый ключ Алисы — pk, функция верификации — верификация, а хеш-функция — хэш.

Хакер выбирает m и s так, что hash(m) == verify(s, pk)

fgrieu avatar
флаг ng
«_Зашифровать_ с помощью закрытого ключа» / «открытый ключ для _расшифровки_» — плохая терминология: шифрование направлено на то, чтобы сделать зашифрованное непонятным для тех, кто не хранит секрет, а возможность дешифрования с помощью чего-то общедоступного противоречит этому. В подписи один _signs_ с закрытым ключом, _verify_ с открытым ключом, Неверное понимание вопроса о подписи. Среди широко используемых систем подписи многие (EdDSA, ECDSA..) работают совершенно по-разному, и ни одна из них не работает так, как эта. Пожалуйста [отредактируйте] (https://crypto.stackexchange.com/posts/99824/edit) вопрос, чтобы указать источник этого (неправильного) понимания.
fgrieu avatar
флаг ng
Ответьте на [эти] (https://crypto.stackexchange.com/q/99740/555) [похожие] (https://crypto.stackexchange.com/q/99307/555) [вопросы] (https: //crypto.stackexchange.com/q/3184/555) помочь?
user216096 avatar
флаг hu
@fgrieu Мое понимание цифровых подписей основано на нескольких источниках. Вот один из примеров: https://www.techtarget.com/searchsecurity/definition/digital-signature?amp=1 Для создания цифровой подписи используется программное обеспечение для подписи, такое как программа электронной почты. путь хэш электронных данных, которые должны быть подписаны. Хэш — это строка фиксированной длины из букв и цифр, сгенерированная алгоритмом. Затем закрытый ключ создателя цифровой подписи используется для шифрования хэша. Зашифрованный хеш вместе с другой информацией, такой как алгоритм хеширования, является цифровой подписью.
fgrieu avatar
флаг ng
В источнике, на который вы ссылаетесь, описывается один метод для создания одного типа подписи, но он не соответствует тому, как используется подпись или доступна через стандартные API/библиотеки, или сколько популярных схем подписи работает: EdDSA, ECDSA, RSA (SSA)-PSS. . Этот источник использует неправильную терминологию. Создается ложное впечатление, что мы можем превратить любое шифрование с открытым ключом в подпись. Это подтверждает опасную ложь, даже когда мы исправим терминологию: «единственный способ расшифровать/проверить данные с помощью открытого ключа подписавшего» оказывается неверным для той самой системы подписи, которую описывает источник.
user216096 avatar
флаг hu
@fgrieu Давайте представим, что я использовал «правильную» терминологию в своем исходном посте. Возможен ли описанный сценарий?
Рейтинг:2
флаг ng

TLDR: рассматриваемая атака непростая. Это возможно или нет, в зависимости от неустановленной гипотезы.


Сначала мы перефразируем вопрос¹.

Мы предполагаем асимметричную систему шифрования, похожую на учебник RSA, с

  • генерация ключей из пары открытый/закрытый ключ $(\mathrm{pk},\mathrm{sk})$,
  • шифрование $c:=E_\mathrm{pk}(p)$ куда $р$ открытый текст, $с$ это зашифрованный текст
  • совпадающая расшифровка $p:=D_\mathrm{sk}(c)$ это работает для всех $с$ получен как $E_\mathrm{пк}(п)$
  • куда $р$ и $с$ из общего интервала $[0,n)$, с $n$ встроенный в $\mathrm{пк}$ и $\mathrm{sk}$.

Мы предполагаем, что эта система шифрования безопасна при атака по известному открытому тексту.

Мы предполагаем идеал хэш-функция $\operatorname{хеш}$ с выходом в $[0,ч)$, с $ч\ле п$ для всех $(\mathrm{pk},\mathrm{sk})$ генерирует система шифрования.

Мы получаем цифровая подпись схема где

  • генерация ключей как в шифровании
  • подпись сообщения $м$ является $s=D_\mathrm{sk}(\operatorname{Hash}(m))$
  • процедура проверки $\mathrm{Vrfy}_\mathrm{pk}(м,с)$ выходы Проходят если $\operatorname{Хэш}(м)=E_\mathrm{pk}(s)$, или же Потерпеть поражение в противном случае.

Я подчеркиваю, что это не обычный способ построения подписи: ни одна широко используемая схема подписи не соответствует ², и многие из них, такие как DSA, ECDSA, EdDSA, очень разные.

Вопрос заключается в том, может ли хакер выбрать $м$ и $s$ такой, что $\mathrm{Vrfy}_\mathrm{pk}(м,с)$ вывод Проходят, то есть такое, что $\operatorname{Хэш}(м)=E_\mathrm{pk}(s)$.


Хорошие новости: система подписи успешно проверяет, когда сообщение и подпись не изменены. Аргумент: поскольку входной и выходной набор шифрования $E_\mathrm{пк}$ одинаковые, и есть функция расшифровки $D_\mathrm{sk}$ который инвертирует $E_\mathrm{пк}$ для всех $р$, обе $E_\mathrm{пк}$ и $D_\mathrm{sk}$ являются перестановками этого множества, одна обратна другой. Таким образом, для всех $с$ в этом наборе он выполняется $E_\mathrm{pk}(D_\mathrm{sk}(c))=c$. Применяя это с $c=\operatorname{Хеш}(м)$, что условие $ч\ле п$ делает возможным для всех $м$, мы получаем это $E_\mathrm{pk}(s)=E_\mathrm{pk}(D_\mathrm{sk}(\operatorname{Hash}(m)))=\operatorname{Hash}(m)$, следовательно $\mathrm{Vrfy}_\mathrm{pk}(м,с)$ вывод Проходят.

Еще одна хорошая новость: противникам нелегко приходится владельцу $\mathrm{пк}$ выбирать $м$ и $s$ такой, что $\operatorname{Хэш}(м)=E_\mathrm{pk}(s)$. Кажется, ничего простого не работает:

  • Когда противники сначала выбирают произвольный $м$, и вычислить $c=\operatorname{Хеш}(м)$, что $с$ является случайным, за исключением того, что находится в нижнем подмножестве $[0,ч)$ из $[0,n)$. Когда они в следующий раз попытаются найти $s$ с $c=E_\mathrm{pk}(s)$, они, по сути, сталкиваются с проблемой расшифровки произвольного зашифрованного текста, и это сложно (можно доказать, что расшифровка произвольного зашифрованного текста должна быть сложной в соответствии с гипотезой KPA, которую мы сделали о шифре).
  • Когда противники сначала выбирают произвольный $s$ и вычислить $E_\mathrm{pk}(s)$, они получают произвольное значение $с$ в $[0,n)$. Нет такой страховки $с$ находится в пределах досягаемости $[0,ч)$ (а если нет, то это не может быть хэш любого сообщения $м$). Даже если противники смогут обойти это препятствие, выбрав $s$ так что $с$ находится в пределах досягаемости $[0,ч)$ (что позволяет учебник RSA, например, делая $с=0$ или же $s=1$), идеальная хеш-функция такова, что ее сложно найти с вычислительной точки зрения. $м$ который хэширует до произвольного заданного значения $с$ в выходном диапазоне хэша: это первое сопротивление прообраза хеша.
  • Когда противники захватывают $(м,с)$ пару, прошедшую проверку, они могут попытаться найти $м'$ Кроме как $м$ с $\operatorname{хеш}(m')=\operatorname{хэш}(m)$, что гарантировало бы, что $(м',с)$ проходит проверку. Но идеальная хэш-функция такова, что сделать это сложно с вычислительной точки зрения: это второе сопротивление прообразу хеш-функции.
  • Злоумышленники могут попытаться создать два разных сообщения $м$ и $м'$ с $\operatorname{хэш}(m)=\operatorname{хэш}(m')$, получить подпись $s$ из $м$, и, таким образом, подделал бы еще один $(м',с)$ который проходит проверку. Это намного проще, чем предыдущие атаки (например, это возможно с SHA-1 в качестве $\operatorname{хеш}$, когда ни одна из предыдущих атак невозможна), но, тем не менее, идеальная хеш-функция такова, что сделать это сложно с вычислительной точки зрения: это устойчивость хэша к коллизиям.

Вышеупомянутое не является действительным доказательством безопасности, и, что еще хуже, было бы очевидно ошибочным заключение, что система подписи безопасна. В частности, с $ч=2^{256}$ (например, хэш — SHA-256), а когда система шифрования представляет собой учебник RSA, эта система подписи уязвима для возможной подделки. Предположим, система с купонами $м$ формы
 Купон на сумму 123 456,78 долларов США, номер 4C0D5F62CAF6AF32.
Предположим, подписывающая сторона проверяет, что предлагаемый $м$ является хорошо оформленным купоном, что его ссылка уникальна, получает оплату по указанной цене и при этих условиях подписывает $м$. Атака Десмедта и Одлызко пусть злоумышленники обыгрывают эту систему, покупая подписи купонов с низкой стоимостью и используя эти подписи, чтобы найти подпись купона с высокой стоимостью.

Хорошие новости: с некоторой добавленной гипотезой можно доказывать что эта система подписи безопасна. Гипотеза, которая работает для RSA, заключается в том, что $ч$ имеет почти столько же битов, сколько $n$. Эта система подписи известна как Полный хэш домена. Доказательство настолько сложное, что, когда Михир Белларе и Питер Рогавей впервые рассмотрели FDH: Точная безопасность цифровых подписей — как подписывать с помощью RSA и Рабина, в материалы Eurocrypt 1996, они не смогли доказать удовлетворительный уровень безопасности (и разработали более сложную систему подписи: RSA-PSS, основу широко используемой РСАССА-ПСС). Спустя годы Жан-Себастьян Корон добился более высокого уровня безопасности: О точной безопасности полного хэша домена, в материалы Crypto 2000 (но подпись RSA уже стабилизировалась, а FDH не получил широкого распространения).


¹ Основные отличия в формулировке вопроса:

  • Мы подписываемся дешифрованием, а не шифрованием, потому что шифрование закрытым ключом и возможность расшифровки открытым ключом противоречит цели шифрования. Также это не работает на практике, в том числе с реализованным RSA, даже если убрать этапы заполнения: формат открытого ключа $(п,е)$ часто с ограничением размера для $е$, формат закрытого ключа $(n,e,d,p,q,d_p,d_q,q_\text{inv})$, и попытка засунуть публичный ключ туда, где ожидается приватный ключ, или наоборот, не удалась.
  • Мы указываем конечный набор зашифрованного текста того же размера, что и набор открытого текста, следовательно, детерминированное шифрование, иначе при нормальном использовании генерация или проверка подписи иногда терпят неудачу.
  • Мы делаем сообщение входом процедуры проверки, потому что именно так подпись определяется в теории и современных практических реализациях.

² RSASSA-PKCS1-v1_5 единственный, кого я знаю, который подходит близко, однако это $\operatorname{хеш}$ строится путем конкатенации префикса в зависимости от размера бита $n$ и $Ч(м)$, куда $Ч$ является стандартным хэшем, таким как SHA-256, поэтому $\operatorname{хеш}$ не является идеальной хеш-функцией, поскольку ожидается, что она будет выглядеть случайной в выходной области.

Рейтинг:0
флаг in

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

В системе RSA генерация подписи аналогична шифрованию, поскольку модульное возведение в степень с одним ключом (модулем и показателем) является обратным модульной операции к возведению в степень с другим ключом.Однако на практике режимы заполнения RSA — OAEP против PSS или заполнения PKCS#1 v15 для шифрования или генерации подписи — различаются. Другие схемы подписи, такие как ECDSA, не имеют подобного сходства со схемой шифрования.

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

Это, конечно, логично: Боб не должен генерировать никаких поддельных подписей. В этом весь смысл схемы асимметричной подписи.

user216096 avatar
флаг hu
Не буду врать, большая часть вашего ответа прошла мимо меня. Можете ли вы порекомендовать какие-либо материалы для чтения, которые помогут мне лучше понять тему, чтобы я мог лучше понять ваш ответ?
Maarten Bodewes avatar
флаг in
Возможно, было бы неплохо прочитать спецификации PKCS#1; вы можете видеть, как генерируется подпись, она описана довольно хорошо.

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

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