2010-03-12 7 views
6

Cuál es mejor usar openssl o windows capi para problemas de ecnryption cuál es la lista pro y con para ambos. y si es posible escribir mi programa de cifrado en openssl y descifrarlo con capi de Windows sin problema o hay algún problema con esto.openssl versus windows capi

Respuesta

9

Para fines criptográficos, me resulta más fácil pensar primero en la administración de claves. Dónde se almacenan las claves, cómo se crean, quién las usa y cómo se destruirán de forma segura. En mi experiencia, la administración de claves es lo que limita la mayoría de la estructura de la aplicación.

CryptoAPI ofrece una API para acceder a las claves que se almacenan en lugares arbitrarios, a través de un controlador (un "CSP") registrado en el sistema operativo. OpenSSL puede ofrecer algo similar con la ayuda de OpenSC, pero el controlador deberá entonces soportar la API PKCS # 11. De cualquier manera, el controlador es algún tipo de DLL proporcionado por quien construyó el dispositivo de almacenamiento (suponiendo que la clave se almacena y utiliza en un dispositivo de hardware).

Si desea poder utilizar claves almacenadas en dispositivos de hardware (donde el dispositivo puede ser una tarjeta inteligente, un HSM, ... cualquier cosa que pueda hacer algo de criptografía pero se niegue a dar la clave), entonces lo hará tiene que pasar por CryptoAPI o PKCS # 11. CryptoAPI es, por naturaleza, solo para Windows, por lo que PKCS # 11 es el camino a seguir si desea que su código se ejecute potencialmente en sistemas que no sean de Windows (MacOS, Linux, Solaris ...). Si utiliza PKCS # 11, puede intentar NSS en lugar de OpenSSL. NSS es la biblioteca utilizada en el navegador derivado de Netscape (por ejemplo, Firefox). Es de código abierto.

Por otro lado, si apuntas solo a sistemas Windows, entonces CryptoAPI facilita la distribución, ya que ya está allí, no hay necesidad de una DLL adicional.

Si está listo para renunciar al hardware, y desea usar la criptografía solo software, con las claves almacenadas en la RAM, entonces probablemente no querrá usar CryptoAPI, que tiene poco poder en la cantidad de algoritmos que implementa y el variaciones que acepta (p. ej., CryptoAPI insiste en que los exponentes públicos de RSA sean menores de 32 bits; este es el caso normal, pero la limitación sigue siendo arbitraria y potencialmente fastidiosa). Hay muchas bibliotecas criptográficas por ahí; aparte de OpenSSL y NSS, es posible que desee investigar Crypto++, que es bastante maduro y supuestamente compatible con C++.

+1

[He estado luchando] (http://stackoverflow.com/q/43802185/267874) para hacer que OpenSSL en Windows trabaje con un HSM durante semanas y debo decir que su única respuesta aquí borró todo ¡imagen para mí! Usted, mi amigo, realmente sabe cómo proporcionar información clara y relevante. ¡Gracias! ¡Ahora me voy, probando el PKCS # 11, posiblemente multiplataforma ahora! –