La función de cifrado es solo un elemento fundamental para el cifrado. Es importante, sin duda, pero es solo un componente que puede usarse de forma segura e insegura. Si escribe usted mismo el marco de cifrado y conecta los cifrados, etc. donde cree que van, corre un riesgo muy real de hacer algo mal.
Por ejemplo:
- ¿Cuál es tu clave de cifrado? ¿Está utilizando una función de derivación de claves o simplemente está modificando de forma ingenua su contraseña?
- Vector de inicialización? ¿De dónde viene y qué haces con él?
- Modo de encadenamiento de bloques, ¿cuál escoges y por qué lo escogiste? ¿Dijiste "CBC porque todos los demás lo usan"? ¿El modo de encadenamiento de bloques afecta la elección del vector de inicialización?
- autenticación de mensajes; ¿estás probando para asegurarte de que el mensaje no haya sido manipulado? ¿Dónde pones ese código de autenticación?
- Flexibilidad: ¿permite que parámetros como la especificación de cifrado o el modo de encadenamiento se especifiquen en tiempo de ejecución? (¿Cómo) indicas tu decisión en tu salida?
- ... y docenas de otros problemas que no vienen a la mente de inmediato.
Se deben tomar muchas decisiones y hay muchas formas de hacerlo mal. Por lo general, hay una respuesta errónea, fácil pero horrorosa, para cada pregunta que pueda encontrar simplemente por no saber que tuvo que tomar una decisión.
Los marcos (con suerte) responden muchas de estas preguntas para usted, y (con suerte) lo hacen de una manera que es vetada por la comunidad y en gran medida segura. No todos los marcos hacen las cosas bien, y muchos pueden responderte la pregunta.
Pero (y aquí está el punto importante) si lo haces solo y construyes tu propio marco, hay una probabilidad abrumadoramente alta de que encuentres la respuesta incorrecta para alguna decisión.
Si usas un marco confiable, revisado y bien escrito , aumentas tus probabilidades un poco.