Actualmente estoy guardando una matriz de claves AES en un llavero como JSON, guardado como un archivo de texto / columna de texto SQL:
{
[
{
encryptedAesKey:RsaEncryptedBytesBase64Encoded==,
signature:RsaSignatureBytesBase64==,
keyId:0,
},
{
encryptedAesKey:RsaEncryptedBytesBase64Encoded==,
signature:RsaSignatureBytesBase64==,
keyId:1,
}
]
signature:HashAboveKeychainThenRsaSignatureBytesBase64==
}
Solo el titular de la clave privada (por ejemplo, Alice) puede descifrar las claves AES. Alice también tiene su propia clave pública, por lo que puede verificar la firma antes de usarla. Esto la protege contra Chuck, que podría interrumpir el descifrado AES de los datos ya cifrados al crear una clave AES aleatoria, cifrarla con la clave pública de Alice y escribir donde se guarda el JSON. Pero Chuck no puede firmar, por lo que Alice no usará datos erróneos accidentalmente.
Lo anterior ha estado funcionando durante muchos meses, pero CMS / PKCS # 7 parece atractivo ya que ya está diseñado para la seguridad e integridad de los datos al definir sobres de datos (cifrado) y firmas de datos (firma).
Pregunta: Aparte de la interoperabilidad, ¿qué beneficios adicionales tendría uno al ir por la ruta CMS / PKCS # 7?