2009-07-24 23 views
12

Después de leer (otra más) post por Jeff Atwood concluyendo más o menos que los desarrolladores mortales no deberían involucrarse demasiado con el cifrado, me pregunto qué biblioteca debería usar. Las únicas dos bibliotecas que he encontrado que parecen legítimas son entlib's y Bouncy Castle, pero no me parecen mucho más abstractas que las API de criptografía .NET.Biblioteca de cifrado .NET recomendada

Supongo que lo que me pregunto es si existe una "jQuery de bibliotecas de criptografía" que sea simple, ampliamente confiable, abierta y bien documentada.

+6

¿Qué pasa con 'System.Security.Cryptography'? – Thorarin

+3

@Thorarin - Eso es lo que siempre acabo de hacer, pero creo que la razón básica por la que alguien podría argumentar que no la usaría es porque hay tantas opciones en esa API que a menos que comprenda todo, terminará haciendo algo mal . – JeremyWeir

+0

El otro que menciona en el artcile es Keyczar – ChrisW

Respuesta

16

edición: Aquí está una lista completa de las bibliotecas populares de cripto https://github.com/quozd/awesome-dotnet/blob/master/README.md#cryptography:

  • BouncyCastle - junto con .NET System.Security.Cryptography, la implementación de referencia para algoritmos criptográficos en el CLR.
  • HashLib - HashLib es una colección de casi todos los algoritmos hash que he visto, es compatible con casi todo y es muy fácil de usar
  • libsodium-net - libsodium para .NET - Una biblioteca criptográfica segura
  • Pkcs11Interop - Gestionado envoltorio NET para PKCS # 11 bibliotecas no administrados que proporcionan acceso al hardware criptográfico
  • StreamCryptor - cifrado corriente & descifrado con libsodium y protobuf
  • SecurityDriven.Inferno - biblioteca de criptografía .NET. Profesionalmente auditado.

Respuesta original sigue.


La biblioteca del castillo hinchable es de hecho una biblioteca de cifrado muy respetado, y maduro, pero lo que es malo en usar muchas de las fantásticas funciones de cifrado que se construyen a la derecha en el marco .NET?

System.Security.Cryptography Namespace

En mi experiencia, estas implementaciones son roca sólida, proporcionan numerosas opciones (por ejemplo: por lo general, tiene un Crypto API, CNG y administrados implementaciones de cada algoritmo para elegir), y' No vamos a "equivocarnos", ya que solo está usando la implementación. Si está un poco preocupado de que pueda usar incorrectamente, siempre puede seguir MSDN's own example code.

+1

Creo que el artículo (y sus predecesores) con el que me vinculé da razones bastante convincentes de por qué la mayoría de los desarrolladores de nosotros probablemente no deberían ser demasiado de distancia usando ese espacio de nombres. Así que supongo que eso es todo para decir que estoy saliendo, lo que parece un buen consejo. http://www.codinghorror.com/blog/archives/001275.html – JeremyWeir

+0

Se vincula a un ejemplo de implementación rijndael, pero eso me obliga a decidir entre todos los diferentes algoritmos. Preferiría una abstracción que me diera métodos como EncryptStringForBrowser() (un ejemplo dado por Jeff) para que un experto pueda decidir usar rijndael o aes bajo el capó. – JeremyWeir

+0

@jayrdub - Veo lo que está diciendo sobre abstracción, pero no creo que sea necesaria una capa completa completa de código adicional (según una lib de terceros como BC). No quiere implementarlo usted mismo por una buena razón, y no quiere "mal usar" la implementación y debilitar la seguridad. Todo es bueno, pero creo que esto se puede lograr fácilmente con las clases incorporadas en el marco y el código de ejemplo en MSDN. El ejemplo muestra una función de estilo "encryptStringToBytes" que lo convierte en "fácil de usar" para usar en cadenas sin debilitar la seguridad. – CraigTP

6

Usted ha malinterpretado por completo la máxima "no implementan cifrado rutinas de ti mismo". Lo que esto significa es: no mueva su propio algoritmo de encriptación RSA/DSA/whatever. No significa que no deba usar uno escrito por alguien que sepa lo que está haciendo. De hecho, en todo caso, agregar más capas entre usted y el algoritmo de confianza le hará daño, y no al revés.

+0

Estoy de acuerdo con eso. –

+1

También significa "no hacer su propio algoritmo". El enfoque de "No veo cómo lo rompería así que no puedo ver cómo lo haría nadie más" no te da seguridad. –

+1

No estoy en desacuerdo, solo estoy tratando de comprender si hay alguna biblioteca impresionante que me haya perdido por la forma en que Jeff discute el intentar evitar el uso de la API de .NET a favor de "un conjunto probado de código probado por un experto en el dominio en el que ya cuentan miles de desarrolladores, si no millones". Me da la sensación de que no hay (además de los dos que mencioné). – JeremyWeir

0

bloque EntLib criptografía funciona bien para la mayoría de las necesidades de cifrado/hash.