Espero aprender más sobre la implementación de SSL / TLS. ¿Alguno de ustedes me puede sugerir una buena fuente de información? Por ahora solo tengo un conocimiento básico al respecto, como qué es SSL y cómo funciona.
Gracias.
Para obtener un primer prototipo funcional:
Elija algún lenguaje de programación conveniente, que ofrezca las primitivas que necesita: soporte de red, sencillas manipulaciones byte a byte ... El lenguaje debe ofrecer implementaciones de las primitivas criptográficas básicas, o de lo contrario tendrá que volver a implementar ellos mismos C # o Java son adecuados; Las macros de Excel mucho menos. Debe tener un buen conocimiento previo del idioma.
Obtenga una implementación compatible contra la cual probar; elija una fuente abierta como OpenSSL o GnuTLS , que puede funcionar tanto como cliente como servidor, producir toneladas de resultados de depuración y, lo que es crucial, que puede modificar para volcar valores intermedios. Para su primera implementación SSL, probablemente pasará muchas veces trabajando en lo que se envía exactamente a SHA-1 y MD5 para obtener los mensajes Finished
correctamente.
Lea la especificación de la versión del protocolo que desea implementar. Hay SSL 3.0 , TLS 1.0 , TLS 1.1 y TLS 1.2 . Elija solo uno inicialmente; ampliará su código para admitir otras versiones más adelante. TLS 1.0 es probablemente el más simple de los cuatro. También puede leer esta respuesta como una especie de "Guía de lectura para SSL".
Concéntrese en un par de suites de cifrado, por ejemplo, TLS_RSA_WITH_RC4_128_SHA
y TLS_RSA_WITH_3DES_EDE_CBC_SHA
. Más opciones implican más complejidad; comienza pequeño.
Si tiene que implementar algunos primitivos criptográficos (por ejemplo, RC4 o SHA-1), hágalo correctamente , es decir, como módulos independientes con una API limpia. Probarlos (Google para vectores de prueba). No puede hacer un trabajo de implementación razonable a menos que tenga herramientas confiables. El uso de algoritmos ya implementados (ya sea desde el marco de programación que usa, o desde una biblioteca externa) lo ayudará enormemente.
Recuerde que escribir su propio SSL es para aprender, no para usar en producción. Es una muy buena manera de entender cómo funcionan las cosas. Sin embargo, el código de producción requiere mucho cuidado, especialmente con respecto a los ataques de canal lateral . La experiencia ha demostrado repetidamente que las implementaciones se vuelven lo suficientemente sólidas solo a través de años de experiencia, pruebas y arreglos.
Conocer los aspectos internos de SSL es una buena habilidad que te servirá bien. Puede crear una carrera completa interpretando los rastros SSL obtenidos con alguna herramienta de monitoreo de red (esa es la forma moderna de Oracle, e incluso las varitas de incienso son opcionales).
Lea otras preguntas en las etiquetas tls