¿Cuánto podemos confiar en las implementaciones de código abierto de las bibliotecas criptográficas (de seguridad)?

6

En uno de mis proyectos elegí bcrypt o PBKDF2 para el KDF para las contraseñas. He leído que bcrypt es generalmente más avanzado y scrypt es aún mejor. Pero estoy usando la plataforma .NET donde bcrypt / scrypt no está disponible en Microsoft, aunque hay varias implementaciones en nuget. Al final, decidí usar PBKDF2, ya que es una implementación predeterminada de MS que espero que sea revisada por algunos expertos en seguridad.

Pero la pregunta es: ¿cuál es el mejor curso de acción en tal situación? ¿Puede uno simplemente elegir la biblioteca mejor calificada con suficientes descargas de nuget y confiar en que es lo suficientemente bueno ya que muchas personas lo usan? ¿Cómo puedo saber si es lo suficientemente bueno entonces. ¿O es mejor usar algo de la plataforma si está disponible? Definitivamente no quiero implementar nada de eso yo mismo.

    
pregunta Ilya Chernomordik 08.02.2016 - 13:20
fuente

3 respuestas

3

Tiene tres ventajas y desventajas: PBKDF vs otro algoritmo, fuente abierta vs cerrado, y la disponibilidad de vectores de prueba.

SCrypt o BCrypt pueden darle algo más de seguridad que PBKDF2. Por otro lado, si hay un error de implementación en el código (como ocurrió a Ashley Madison) entonces obtienes mucha menos seguridad.

En la medida en que el código sea examinado, tales fallas pueden ser notadas, y aquí es donde ocurre el intercambio de código abierto. En teoría, cualquiera puede mirar el código. En la práctica, hay que preguntar cuántos expertos han mirado. La oferta de analistas criptográficos voluntarios es bastante escasa, como lo demuestran las fallas de OpenSSL. Con el código MS PBKDF, puede esperar que alguien que no sea el codificador haya realizado el control de calidad, y el código criptográfico recibe relativamente más atención en el ciclo de vida del desarrollo de la seguridad. A falta de otros indicadores de pruebas de seguridad, un nugget .NET utilizado por 100 personas probablemente tenga menos análisis que un componente de Microsoft.

Por último, si la memoria sirve, PBKDF tiene vectores de prueba, y los otros no, lo que hace que probar la implementación correcta de PBKDF sea más fácil que probar las implementaciones de scrypt o bcrypt.

Debería mencionar, hace años que rastreé las bibliotecas criptográficas gratuitas y luego, más tarde, trabajó en el equipo del ciclo de vida de desarrollo de seguridad de Microsoft, pero ya no lo hace. No creo que haya una respuesta simple a tu pregunta.

    
respondido por el Adam Shostack 08.02.2016 - 23:50
fuente
5
  

¿Cuánto podemos confiar en las implementaciones de código abierto de las bibliotecas criptográficas (de seguridad)?

Mucho mejor que la implementación de código cerrado.

Cuando se trata de la seguridad que realmente importa, debe seguir el principio "confiar pero verificar". Confíe en que es más probable que las implementaciones populares de código abierto sean correctas y suficientes globos oculares para detectar errores, pero verifique / audite el código usted mismo si realmente le importa.

Con la implementación de código abierto, puedes verificarlo tú mismo si realmente te importa. Con la implementación de código cerrado, solo tiene la palabra del proveedor.

En todo caso, la desconfianza sobre las bibliotecas de seguridad de código abierto es algo bueno; hace que algunas personas comiencen a auditarlos antes de usarlos, en lugar de confiar ciegamente en una implementación porque son populares.

    
respondido por el Lie Ryan 08.02.2016 - 14:33
fuente
1

Nunca codifique las bibliotecas de cifrado o hash, sino que utilice las ya existentes. Los que ya existen están hechos por personas que a menudo se especializan en ello.

Además de eso. El mejor para usar debe ser de código abierto en primer lugar. Al ser de código abierto, más expertos en seguridad / personas tienen la oportunidad de encontrar errores o errores, y por eso se solucionan más problemas. Lógicamente, el que es el más usado es a menudo también el más revisado. Mayor probabilidad de que se hayan solucionado más problemas en esa.

Realmente no puedes controlarte a ti mismo si es seguro. Encontrar errores en tal algoritmo es difícil. Ejemplos rápidos . Un experto en seguridad probablemente no los encontrará a todos, así que tampoco confíe en los de código cerrado porque su código no llegó a tantos ojos como el de código abierto.

    
respondido por el O'Niel 08.02.2016 - 13:27
fuente

Lea otras preguntas en las etiquetas