Configuración recomendada de seguridad criptográfica (algoritmos implementados)?

3

En primer lugar, no soy un experto en criptografía, sin embargo, sé cómo usar los algoritmos que otras personas han definido anteriormente en usos prácticos, es decir, siempre que cumplan sus promesas.

Lo que pasa es que necesito ciertas utilidades:

  1. Genere un par de claves públicas / privadas de x longitud, consígalos como binarios; y poder procesar contenido con él.
  2. Algún algoritmo de hash que consume mucha memoria y toma su tiempo; No necesito velocidad, necesito seguridad. (Estoy bastante seguro de que usarán contraseñas tontas)
  3. Un algoritmo de cifrado simétrico que genera texto cifrado basado en una contraseña (hash) que también debe ser bastante fuerte.

Mis respuestas actuales han sido:

  1. algoritmos RSA de OpenSSL.
  2. Scrypt (pensando en cambiar a argon2 debido a una gran documentación y envoltorios)
  3. OpenSSL AES CBC

Pero luego vas aquí y allá por Internet y dicen que Scrypt está dañado, usa bcrypt, no es argon2 https://github.com/P-H-C/phc-winner-argon2 es lo nuevo, OpenSSL tiene errores de seguridad, mejor usa LibreSSL, no usa libsodium. etc ... etc ...

Entonces, ¿cuáles son las mejores opciones? ... Necesito asegurar datos altamente confidenciales.

También probablemente usaré las envolturas Node.js porque necesito resultados rápidamente, ya que necesito hacer una demostración.

    
pregunta Onza 24.06.2016 - 17:35
fuente

1 respuesta

3

Uno de los problemas más grandes que enfrenta no son los algoritmos que elija, sino cómo los implementa. Hay muchos algoritmos buenos para varios propósitos, y virtualmente cualquiera de ellos, aplicado incorrectamente, puede resultar en un sistema de cifrado desastrosamente roto.

Esta es una de las razones por las que las personas ofrecen consejos como "usar libsodium" porque las bibliotecas como libsodium resumen la mayoría de las decisiones que podrían tomarse mal.

Sin embargo, para responder a la pregunta que hizo específicamente, con respecto a los algoritmos:

  1. Encriptación asimétrica: usuario RSA-OAEP.

  2. Algoritmo de hash de contraseña o KBKDF para cifrado simétrico: use bcrypt.

  3. Cifrado simétrico: un cifrado AEAD. Sé que OpenSSL tiene AES-GCM. También puede encontrar ChaCha20-Poly1305. O podrías usar libsodium.

Un punto específico para reiterar sobre el elemento 3 ... No use la contraseña directamente como clave. Use bcrypt (u otro KBKDF adecuado) para generar una clave adecuada, de una manera adecuadamente lenta. Puede que ya lo sepas, pero vale la pena señalarlo para futuros lectores.

Otro punto crítico: incluso con todos los mejores algoritmos y la implementación adecuada, la administración de claves es un componente crucial del sistema. Si no piensa lo suficiente en el almacenamiento y la administración de claves seguras, todo lo demás podría ser en vano.

    
respondido por el Xander 20.07.2016 - 03:25
fuente

Lea otras preguntas en las etiquetas