Использовать закрытый ключ для шифрования и открытый ключ для расшифровки RSA - PullRequest
1 голос
/ 01 ноября 2019

Я хочу зашифровать файл с помощью закрытого ключа, используя OpenSSL с алгоритмом RSA

openssl rsautl -in txt.txt -out txt2.txt -inkey private.pem -encrypt

Теперь, если я выполняю операцию дешифрования

openssl rsautl -in txt2.txt -pubin -inkey public.pem -decrypt

Необходим закрытый ключ дляэта операция

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

1 Ответ

1 голос
/ 02 ноября 2019

Вы используете ключи неправильно. В криптографии с открытым ключом шифрование использует открытый ключ:

openssl rsautl -in txt.txt -out txt2.txt -inkey public.pem -pubin -encrypt

А для расшифровки используется закрытый ключ, связанный с открытым ключом:

openssl rsautl -in txt2.txt inkey private.pem -decrypt

Закрытый ключ ( без -pubin) можно использовать для шифрования, поскольку он фактически содержит открытый показатель. Обратите внимание, что RSA обычно не следует использовать для непосредственного шифрования данных, а только для «инкапсуляции» (RSA-KEM) или «обертывания» ключей, используемых для симметричного шифрования.

Но вы упоминаете, что действительно хотитеизучить подпись. Хотя исторически подпись RSA иногда описывалась как «шифрование с помощью закрытого ключа», это описание вводит в заблуждение и фактически реализует то, что оказалось небезопасным. Подписывать и проверять фактически разные операции, отличные от шифрования и дешифрования, и rsautl выполняет только часть из них. Например, вы можете сделать:

# hash the data and encode the result in ASN.1 
openssl rsautl -sign -in hashenc.dat -out sig.dat -inkey private.pem
...
# on the recipient (with signature and purportedly correct data)
openssl rsautl -verify -in sig.dat -out hashenc.dat -inkey public.pem -pubin 
# or often more appropriate use a certificate for the public key
openssl rsautl -verify -in sig.dat -out hashenc.dat -inkey cert.pem -certin
# now either decode hashenc.dat and compare the hash
# to a new hash of the data (which should be the same)
# or compare all of hashenc.dat to an encoding of a new hash

Вместо этого лучше использовать openssl dgst, который выполняет всю подпись и проверку последовательность , как указано в PKCS1 например, rfc8017 . Например, для подписи RSASSA-PKCS1v1_5 с SHA256 :

openssl dgst -sha256 -sign private.pem -in data.txt -out sig.dat
# or can be abbreviated
openssl sha256 -sign private.pem -in data.txt -out sig.dat
# hashes the data, encodes the hash, does type 1 padding and modexp d
...
openssl dgst -sha256 -verify public.pem -in data.txt -signature     sig.dat
# or abbreviated 
openssl sha256 -verify public.pem -in data.txt -signature sig.dat 
# does modexp e and type 1 unpadding, and compares the result to a hash of the data

# notice you don't specify which key is public or private
# because this command knows what to expect

# however it does not accept the public key from a certificate, 
# you must extract the public key from the cert first

Эта форма (но не rsautl) также поддерживает более новый и технически лучший, но не так широко используемый, заполнение PSS,Об этом упоминается только на справочной странице dgst, и в основном документируется на справочной странице pkeyutl, что не совсем очевидно.

В других стеках, где это более актуально, см., Например:https://security.stackexchange.com/questions/93603/understanding-digitial-certifications
https://security.stackexchange.com/questions/87325/if-the-public-key-cant-be-used-for-decrypting
https://security.stackexchange.com/questions/11879/is-encrypting-data-with-a-private-key-dangerous
https://security.stackexchange.com/questions/68822/trying-to-understand-rsa-and-its-terminology
https://crypto.stackexchange.com/questions/2123/rsa-encryption-with-private-key-and-decryption-with-a-public-key
https://crypto.stackexchange.com/questions/15997/is-rsa-encryption-the-same-as-signature-generation
https://crypto.stackexchange.com/questions/15295/why-the-need-to-hash-before-signing-small-data

...