¿Cómo se configuran las “puertas traseras” en el software de cifrado?

Supongo que su pregunta aquí se relaciona con una discusión reciente sobre el gobierno que exige la presencia de “puertas traseras” en las comunicaciones encriptadas. Como señala Gary, es un nombre poco apropiado: una “puerta trasera” es realmente un error involuntario en la implementación que permite el acceso sin algún tipo de autorización.

Lo que los gobiernos están pidiendo es en realidad otra “puerta de entrada”, una forma alternativa de descifrar las comunicaciones cifradas de otro modo, que está diseñada en el sistema.

Esto es perfectamente posible, por ejemplo, piense en una conversación SMS de varios miembros: para que todos los destinatarios del mensaje puedan leer el mensaje SMS, todas sus claves deben estar involucradas en el cifrado. Todo lo que tendría que hacer es agregar la clave secreta del gobierno en la mezcla (o más bien, su clave pública) y podrían tener acceso a los datos.

El problema aquí es que las personas, y los gobiernos en particular, son absolutamente terribles acerca de guardar secretos. Por lo tanto, cualquier clave secreta utilizada para cifrar sus datos privados está virtualmente garantizada para filtrarse en otras manos. No busque más allá de las fugas de Vault7 si necesita tener una idea de lo difícil que es proteger los secretos.

También considere que tal vez piense que es genial si el gobierno de EE. UU. Echa un vistazo a lo que está hablando, pero ¿qué pasa si China también quiere participar en el juego? Luego Rusia, luego Nigeria o quien sea … una vez que se ha establecido el precedente, no hay razón para que un proveedor de software determinado pueda negarse a dar acceso a un país sobre otro. Entonces, básicamente, perderíamos toda la privacidad por completo.

Primero, aclaremos la definición de “puerta trasera” (este y el próximo párrafo). Normalmente, una puerta trasera es una forma de obtener acceso o realizar una función sin completar una validación normalmente requerida. Por ejemplo, una puerta trasera de la computadora puede permitir a cualquier usuario cuando el nombre de usuario está fredfred y el campo de contraseña no está en blanco. Iniciar sesión como usuario fredfred con cualquier cadena de contraseña no en blanco se realiza correctamente.

Otra es que el sistema solo permite que fredfred inicie sesión si la contraseña es derfderf (simplemente la deletreé al revés). La puerta de atrás se debe a que un usuario y una contraseña conocidos obtienen acceso sin pasar por alto el hecho de que fredfred no está en la base de datos del usuario. Estos dos enfoques se implementan en el módulo o núcleo de autenticación.

Entonces, ¿cómo se puede cifrar la puerta de atrás? En general, puedo pensar en tres formas. La primera es no utilizar la clave de usuario, sino utilizar una clave predefinida y conocida. El problema con esto es que cualquier otro software que implemente el mismo algoritmo de cifrado no conocería esta clave especial y el descifrado fallaría. El segundo es que el algoritmo está mal implementado (en realidad, esto es algo común accidental porque la mayoría de los programadores, incluido yo mismo, hacen un mal trabajo al implementar estos algoritmos). La implementación deficiente hace que el contenido encriptado sea más susceptible a ataques porque el espacio clave se ha reducido debido a la codificación deficiente. La tercera forma es tener el código de cifrado de forma automática pero de forma encubierta almacenar o reenviar la clave utilizada para el cifrado. Entonces, quien pueda obtener esa clave grabada puede descifrar el mensaje. Una variante podría ser agregar la clave de origen al contenido cifrado (esta última declaración podría ser una conversación bastante grande) …

Por lo tanto, los mecanismos para el acceso a la puerta trasera incluyen: 1) ignorar la clave de usuario y usar una clave constante, 2) codificar el algoritmo incorrecto para que sea fácil aplicar la fuerza bruta y 3) guardar de forma encubierta una copia de la clave. Puede haber más, pero este es un buen comienzo. Todo esto se ve frustrado cuando el código de cifrado es confiable y está bien construido. Personalmente, evito a cualquiera que diga “implementamos un algoritmo de cifrado seguro” porque sé lo fácil que es estropear esa implementación. ¡Y aquellos que dicen “algoritmo patentado” admiten que no entienden el cifrado en absoluto!