Подпись, совместимая с RSA PKCS#1

Я использую стандарт PKCS#1 2.0 (OAEP) (подпись с приложением), но есть некоторые непонятные мне моменты.

  1. Что такое физический объект, который подписывается? Я знаю, что это значение хеш-функции и так далее (я действительно знаю алгоритм), но вычисляется ли оно из двоичной формы файла, независимо от его содержимого?

  2. Каков физический результат подписания? Файл, содержащий подписанный хеш? Должен ли этот файл быть помещен в указанное место? Каков формат или расширение такой вещи?

  3. Если у меня есть несколько файлов, которые я хочу подписать, нужно ли выполнять эту операцию отдельно для каждого из них? Или они должны быть объединены? Еще раз - каков результат такой операции (файл?)?


person Marc Andreson    schedule 22.07.2010    source источник
comment
Обратите внимание, что заполнение OAEP используется для шифрования, но не для подписей. Вы должны либо использовать старое (но все еще популярное) заполнение PKCS #1 v1.5, либо заполнение PSS.   -  person Accipitridae    schedule 26.07.2010


Ответы (1)


PKCS # 1 иногда называют «сырым RSA» и представляет собой низкоуровневый криптографический примитив: он не работает с файлами и не создает файлы, он работает с необработанными данными: вход — это число меньше, чем открытый ключ и выход. - это число размера открытого ключа (например, 1024 бита для RSA-1024).

Если вам нужен файл подписи, вы, вероятно, захотите использовать PKCS#7/CMS. формат, так как это наиболее часто используемый формат подписи как для прикрепленных, так и для отдельных подписей (даже подписи в файлах PDF обычно представляют собой конверты PKCS#7).

PS: я мало что знаю об OAEP, но из того, что я читал, кажется, что это схема заполнения (что-то, что вы делаете с данными перед необработанной подписью), поэтому мой аргумент должен оставаться в силе.

person lapo    schedule 23.07.2010
comment
Я добавляю, что подпись PKCS#7 является объектом, намного более сложным (и большим), чем простая подпись PKCS#1, и включает в себя использование сертификатов X.509 среди прочего, так что это может быть не то, что вы ищете, в зависимости от обстоятельства. OTOH — это полный формат, который поддерживается многими программами и может быть правильно проверен, в то время как если вы используете голый PKCS # 1, то, что вы с ним делаете, в основном зависит от вас. - person lapo; 23.07.2010
comment
Введенная вами формулировка представляет собой число, меньшее, чем открытый ключ, совершенно неясно. Ввод представляет собой либо массив байтов почти произвольной длины, который сначала хэшируется, а затем подписывается, либо это уже хэш-дайджест, который затем непосредственно подписывается. Какой из них зависит, конечно, от интерфейса используемой криптобиблиотеки. - person Accipitridae; 24.07.2010
comment
Нет, PKCS#1 включает заполнение, чтобы сделать ввод достаточно большим, но не включает хэширование или различие между прикрепленной и отдельной подписью, это то, что управляется на более высоком уровне, как в PKCS#7. - person lapo; 26.07.2010
comment
Это глупо. С одной стороны, вы понятия не имеете, что такое OAEP, с другой стороны, вы упрямо настаиваете на том, что подписи PKCS #1 не используют хеш-функции. Это приносит вам заслуженный отрицательный голос. - person Accipitridae; 26.07.2010
comment
Это не глупо, это просто потому, что в промежутке времени между моим первым и вторым сообщением я прочитал документацию по OAEP и проверил предоставленную информацию. Да, OAEP использует хеш для внутренних целей, но не для хеширования входного файла; на самом деле, он указывает, что максимальный размер ввода строго меньше размера RSA на приличную величину (раздел 7.1.1 официальной документации PKCS#1v2.1): M ≤ k - 2 hLen - 2. - person lapo; 28.07.2010
comment
Вы читаете не тот раздел. OAEP = оптимальное заполнение асимметричного шифрования. Третье слово имеет решающее значение. OAEP занимается шифрованием, а не подписями. - person Accipitridae; 28.07.2010