Зашифруйте закрытый ключ RSA и запишите его в файл, используя Crypto ++ - PullRequest
0 голосов
/ 03 июля 2018

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

int main()
{
    AutoSeededRandomPool rnd;
    const std::string publickey_str = 
    "-----BEGIN PUBLIC KEY-----\n"
    "rsa public key there\n"
    "-----END PUBLIC KEY-----";

    RSA::PublicKey master_publicKey;

    StringSource source(publickey_str, true);
    PEM_Load(source, master_publicKey);

    CryptoPP::RSAES_OAEP_SHA_Encryptor e(master_publicKey);

    InvertibleRSAFunction params;
    params.GenerateRandomWithKeySize(rnd, 4096);

    RSA::PrivateKey privateKey(params);

    FileSink file("exported.bin")

    //Method 1

    FileSink file("exported.bin")
    ArraySource export_private_key(privateKey, sizeof(privateKey),true, AuthenticatedEncryptionFilter(e, new Redirector(file))); //can't find a way to convert privateKey to a valid type for ArraySource

    //Method 2
    privateKey.Save( new AuthenticatedEncryptionFilter(e, new Redirector(file))); //doesn't work, as Save() expects BufferedTransformation

Есть ли способ достичь моей цели одним из этих двух способов, или мне нужно преобразовать свой закрытый ключ в другой формат (кодирование BER или PEM), прежде чем применять RSA к нему?

Заранее спасибо

P.S: Мой вопрос касается Windows, если он имеет какое-либо значение.

1 Ответ

0 голосов
/ 04 июля 2018

номер

RSA может только надежно зашифровать (намного) меньший объем данных, чем размер ключа, из-за требуемого безопасного заполнения - в данном случае OAEP. RSA, как и любой другой шифр, шифрует байтов , поэтому замена ключа на текст, безусловно, не поможет. Это также приведет к увеличению размера ключа, который необходимо зашифровать.

Что вы можете сделать, это использовать гибридное шифрование: сначала зашифруйте с помощью AES в безопасном режиме работы с новым случайным ключом, а затем зашифруйте ключ AES с помощью RSA.


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

...