¿Qué tan seguro es PKCS # 12

2

Necesito mover la identidad criptográfica del usuario entre varios dispositivos de usuario. En el sistema operativo solo tengo una opción: usar PKCS # 12 protegido por contraseña para importar la identidad al almacén seguro del sistema operativo.

Me pregunto qué tan seguro es PKCS # 12. ¿Se puede distribuir el archivo p12 por el canal inseguro? ¿Qué tan segura es en comparación con la solución donde se usa una contraseña fija para p12 (solo porque la API lo requiere), pero luego el resultado se cifra mediante la combinación de PBKDF2 + AES-256 en CBC + HMAC.

    
pregunta eofster 03.04.2014 - 12:01
fuente

1 respuesta

3

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).

    
respondido por el Tom Leek 03.04.2014 - 15:10
fuente

Lea otras preguntas en las etiquetas