Как я могу создать действительный закрытый ключ (в любом формате) из простых чисел? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть необходимые компоненты для создания частного / открытого ключа RSA: N, E, D, P и Q. Я могу вывести другие значения для CRT при необходимости. Как я могу использовать эти параметры для создания действительного частного / открытого ключа в DER, PEM или PKCS # 7? Для меня не имеет значения, что я могу сделать между ними. Я ищу инструмент, библиотеку, скрипт или программу, которая поддерживает присваивание этих значений и запись правильного файла, поэтому мне не нужно читать сотни страниц в ASN.1. Каждый инструмент, на который я смотрел, не раскрывает этот вариант использования в API.

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Если вы используете Java, существует класс RSAPrivateKeySpec, который принимает BigInteger аргументы модуля и экспоненты. Существуют подклассы, которые вместо N принимают простые числа P и Q (для большей эффективности). Затем можно использовать KeyFactory для преобразования этого объекта в ключ, а затем в некоторый класс EncodedKeySpec, например PKCS8EncodedKeySpec или X509EncodedKeySpec .

0 голосов
/ 13 сентября 2011

Вы должны быть в состоянии использовать OpenSSL (библиотека).

BIGNUM описан здесь . Есть много функций для создания BIGNUM из вашего ввода (в зависимости от формата). BN_bin2bn, вероятно, самый простой, но также поддерживается шестнадцатеричный или десятичный ввод.

RSA - это структура, которая содержит BIGNUM. Это описано здесь . Вы можете инициализировать его самостоятельно (напрямую).

Затем вы можете написать структуру RSA, используя одну из функций PEM (описано здесь ). Например, PEM_write_RSAPrivateKey записывает PEM-файл, содержащий закрытый ключ (вы также можете зашифровать его, если хотите).

Я не знаю ни одного инструмента, который бы делал все вышеперечисленное. Кроме того, ASN.1 не так уж плох (открытый / закрытый ключ в значительной степени является ПОСЛЕДОВАТЕЛЬНОСТЬЮ ИНТЕГРОВ).

...