Por qué no deberías inventar tu propia criptografía

Al momento de crear una aplicación de chat cifrada o quizás un programa de comunicación segura; hay una regla de oro que deberías preservar: no inventes tu propia criptografía.

O, en otras palabras, no escribas un algoritmo de cifrado utilizado en un sistema para proteger archivos, conversaciones o nada más desde cero; ni modifiques radicalmente una solución existente. La criptografía casera es considerada más propensa a errores y probablemente no ha sido examinada o evaluada por investigadores en el exterior.

Cuando se utilizan formas esotéricas o personalizadas de cifrado, una empresa puede pensar que están haciendo una declaración audaz. En cambio, están muy probablemente poniendo en peligro la seguridad de su producto y los usuarios.

Cualquiera puede inventar un algoritmo que ni él mismo puede romper; es mucho más difícil inventar uno que nadie más pueda.
 — Bruce Schneier

La seguridad de un esquema de cifrado es tan fuerte como su eslabón más débil, incluso los criptógrafos mejor educados en matemáticas pueden generar un algoritmo que ellos no puedan romper, y luego alguien más da un vistazo y encuentra las fallas. Dicho de manera simple: un esquema no es seguro hasta que ha sido atacado exhaustivamente.

Cualquier persona puede inventar un sistema de seguridad ingenioso que ella o él no puede pensar sobre cómo romperlo.
 — Cory Doctorow, sobre la Ley de Schneier

Usando protocolos de criptografía públicamente conocidos

Un esquema criptográfico fuerte permanece fuerte aunque el algoritmo sea conocido por un atacante, esto es parte de los que se conocen como Principios de Kerckhoffs. Si escribes código que puede ser usado en una aplicación crítica es mejor apegarse a algoritmos conocidos y evaluados.

Es mejor cuanto menos secretos deban ser mantenidos, un sistema que se apoya en la seguridad por ocultación puede tener vulnerabilidades teóricas o prácticas, que si son descubiertas, comprometen la seguridad del sistema. Se argumenta que mantener ocultos los detalles de sistemas y algoritmos ampliamente utilizados es difícil, un buen número de ejemplos de algoritmos de cifrado que han pasado a ser de conocimiento público, bien por ingeniería inversa (ej. A5/1), bien por una fuga de información (ej. RC4).

Un protocolo público tiene múltiples ventajas:

  • Probablemente escrito por personas más inteligentes
  • Evaluado por muchas más personas
  • Analizado por muchas más personas, incluso con pruebas matemáticas
  • Mejorado por muchas más personas
  • Y en el momento que una de esas personas encuentra una falla, muchas más la proceden a corregir

Utilizar estándares criptográficos abiertos es una buena idea. Si el esquema ha existido durante años o incluso décadas, con el algoritmo y varias implementaciones básicas siendo de conocimiento público, y todavía nadie ha encontrado una forma de entrar, es un buen esquema.

Tratar de reinventar la rueda puede ser divertido, pero incluso si piensas haber descubierto el próximo gran logro en criptografía, por favor, recuerda la regla de oro.

Referencias: