Seguridad informática

Principio de Kerckhoffs

Auguste Kerckhoffs (1835-193) fue un criptógrafo neerlandés.

En 1833 publicó un ensayo sobre criptografía militar, y estableció los principios, que debe reunir un sistema criptográfico. Hoy día, incluso tras la tremenda evolución técnica y matemática, todavía se consideran vigentes.

Principalmente el segundo principio de los enunciados. Este tiene tanta transcendencia, respecto a sistemas de cifrado, que él solo recibe el nombre de Principio de Kerckhoffs.

Dice así: 2º Il faut qu'il n'exige pas le secret, et qu'il puisse sans inconvénient tomber entre les mains de l'ennemi.

Que traducido: No debe ser secreto, y puede caer en manos enemigas sin inconveniente

Explicación del 2º principio de Kerckhoffs

Esto significa que el algoritmo de cifrado debe ser conocido por todos, incluido el enemigo. Es decir, el algoritmo de cifra debe ser código abierto.

Lo único que se debe mantener secreto es la clave.

De esta forma si el algoritmo de cifra cae en manos enemigas, no se ve comprometido el sistema de cifra, pues la seguridad del mismo recae sobre la seguridad de la clave. Es decir, de la calidad y secreto de la clave.

Limitación del daño

Si en un sistema de código abierto, la clave cae en manos enemigas, el daño es limitado, pues queda comprometida solo a la mensajería enviada con esa clave.

Se mantiene la seguridad de la mensajería enviada con claves anteriores y futuras, pues se puede cambiar rápidamente la clave.

Analogía de una casa con muchas puertas

¿Recuerda la obra de teatro, convertida en refrán "Casa de dos puertas, mala es de guardar" ?

Pues un sistema informático moderno, tanto el Hardware (PC, router o móvil) como el Software (sistema operativo o cualquier otra aplicación). es un edificio enorme con muchas puertas que guardar.

Para agravar el problema: No todas las puertas son conocidas por el creador-propietario de la casa.

Tenga en cuenta que el software moderno es muy complejo. Eso hace que pueda presentar fallos que son aprovechados para introducirse en él de forma inadvertida.

Cómo protegemos la casa

Para proteger la casa y permitir la entrada, solo a quien deseemos, tenemos dos opciones:

  1. Publicar el mapa de la casa y entregar llaves a quien demos autorización para entrar, lo que le mostrará donde están las puertas que debe usar.

    Así quedan expuestas todas las puertas, las que conocemos y las que no. De esta forma, al ser usadas y estudiadas públicamente, se terminan conociendo todas las puertas y todos los posibles agujeros.

  2. Ocultar el plano, damos las coordenadas exclusivas de la puerta a usar y su llave. Además pintamos las puertas que no queremos que se usen de color blanco (para que el enemigo no las vea). De ese modo, forzamos a quien quiera entrar en la casa tenga a usar la llave que nosotros le damos y en la puerta que designemos.

    En este caso, el enemigo puede entretenerse en ir examinando las paredes (ingeniería inversa) hasta encontrar las puertas blancas. Por ahora están protegidas porque tienen también cerradura. Se la hemos puesto nosotros y solo nosotros podemos usarlas.

El problema surge de esas puertas que no conocemos (puerta trasera). Como no las conocemos, no les hemos puesto cerradura, y pueden ser usadas por el enemigo sin que nosotros lo percibamos (dia cero).

Efectos del código abierto

Cuando un código está abierto y es accesible por todo el mundo (como nuestra casa 1º), su código es constantemente estudiado, buscando fallos en él, ya sea con buena o mala intención.

De esta forma, se emiten los parches de seguridad que hace que el software madure rápidamente y sea estable en poco tiempo. Esto es, la seguridad del software no depende de la calidad del mismo, ya que rápidamente alcanza un nivel de seguridad elevado. Rápidamente se convierte en un software maduro.

Ejemplos de código abierto

Podemos ver por ejemplo el algoritmo de cifra RSA. Es un sistema de cifra asimétrico. En 1979 se publicó y patentó su algoritmo matemático. Desde entonces ha sido escudriñado por todos los criptógrafos-matemáticos del mundo.

Por su claridad y sencillez, ha alcanzado un grado de seguridad tal, que es el más usado hoy día por todos los sistemas cripto del mundo. Tanto a nivel estatal, militar, comercial, etc.

Podemos aventurar que la mayoría de la economía mundial, depende de este sistema de cifra abierto (ver artículo: Firma y certificado digital).

Efectos del código oculto

Por contrapartida, un software oculto presenta incertidumbres para garantizar su seguridad:

Filtración del código

Se deben extremar las medidas para evitar cualquier filtración del código. Algo que en la práctica es casi imposible, pues evitarlo presenta estas dificultades:
  1. Si el sistema es complejo o amplio (como lo son todos), depende de muchas personas, lo que obliga a mantener control constante sobre todas las personas. Y siempre ha habido y habrá empleados desleales. El factor humano siempre es el más débil de la cadena de custodia.

  2. Si el sistema se va a usar de forma distribuida físicamente, obliga a controlar la seguridad física de todas las localizaciones, edificios o instalaciones.

  3. Si el sistema es distribuido, está sujeto a ingeniería inversa, lo que permite obtener el código.
Estas dificultades se presentan también para un código abierto, pues este debe mantener también el secreto de la clave. Aunque el 3º es casi despreciable, pues la calidad de las claves es muy fácilmente controlable.

Sin embargo, Si se produce una filtración del código, queda comprometido todo el sistema, pasado, presente y futuro. No así cuando se produce una filtración de la clave en un sistema abierto.

Esto se debe a que se produce un estudio intenso por el enemigo de todas las posible fallas del código, descubriendo debilidades que no conoce el propio programador. Lo que no garantiza que los parches de seguridad del creador solucionen todos los fallos.

Puertas traseras del código

Otro de los inconvenientes es conocer qué hace con exactitud el código. Si por ejemplo el sistema de cifra de un ejército depende de un código que no conoce, no puede tener certeza de que no exista una puerta trasera intencionada para descifrar su mensajería.

Aplicación en Sistemas de cifra

Siempre es más seguro un sistema abierto, como ha demostrado RSA.

Sin embargo, en la práctica, para redes de seguridad, los ingenieros mantienen los dos sistemas. Usan un sistema abierto y bien conocido, al que le añaden una pequeña modificación del algoritmo. De esta forma garantizan que solo ellos conocen el algoritmo real de cifra.

Debido a las complejidades matemáticas, la modificación que añaden debe ser lo suficientemente sencilla para no generar nuevas puertas desconocidas. De otro modo, tendrían las vulnerabilidades del sistema cerrado.

Aplicación en Sistemas Operativos

Todavía existe una discusión entre expertos de seguridad, de si es más seguro un Sistema operativo de código cerrado o abierto.

Sin embargo, tras ver los pros y contras, no hay más que mencionar las fugas de software que se han producido, casi siempre por el factor humano, para saber cual es y será más seguro. Siempre habrá empleados descontentos.

Haga Vd. mismo una búsqueda en Internet con las palabras "filtración código fuente" de cualquier sistema operativo, de cifrado, administración, etc; todos los sistemas tienen fugas.

Debemos también concretar el significado del término seguro y seguro para quién. Para la empresa propietaria que vende el sistema, por supuesto es más seguro, económicamente.

Para el usuario, es más seguro un sistema abierto.


Artículos relacionados:


Volver al índice

Seguridad informática por juan@segura.pro está bajo licencia CC BY-NC-SA 4.0
Propiedad intelectual registrada