Являются ли подписи RSA уникальными? - PullRequest
4 голосов
/ 04 мая 2011

Я хочу знать, являются ли сигнатуры RSA уникальными для данных.

Предположим, у меня есть строка "привет".Метод вычисления подписи RSA состоит в том, чтобы сначала получить дайджест sha1 (я знаю, что это не требуется для данных), затем добавить заголовок с упомянутыми OID и схемой заполнения и выполнить некоторое математическое перемешивание, чтобы дать подпись.

Теперь, предполагая, что отступы одинаковы, будет ли подпись, генерируемая openSSL или Bouncy Castle, такой же?

Если да, я боюсь только, не будет ли легко вернуть "текст" / данные??

Я на самом деле пытался сделать подпись RSA для некоторых данных, и подписи от OpenSSL и BC отличались.Я повторил это, но снова и снова получал одну и ту же подпись для каждого из них.Я понял, что две сигнатуры методов были разными из-за разницы в заполнении.Однако я все еще не уверен, почему подписи каждой из библиотек одинаковы, и я повторяю их.Кто-нибудь может дать простое объяснение?

Ответы [ 3 ]

9 голосов
/ 04 мая 2011

«Обычная» схема заполнения, описанная в PKCS # 1 как заполнение «старого стиля, v1.5», является детерминированной. Это работает так:

  • Данные для подписи хэшируются (например, с помощью SHA-1).
  • Добавлен фиксированный заголовок; этот заголовок фактически является структурой ASN.1, которая идентифицирует хеш-функцию, которая только что использовалась для обработки данных.
  • Добавляются байты заполнения (слева): 0x00, затем 0x01, затем несколько байтов 0xFF, затем 0x00. Количество байтов 0xFF корректируется таким образом, чтобы итоговая общая длина была точно длиной байта модуля (то есть 128 байтов для 1024-битного ключа RSA).
  • Дополненное значение преобразуется в целое число (которое меньше модуля), которое проходит модульное возведение в степень, которое лежит в основе RSA. Результат преобразуется обратно в последовательность байтов, и это подпись.

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

Однако имеется небольшая занижение в фиксированном заголовке на основе ASN.1. Это структура, которая идентифицирует хеш-функцию вместе с «параметрами» для этой хеш-функции. Обычные хеш-функции не принимают параметров, поэтому параметры должны быть представлены либо специальным значением «NULL» (которое занимает несколько байтов), либо должны быть вообще опущены: оба представления являются приемлемыми (хотя первое, предположительно, предпочтительнее). Таким образом, необработанный эффект состоит в том, что для данной хэш-функции существует две версии «фиксированного заголовка». OpenSSL и Bouncycastle не используют один и тот же заголовок. Тем не менее, подпись верификаторы должны принимать оба.

PKCS # 1 также описывает более новую схему заполнения, называемую PSS, которая является более сложной, но с более надежным доказательством безопасности. PSS включает в себя несколько случайных байтов, поэтому каждый раз вы будете получать отдельную подпись.

3 голосов
/ 04 мая 2011

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

Тем не менее, помните, что подписи RSA создаются с использованием закрытого ключа подписавшего. Получив такую ​​подпись, вы можете использовать открытый ключ подписавшего, чтобы «отменить» преобразование RSA (поднять подпись сообщения до e , mod n ) и получить SHA1 или другой хеш значение, которое было предоставлено в качестве входных данных. Вы все еще не можете отменить хэш-функцию, чтобы получить исходный текст, соответствующий подписи, которая была отсоединена от его сообщения.

RSA для шифрования - это другое дело. Методы заполнения для шифрования здесь включают в себя случайные данные, чтобы избежать анализа трафика.

0 голосов
/ 04 мая 2011

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

...