Quiero usar un esquema de cifrado híbrido para el cifrado de archivos. El esquema debe usar PKCS # 1 v1.5, que es vulnerable a los ataques de Oracle oracle, porque muchas tarjetas inteligentes (por ejemplo, la tarjeta OpenPGP) solo son compatibles con PKCS # 1 v1.5.
Así que se me ocurrió el siguiente esquema (las claves RSA tienen un tamaño de 4096 bits, el algoritmo simétrico es AES-256-CTR o ChaCha-20 con claves de 256 bits y, por supuesto, se utilizan diferentes claves para la firma y el cifrado Y, por supuesto, sé que para los cifrados de flujo, los IVs absolutamente únicos deben usarse con la misma clave):
Encriptación:
var privateSigningKey;
var publicEncryptionKey;
--- var encryptedBlock = encryptAsym(sessionKey, iV) + encryptSym(data + hash(data));
+++ var encryptedBlock = encryptAsym(sessionKey, iV) + encryptSym(data + sign(data));
var signatureBlock = sign(encryptedBlock);
var encryptedData = encryptedBlock + signatureBlock;
return encryptedData;
Descifrado:
var trustedPublicKeys[];
var signatureBlock = encryptedData.getSignatureBlock();
var encryptedBlock = encryptedData.getEncryptedBlock();
var sender = "";
for each trustedPublicKey do {
bool signatureValid = verifySignature(encryptedBlock, signatureBlock, trustedPublicKeys[i].getSigningKey();
if (signatureValid) sender = trustedPublicKeys[i].getName();
}
if (sender == "") exit("Untrusted signature; stopping to prevent padding oracle attacks.");
var plainDataBlock = decryptHybrid(encryptedBlock);
--- var hash = plainDataBlock.getHash();
+++ var signature = plainDataBlock.getHash();
var plainData = plainDataBlock.getPlainData();
--- if (hash != hash(plainData)) exit("Decryption failed.");
+++ if (signature != sign(plainData)) exit("Decryption failed; untrusted signature.");
return plainData;
¿Se puede considerar seguro este esquema? ¿O hay algún problema de seguridad o mejores alternativas?
Sé que normalmente no haces tu propio cripto; pero no puedo usar el formato OpenPGP porque no evita los ataques de relleno (consulte esta pregunta ) y no conozco ninguna alternativa mejor.
Editar: Esquema actualizado