¿Deben los programadores que crean sitios web / aplicaciones web entender la criptografía? No tengo idea de cómo funcionan la mayoría de los algoritmos criptográficos, y realmente no entiendo las diferencias entre md5 / des / aes / etc. ¿Alguno de ustedes ha encontrado la necesidad de una comprensión profunda de la criptografía?
No lo he necesitado, pero me pregunto si quizás me estoy perdiendo algo. He usado salt + md5 hash para cifrar contraseñas, y le digo a los servidores web que usen SSL. Más allá de eso, no puedo decir que he usado mucho más, ni puedo decir con certeza cuán seguros son estos métodos. Solo los uso porque otras personas afirman que están a salvo.
¿Alguna vez ha encontrado la necesidad de utilizar la criptografía en la programación web aparte de estos dos ejemplos simples?
fuente
Respuestas:
Los programadores web deben saber que nunca deberían intentar implementar la criptografía ellos mismos.
En particular, eso significa que ningún experto en seguridad no debe tocar ninguna de las primitivas criptográficas directamente. No deberían estar pensando en el nivel de AES, SHA-1, etc. En su lugar, deberían estar utilizando funciones de alto nivel para cifrar y firmar mensajes, y para contraseñas "hash".
¿Por qué? Porque de lo contrario, las personas se engañan al pensar que:
Solo para estar en la misma página, ninguno de los elementos anteriores está bien . Si no obtienes eso, ¡entonces no deberías tocar criptografía con un poste de 10 pies! (AES-256 es un excelente cifrado, pero solo si lo usa correctamente. "No es el tamaño lo que importa, es lo que hace con él" :-))
¿De qué tipo de funciones de alto nivel estoy hablando? Yo personalmente recomiendo el uso de una biblioteca OpenPGP (para datos en reposo) o SSL (para datos en movimiento). Estos protocolos especifican rígidamente el uso correcto de algoritmos asimétricos, simétricos y hash. Por ejemplo, con OpenPGP:
EME-PKCS1-v1_5
). El relleno es extremadamente importante para RSA. ( Algunos piensan que usar el relleno v1.5 está bien. Otros piensan que OAEP es mejor ) .Resumen: si no eres un experto en seguridad y estás pensando en el nivel de AES, SHA-1 o (Dios no lo quiera) MD5, lo estás haciendo mal . Use una biblioteca escrita por expertos en seguridad (como Bouncy Castle), que implemente protocolos diseñados por expertos en seguridad (como OpenPGP para el cifrado, o bcrypt o scrypt para el hash de contraseña), en lugar de crear el suyo.
No soy un experto en criptografía de ninguna manera, pero sé lo suficiente como para no tratar de diseñar mis propios protocolos ad-hoc. Para ser claros, toda esta publicación es material de Cryptography 101 . Entonces, si esta publicación no tiene un 100% de sentido para usted, entonces definitivamente no debería acercarse a la criptografía.
fuente
No necesita saber nada más que lo básico sobre la criptografía (qué es un hash, qué es una sal, aproximadamente qué tan difícil es descifrar este cifrado o eso, etc.), pero debe saber un poco sobre la seguridad en general.
Las principales áreas de seguridad que definitivamente debe tener en cuenta como desarrollador web:
fuente
Recuerdo haber visto esta charla llamada Lo que todo ingeniero necesita saber sobre la seguridad y dónde aprenderla , el orador es Neil Daswani y es una charla técnica de Google que dio, ¡podría ser un buen lugar para comenzar!
Sin embargo, no se aplica solo a los programadores web, tal vez la pregunta debería titularse "¿Qué deben saber los programadores sobre seguridad?" ya que no necesitan saber más que lo básico sobre criptografía (tan interesante como es)
fuente
Crypto es útil en muchas situaciones. Un ejemplo que hemos usado es encriptar una cookie de sesión creada y configurada por un host Win / IIS para ser utilizada en un host LAMP.
Si va a implementar el cifrado (a diferencia del hash md5 / sha1), algunos términos básicos son importantes, como la diferencia entre el cifrado simétrico y asimétrico. Además de comprender la diferencia entre los dos, debe desarrollar una comprensión de lo que usted, como desarrollador web, debe hacer para almacenar y proteger adecuadamente las claves de descifrado. Por ejemplo, si desarrolla una aplicación para implementarla en un host sobre el cual no tiene control administrativo completo, como un host compartido, en lugar de implementarla en un servidor donde todos los administradores son conocidos y confiables.
fuente
En mi opinión, debes saber todo sobre la criptografía que alguien que ataca tu código sabrá. Debe comprender los hashes, la sal, la no aleatoriedad del azar, los principales algoritmos de cifrado (RSA, 3DES, AES, etc.), SHA-1 / MD-5 / et al. No tiene que memorizarlos, pero al menos debe saber que la efectividad de un algoritmo hash y cómo hacerlo más fuerte. Debe saber qué son las colisiones y los falsos positivos. No debería poder recitar los algoritmos de cifrado, pero debería estar familiarizado con sus puntos de referencia, cuáles son ideales para qué escenarios. Debería poder describir y explicar el cifrado simétrico frente al cifrado asimétrico y cuándo utilizar cada uno. Debe saber qué es PKI y cómo se usa. Debe saber qué es una autoridad de certificación y cómo interactúa con sus servidores.
Conocer los entresijos de todo no es tan importante como conocer sus antecedentes. ¿Cuáles son los puntos de referencia de ciertas cosas (qué tan rápido, qué tan fuerte, debilidades, etc.).
Estas recomendaciones son para información de nivel superior o de arquitecto. Si solo eres un mono web remando un remo, no necesitas saber nada de esto. Su arquitecto debería saber esto. Si está a cargo del sitio, diseñándolo, implementándolo, etc., entonces debe estar familiarizado con todos estos conceptos y ser capaz de conversar de manera inteligente sobre ellos. No es necesario que pueda enseñarlo, simplemente acepte y difunda información al respecto.
fuente
Debe usar bcrypt (Blowfish) para almacenar contraseñas en lugar de MD5; es un algoritmo mucho más lento , lo que significa que es mucho más difícil para un hacker adivinar y verificar. Además, bcrypt toma un factor de trabajo como parámetro, lo que significa que puede volverse aún más lento a medida que se introducen las computadoras más nuevas, por lo que tiene incorporadas pruebas para el futuro.
Consulte Cómo almacenar una contraseña de forma segura para obtener más información.
fuente
Como una respuesta bastante general a este tipo de preguntas, siempre pienso que debes tratar de tener una comprensión básica de cualquier cosa que esté remotamente relacionada con lo que haces. Por supuesto, necesita un conocimiento detallado específico de lo que realmente está trabajando. Es muy difícil predecir cómo evolucionará un área determinada, qué va a estar "de moda" o lo que necesitará en el futuro, por lo que tener un área amplia de cosas que al menos "ha escuchado" mantendrá Muchas puertas se abren.
En cuanto a mi experiencia personal en programación web, encontré nociones básicas de criptografía asimétrica y esas cosas útiles para comprender lo que está sucediendo bajo el capó. Podría haber sobrevivido sin él, pero debo decir que disfruto de la criptografía y las matemáticas, ¿por qué no?
fuente