Использовать закрытый ключ RSA для генерации открытого ключа?
Я действительно не понимаю этого:
в соответствии с: http://www.madboa.com/geek/openssl/#key-rsa, вы можете сгенерировать открытый ключ из закрытого ключа.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Мое первоначальное мышление состояло в том, что они генерируются в паре вместе.
В личном ключе RSA содержится сумма? или открытый ключ?
Ответы
Ответ 1
openssl genrsa -out mykey.pem 1024
фактически создаст пару открытого ключа. Пара хранится в сгенерированном файле mykey.pem
.
openssl rsa -in mykey.pem -pubout > mykey.pub
извлечет открытый ключ и распечатает его. Здесь - ссылка на страницу, которая описывает это лучше.
РЕДАКТИРОВАТЬ: см. раздел примеров здесь. Чтобы просто вывести общедоступную часть закрытого ключа:
openssl rsa -in key.pem -pubout -out pubkey.pem
Ответ 2
Люди, которые ищут открытый ключ SSH...
Если вы хотите извлечь открытый ключ для использования с OpenSSH, вам нужно будет получить открытый ключ несколько иначе
$ ssh-keygen -y -f mykey.pem > mykey.pub
Этот формат открытого ключа совместим с OpenSSH. Добавьте открытый ключ к remote:~/.ssh/authorized_keys
, и вам будет хорошо идти
docs из SSH-KEYGEN(1)
ssh-keygen -y [-f input_keyfile]
-y Этот параметр будет читать частный файл формата OpenSSH и распечатать открытый ключ OpenSSH для стандартного вывода.
Ответ 3
Закрытый ключ RSA содержит всю информацию, необходимую для создания открытого ключа. В большинстве форматов, включая openssl, закрытый ключ представлен как объект PKCS # 1 RSAPrivatekey или его вариант:
A.1.2 Синтаксис секретного ключа RSA
Закрытый ключ RSA должен быть представлен типом ASN.1
RSAPrivateKey:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
Как вы можете видеть, этот формат имеет несколько полей, включая модуль и публичный показатель, и, следовательно, является строгим надмножеством информации в открытый ключ RSA.
Ответ 4
Открытый ключ не сохраняется в файле PEM, как думают некоторые люди. Следующая структура DER присутствует в файле закрытого ключа:
openssl rsa -text -in mykey.pem
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
Итак, для вычисления открытого ключа (модуля и публичного показателя) достаточно данных, что означает openssl rsa -in mykey.pem -pubout
Ответ 5
здесь в этом коде мы сначала создаем ключ RSA, который является приватным, но он имеет пару своих открытых ключей, поэтому, чтобы получить ваш фактический открытый ключ, мы просто делаем это
openssl rsa -in mykey.pem -pubout > mykey.pub
надеюсь, что вы получите его для получения дополнительной информации проверьте это
Ответ 6
Мой ответ ниже немного длинный, но, надеюсь, он содержит некоторые детали, которые отсутствуют в предыдущих ответах. Я начну с некоторых связанных утверждений и, наконец, отвечу на начальный вопрос.
Чтобы зашифровать что-либо с помощью алгоритма RSA, вам нужна параграф экспоненциального модуля и шифрования (public) (n, e). Это ваш открытый ключ. Чтобы расшифровать что-либо с помощью алгоритма RSA, вам нужна пара с показателем модуляции и дешифрования (private) (n, d). Это ваш закрытый ключ.
Чтобы зашифровать что-либо с помощью открытого ключа RSA, вы обрабатываете свой открытый текст как число и поднимите его на мощность модуля e n:
ciphertext = ( plaintext^e ) mod n
Чтобы расшифровать что-либо с помощью секретного ключа RSA, вы обрабатываете свой зашифрованный текст как число и поднимите его на мощность модуля d n:
plaintext = ( ciphertext^d ) mod n
Чтобы сгенерировать закрытый ключ (d, n) с помощью openssl, вы можете использовать следующую команду:
openssl genrsa -out private.pem 1024
Чтобы сгенерировать открытый ключ (e, n) из закрытого ключа с помощью openssl, вы можете использовать следующую команду:
openssl rsa -in private.pem -out public.pem -pubout
Чтобы проанализировать содержимое частного ключа RSA private.pem, сгенерированного командой openssl выше, выполните следующее (вывод здесь усечен на метки):
openssl rsa -in private.pem -text -noout | less
modulus - n
privateExponent - d
publicExponent - e
prime1 - p
prime2 - q
exponent1 - d mod (p-1)
exponent2 - d mod (q-1)
coefficient - (q^-1) mod p
Должен ли закрытый ключ состоять только из (n, d)? Почему есть 6 дополнительных компонентов? Он содержит e (публичный показатель), так что открытый ключ RSA может быть сгенерирован/извлечен/получен из частного ключа RSA private.pem. Остальные 5 компонентов должны ускорить процесс дешифрования. Оказывается, что, предварительно вычисляя и сохраняя эти 5 значений, можно ускорить расшифровку RSA с коэффициентом 4. Расшифровка будет работать без этих 5 компонентов, но это можно сделать быстрее, если вы им удобны. Алгоритм ускорения основан на Китайской теореме останова.
Да, private.pem закрытый ключ RSA фактически содержит все эти 8 значений; ни один из них не генерируется "на лету" при выполнении предыдущей команды. Попробуйте выполнить следующие команды и сравнить выходные данные:
# Convert the key from PEM to DER (binary) format
openssl rsa -in private.pem -outform der -out private.der
# Print private.der private key contents as binary stream
xxd -p private.der
# Now compare the output of the above command with output
# of the earlier openssl command that outputs private key
# components. If you stare at both outputs long enough
# you should be able to confirm that all components are
# indeed lurking somewhere in the binary stream
openssl rsa -in private.pem -text -noout | less
Эта структура закрытого ключа RSA рекомендуется PKCS # 1 v1.5 в качестве альтернативного (второго) представления. Стандарт PKCS # 1 v2.0 исключает показатели e и d из альтернативного представления вообще. PKCS # 1 v2.1 и v2.2 предлагать дальнейшие изменения в альтернативном представлении, необязательно включающие в себя больше компонентов, связанных с CRT.
Чтобы просмотреть содержимое общедоступного ключа RSA public.pem, выполните следующее (вывод здесь усечен на метки):
openssl rsa -in public.pem -text -pubin -noout
Modulus - n
Exponent (public) - e
Никаких сюрпризов здесь нет. Это просто (n, e) пара, как и было обещано.
Теперь, наконец, отвечая на начальный вопрос: Как было показано выше, частный ключ RSA, сгенерированный с помощью openssl, содержит компоненты как открытых, так и частных ключей и некоторых других. Когда вы генерируете/извлекаете/извлекаете открытый ключ из закрытого ключа, openssl копирует два из этих компонентов (e, n) в отдельный файл, который становится вашим открытым ключом.
Ответ 7
Use the following commands:
1. openssl req -x509 -nodes -days 365 -sha256 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
.............+++
..................................................................................................................................................................+++
writing new private key to 'mycert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
2. If you check there will be a file created by the name : mycert.pem
3. openssl rsa -in mycert.pem -pubout > mykey.txt
writing RSA key
4. If you check the same file location a new public key : mykey.txt will be created.