Я пытаюсь написать простой файл enc / decryption в рамках более крупного проекта.
Я хотел бы избежать libgpgme из-за проблем с лицензией. Стандарт openPGP сложен для того времени проекта, которое у меня есть.
Я хотел бы сделать мои вещи шифрования с openssl.
Теперь я реализовал следующее:
шифрование (псевдокод):
RAND_bytes(aes_key)
RAND_bytes(aes_salt)
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1(), (const unsigned char *)aes_salt, aes_key, sizeof(aes_key), 5, key, iv);
тогда я aes256 мои данные
EVP_EncryptInit_ex(&e_ctx, EVP_aes_256_cbc(), NULL, key, iv);
затем я шифрую ключ и iv с помощью RSA
RSA_public_encrypt(flen, (unsigned char *)key, encryptedKey, rsa, RSA_PKCS1_PADDING );
RSA_public_encrypt(flen, (unsigned char *)iv, encryptedIV, rsa, RSA_PKCS1_PADDING );
затем я сохраняю 128-битный ключ и iv в верхней части моего файла (заголовок 256Bytes).
расшифровка:
-> прочитать первые 256 байт (разбить на ключ и iv)
-> расшифровать ключ и iv с помощью локального закрытого ключа RSA (конечно, секретный ключ RSA НЕ находится в файле)
-> используйте ключ и iv для расшифровки данных
Я в безопасности с этим кодом?