Attualmente sto salvando un array di chiavi AES in un portachiavi come JSON, salvato come un file di testo / una colonna di testo SQL:
{
[
{
encryptedAesKey:RsaEncryptedBytesBase64Encoded==,
signature:RsaSignatureBytesBase64==,
keyId:0,
},
{
encryptedAesKey:RsaEncryptedBytesBase64Encoded==,
signature:RsaSignatureBytesBase64==,
keyId:1,
}
]
signature:HashAboveKeychainThenRsaSignatureBytesBase64==
}
Solo il titolare della chiave privata (ad esempio Alice) può decodificare le chiavi AES. Alice ha anche la sua chiave pubblica, quindi può verificare la firma prima dell'uso. Questo la protegge da Chuck che potrebbe interrompere la decrittazione AES di dati già crittografati creando una chiave AES casuale, crittografandola con la chiave pubblica di Alice e scrivendo dove viene salvato il JSON. Ma Chuck non può firmare così Alice non utilizzerà accidentalmente dati errati.
Quanto sopra ha funzionato per molti mesi, ma CMS / PKCS # 7 sembra interessante dal momento che è già stato progettato per la sicurezza e l'integrità dei dati definendo data envelope (encrypt) e data signature (signing).
Domanda: Oltre all'interoperabilità, quali ulteriori vantaggi si otterrebbero andando sulla rotta CMS / PKCS # 7?