Cryptology Academy · Урок

RSA-PSS для цифровых подписей

Изучите кодирование PSS и соль, а также поймите, почему оно заменило PKCS#1 v1.5 для подписания

Урок 4 из 413 шагов

«RSA-PSS для цифровых подписей» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Введение

RSA-PSS (вероятностная схема подписи) — безопасная замена подписей PKCS#1 v1.5. Она использует рандомизированное кодирование для создания доказуемо безопасных подписей.

Недостатки подписей PKCS#1 v1.5

В подписях PKCS#1 v1.5 используется детерминированное кодирование DigestInfo. Известные атаки на подделку используют недостаточно строгие реализации проверки. Блайхенбахер (2006) показал возможность подделки подписей для некоторых средств проверки.

Цели проектирования PSS

Белларе и Рогавей, 1996 год: PSS добавляет случайную соль, чтобы сделать подписи вероятностными. Каждая операция подписания создаёт другую подпись. Схема доказуемо безопасна в модели случайного оракула — с точным сведением к сложности задачи RSA.

Шаги кодирования PSS

1. mHash = Hash(M) 2. salt = random(sLen bytes) 3. M' = 0x00×8 || mHash || salt 4. H = Hash(M') 5. DB = PS || 0x01 || salt 6. dbMask = MGF1(H, emLen - hLen - 1) 7. maskedDB = DB XOR dbMask 8. EM = maskedDB || H || 0xbc

Варианты длины соли

Варианты PKCS#1 v2.2: - MAX_LENGTH: соль такой же длины, как хеш (рекомендуется, максимальная безопасность) - DIGEST_LENGTH: соль равна длине хеша (стандартный вариант) - 0: детерминированная PSS (теряется вероятностное свойство, не рекомендуется) Python: padding.PSS.MAX_LENGTH

Проверка PSS

Восстановите EM = sig^e mod n. Разберите maskedDB и H. Вычислите M' из mHash (полученного из сообщения) и восстановленной соли. Проверьте H == Hash(M'). Соль не обязана совпадать — достаточно проверить H.

Сравнение безопасности PSS и v1.5

PSS: доказуемо безопасна, точное сведение, вероятностные подписи, немного более высокая вычислительная стоимость. v1.5: эвристически безопасна, детерминирована, быстрее, уязвима к атакам через оракул формата. Весь новый код должен использовать PSS.

PSS в TLS 1.3

TLS 1.3 требует RSA-PSS для всех подписей RSA. PKCS#1 v1.5 запрещена в новых расширениях TLS 1.3. Алгоритмы подписей: rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512.

PSS в Python

from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes # Sign sig = private_key.sign( message, padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH), hashes.SHA256() )

OID RSASSA-PSS

RSA-PSS имеет собственный тип ключа OID: id-RSASSA-PSS (1.2.840.113549.1.1.10). Ключи, созданные специально для PSS, используют этот OID и требуют подписания PSS (с v1.5 они не работают). Это рекомендуемый подход для новых развёртываний.

Рекомендации по усечённым хешам и соли

Безопасность PSS = min(|modulus|/2, |hash|) - 1 бит, когда salt_length = hash_length. Для RSA-2048 с SHA-256 это 128-битная безопасность. Согласуйте уровни безопасности: RSA-3072 + SHA-384 для 192-битной безопасности.

Быстрая проверка

Что делает подписи RSA-PSS «вероятностными» по сравнению с PKCS#1 v1.5?

Итоги

RSA-PSS — безопасный способ подписывать с помощью RSA. Далее мы освоим криптографию на эллиптических кривых, изучив геометрию и алгебру кривых.
Можно начать бесплатно

Изучай Cryptology Academy с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
67
Уроки
261

Часто задаваемые вопросы

Урок «RSA-PSS для цифровых подписей» бесплатный?

Да — полный текст урока «RSA-PSS для цифровых подписей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «RSA-PSS для цифровых подписей»?

Изучите кодирование PSS и соль, а также поймите, почему оно заменило PKCS#1 v1.5 для подписания Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «RSA-PSS для цифровых подписей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Учебный RSA и причины его небезопасности
  2. Дополнение PKCS#1 v1.5 и атака Блайхенбахера
  3. OAEP: оптимальное асимметричное дополнение шифрования
  4. RSA-PSS для цифровых подписей
← Назад к Cryptology Academy