PKCS # 12 es un formato extremadamente flexible, por lo que cualquier respuesta a su pregunta es relativa a lo que decidió el productor del archivo hacer: qué algoritmos, qué parámetros ...
Normalmente, cuando realiza un cifrado basado en contraseña, terminará con 3DES o AES, y el algoritmo de derivación de clave es PBKDF2 con un parámetro de costo que no puedes elegir. Para hacer la historia corta, esto será tan seguro ya que estas cosas pueden ser SI (y eso es un gran "si") la contraseña utilizada es fuerte .
Para un caso de uso especializado, puede generar la "contraseña" como una gran clave real: tome su PRNG seguro criptográficamente favorito (por ejemplo, /dev/urandom
en Linux y MacOS X) y utilícelo para producir una secuencia de 24 hexadecimales aleatorios dígitos Esto ofrecerá 96 bits de entropía, y las cosas estarán bien. La confidencialidad de la clave privada en el archivo PKCS # 12 se mantendrá, y la integridad se verificará de manera confiable.
Una forma sencilla de generar una "contraseña" tan aleatoria en un sistema Linux es:
(dd if=/dev/urandom bs=16 count=1 2>/dev/null) | sha1sum | cut -b 1-24
En Windows puedes usar PowerShell:
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$buf = New-Object byte[] 12
$rng.GetBytes($buf)
([System.BitConverter]::ToString($buf) -replace "-", "").ToLowerInvariant()
Si realmente desea agregar una capa adicional, la forma razonable es no para ensamblar un algoritmo de cifrado simétrico y un MAC: estas cosas son engañosamente difíciles, lo que significa que es fácil hacer algo que funciona , mucho más difícil de hacer algo que es fuerte , y mucho más difícil de hacer algo que se pueda comprobar que sea fuerte. En su lugar, use un protocolo existente que sea compatible con una implementación existente y bien examinada. Sugiero GnuPG (el formato OpenPGP implementado por GnuPG soporta tanto el cifrado simétrico como el asimétrico).