Si busco un desbordamiento de pila para cómo cifrar datos de forma segura , uno de los Los primeros hits son el esquema de cifrado personalizado de alguien. He visto varias preguntas similares en este sitio, y en general todas están condenadas a ser severamente defectuosas en el mejor de los casos. La mayoría de las personas lo suficientemente ingenuas como para tratar de inventar su propio cifrado no tienen idea de cuántas formas hay para arruinarlo.
¿Todo el mundo está metiendo la cabeza hasta este punto?
Ahora, lo que me sorprende, posiblemente porque pertenezco a la gente ingenua mencionada anteriormente, es que no hay buenas recomendaciones para aquellos de nosotros que no conocemos mejor. Si bien la respuesta correcta puede ser: "No intentes esto en casa", no es útil.
¿Necesita un servidor web listo para producción? Hay Apache y Nginx. ¿O una base de datos? Para la mayoría de los casos de uso que no necesitan escalar a las escalas de Google / Facebook / Twitter, hay tantas opciones listas para la producción que todas resolverán su problema que no tiene sentido incluso enumerarlas. ¿Algo más complicado? Las bibliotecas de aprendizaje automático de alta calidad están disponibles en la mayoría de los idiomas que pueda imaginar y probablemente en algunos más.
¿Quieres cifrar algo? Para mal.
Por ejemplo, digamos que busco "ruby encrypt data" en google. Terminé encontrando Documentación del cifrado OpenSSL .
Uno podría pensar: "Impresionante, he oído que uno nunca debería inventar sus propios esquemas de encriptación, y aquí hay un simple fragmento de código listo para copiar / pegar", por lo que probablemente lo copie y continúe alegremente.
Sin embargo, con mi comprensión bastante limitada del tema, incluso puedo ver lo que parece ser un gran defecto: la palabra integridad nunca se menciona en ninguna parte. No hay HMAC de los datos, por lo que la aplicación termina siendo vulnerable.
Si realiza una búsqueda similar de php, puede tener la suerte de captar la advertencia sobre la integridad, pero no hay una explicación sólida de por qué es importante, ni menciona que usar una contraseña no procesada no sea seguro, a diferencia del rubí. docs.
Entonces, para todos los desarrolladores que desean cifrar información, estamos bastante destinados a hacerlo mal.
Estoy seguro de que hay una buena razón para la complejidad, pero ¿cuál es?