21 oct. 2015

Mejoras desde OpenSSL a BoringSSL

Esta es una traducción libre del artículo de Adam Langley sobre el desarrollo de BoringSSL

Recientemente hemos sumado BoringSSL a las 2 mil millones de línea de código de Google. Por primera vez, la mayoría de los productos de Google están compartiendo una sola pila TLS porque BoringSSL funciona en todos los servicios de la empresa.

No estoy diciendo que la gente debe abandonar OpenSSL y cambiar a BoringSSL. En Linux incluso no tiene sentido porque hemos quitado demasiadas cosas como para que las aplicaciones se ejecuten sin problemas. Tampoco es posible tener OpenSSL y BoringSSL en el mismo proceso porque sus símbolos se chocarían. OpenSSL ha mejorado considerablemente desde el pasado mes de abril y aunque Google creó este fork, no hemos retirado nuestro apoyo al proyecto OpenSSL.

Con esto en mente, voy a mencionar algunas de las correcciones que hemos hecho en BoringSSL. Inicialmente, algunos colegas han registrado hasta 55 parches y también hemos tenido contribuciones de Opera y de CloudFlare.

Generalmente cuando la gente dice "forking", significa que se toma una copia del código y se empieza a parchear el fuente original. Eso no es lo que hicimos con BoringSSL. En lugar de empezar con una copia, se comenzó con un directorio vacío y fui tomando función por función, formateando, limpiando (a veces descartando) y creando la documentación de cada una. La herramienta de formateo Clang y su integración con Vim me fueron muy útiles.

Durante gran parte del código, longitudes fueron convertidas de ints a size_ts y las funciones que devuelven uno, cero o menos uno fueron convertidas a solo regreso uno o cero. (No manejo un menos un valor devuelto es un error fácil y peligroso).

A veces descartamos una función que más tarde realmente necesitábamos y siempre que fue posible la hemos traído de vuelta en una sección separada llamada "decrepit", que no serán utilizadas por Chrome o Android.

Gran cantidad de funciones de OpenSSL podrían simplemente desecharse y nunca fueron copiadas a BoringSSL: Blowfish, Camellia, CMS, compression, ENGINE code, IDEA, JPAKE, Kerberos, MD2, MDC2, OCSP, PKCS#7, RC5, RIPE-MD, SEED, SRP, timestamping y Whirlpool.
El código de OpenSSL con el cual comenzamos tenía 468.000 líneas de código, pero hoy en día, incluso con las cosas que hemos añadido (incluyendo pruebas) BoringSSL apenas tiene 200.000.

Algunas cosas importantes de OpenSSL son demasiado grandes como para "morderlas todas a la vez". El código de SSL, ASN.1 y X.509 se "bifurcaron" de forma tradicional: fueron copiados con cambios mínimos y serán mejorados incrementalmente o, en el caso de ASN.1 y X.509, hasta podrían ser reemplazados completamente.

Aquí se puede leer el artículo completo de Adam Langley en inglés

0 comentarios:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info
Si vas a dejar una consulta, procura tener habilitado tu perfil en Blogger o deja una forma de contacto.

Gracias por comentar!