En criptografía , el cegamiento es una técnica mediante la cual un agente puede proporcionar un servicio a un cliente (es decir, calcular una función para él) en forma codificada sin conocer ni la entrada ni la salida reales. Las técnicas de cegamiento también tienen aplicaciones para prevenir ataques de canal lateral en dispositivos de cifrado.
Más precisamente, Alice tiene una entrada x y Oscar tiene una función f . Alice quisiera que Oscar calcule y = f ( x ) para ella sin revelarle ni x ni y . La razón por la que ella quiere esto podría ser que no conoce la función f o que no tiene los recursos para calcularla. Alice "ciega" el mensaje codificándolo en alguna otra entrada E ( x ); la codificación E debe ser una biyección en el espacio de entrada de f , idealmente una permutación aleatoria. Oscar le da f ( E ( x )), a la que ella aplica una decodificación D para obtener D ( f ( E ( x ))) = y .
No todas las funciones permiten el cálculo a ciegas. En otras ocasiones, el cegamiento debe aplicarse con cuidado. Un ejemplo de esto último son las firmas de Rabin-Williams . Si se aplica el cegamiento al mensaje formateado pero el valor aleatorio no respeta los requisitos de Jacobi en p y q , entonces podría conducir a la recuperación de la clave privada. Se puede ver una demostración de la recuperación en CVE - 2015-2141 [1] descubierto por Evgeny Sidorov.
Una aplicación común del cegamiento es la firma ciega . En un protocolo de firma ciega, el firmante firma digitalmente un mensaje sin poder conocer su contenido.
El block de un solo uso (OTP) es una aplicación del cegamiento al problema de la comunicación segura, por su propia naturaleza. Alice desea enviar un mensaje a Bob en secreto, sin embargo, Oscar puede leer toda su comunicación. Por lo tanto, Alice envía el mensaje después de cegarlo con una clave secreta u OTP que comparte con Bob. Bob revierte el cegamiento después de recibir el mensaje. En este ejemplo, la función f es la identidad y E y D son típicamente la operación XOR .
El cegamiento también se puede utilizar para evitar ciertos ataques de canal lateral en esquemas de cifrado asimétrico . Los ataques de canal lateral permiten a un adversario recuperar información sobre la entrada a una operación criptográfica, midiendo algo distinto al resultado del algoritmo, por ejemplo, el consumo de energía, el tiempo de cálculo o las emanaciones de radiofrecuencia de un dispositivo. Normalmente, estos ataques dependen de que el atacante conozca las características del algoritmo, así como (algunas) entradas. En este contexto, el cegamiento sirve para alterar la entrada del algoritmo a un estado impredecible. Dependiendo de las características de la función de cegamiento, esto puede evitar parte o toda la fuga de información útil. Tenga en cuenta que la seguridad también depende de la resistencia de las propias funciones de cegamiento a los ataques de canal lateral.
Por ejemplo, en RSA el cegamiento implica calcular la operación de cegamiento E ( x ) = (xr) e mod N , donde r es un entero aleatorio entre 1 y N y primo relativo a N (es decir, mcd( r , N ) = 1) , x es el texto simple, e es el exponente RSA público y N es el módulo RSA. Como es habitual, se aplica la función de descifrado f ( z ) = z d mod N , dando así f ( E ( x )) = (xr) ed mod N = xr mod N . Finalmente, se desenmascara utilizando la función D ( z ) = zr −1 mod N . Multiplicando xr mod N por r −1 mod N se obtiene x , como se desea. Al descifrar de esta manera, un adversario que pueda medir el tiempo que lleva esta operación no podría hacer uso de esta información (aplicando ataques de tiempo a los que se sabe que RSA es vulnerable) ya que no conoce la constante r y, por lo tanto, no tiene conocimiento de la entrada real alimentada a los primitivos RSA.