Вопрос касательно сертификатов RSA и Oauth - PullRequest
1 голос
/ 03 марта 2011

Я создаю библиотеку Oauth для CodeIgniter, короткий вопрос о подписи подписи с использованием RSA-SHA1 в Oauth. Документация Oauth (http://oauth.net/core/1.0/) гласит:

9.3.1. Генерация подписи

Подпись базовой строки подписана используя закрытый ключ RSA потребителя согласно [RFC3447] (Jonsson, J. and B. Калиски, «Криптография с открытым ключом» Стандарты (PKCS) # 1: криптография RSA; Технические характеристики Версия 2.1 ».) раздел 8.2.1, где K является Закрытый ключ RSA потребителя, M Подпись Базовая строка, и S является строка октета подписи результата:

            S = RSASSA-PKCS1-V1_5-SIGN (K, M)

oauth_signature устанавливается в S, сначала в кодировке base64 согласно [RFC2045] (Freed, Н. и Н. Боренштейн, «Многоцелевой Часть интернет-почты (MIME) Один: формат интернет-сообщения Тела », раздел 6.8, затем URL-кодирование в соответствии с кодировкой параметров (Кодирование параметров).

Так я должен предположить, что пользователь уже знает свой закрытый ключ? Или мне нужно вытащить его из личного сертификата?

Спасибо за ваше время.

1 Ответ

3 голосов
/ 03 марта 2011

Не существует такого понятия, как «личный сертификат». Сертификат всегда по определению общедоступен.

Сертификат специально содержит идентификатор (в основном, имя чего-либо или кого-либо) и открытый ключ . Открытый ключ может использоваться для проверки подписей, которые были сгенерированы с использованием соответствующего личного ключа . Закрытый ключ - , а не в сертификате.

К сожалению, некоторые распространенные «документации» называют «сертификат» (или «цифровая идентификация» или даже «личный сертификат») объединением в единый архив сертификата и соответствующего закрытого ключа. , Такие архивы часто следуют формату файла PKCS # 12 (часто называемому «P12»), известному в мире Microsoft как «PFX». (Большая часть сложности использования криптографии на практике заключается в том, чтобы пройти через несколько уровней небрежно используемой терминологии; аналогично, сам OAuth называет HMAC / SHA-1 «сигнатурой», что неверно.)

Документация OAuth гласит в разделе 9.3:

Метод подписи RSA-SHA1 использует алгоритм подписи RSASSA-PKCS1-v1_5, как определено в разделе 8.2 [RFC3447] (более просто известный как PKCS # 1), используя SHA-1 в качестве хэш-функции для EMSA-PKCS1-v1_5 , Предполагается, что Потребитель предоставил провайдеру услуг свой открытый ключ RSA проверенным способом, выходящим за рамки данной спецификации.

, что означает, что:

  • Потребитель имеет доступ к закрытому ключу RSA
  • Поставщик услуг знает соответствующий открытый ключ «проверенным способом»

и то, как это делается, выходит за рамки спецификации OAuth. Предположительно, в какой-то момент Потребитель показал свой открытый ключ Поставщику услуг, возможно, как часть сертификата (который Поставщик услуг должным образом проверил согласно X.509 правилам), или с помощью другого средства, которое обеспечивает «проверку». Дело в том, что подпись, вычисляемая с использованием закрытого ключа, является убедительным доказательством того, что она была вычислена по тем же подписанным данным тем, кто контролирует закрытый ключ, соответствующий открытому ключу, который известен поставщику услуг; Поставщик услуг должен по-прежнему убедиться, что открытый ключ действительно принадлежит тому, кому он считает, что он принадлежит. Сертификаты - это общий и сложный способ сделать это.

...