Una función pseudoaleatoria ajena ( OPRF ) es una función criptográfica , similar a una función hash con clave , pero con la distinción de que en una OPRF dos partes cooperan para calcular de forma segura una función pseudoaleatoria (PRF). [1]
Específicamente, una OPRF es una función pseudoaleatoria con las siguientes propiedades:
La función se denomina función pseudoaleatoria ajena , porque la segunda parte no tiene conocimiento de la salida de la función. Esta parte no aprende información nueva al participar en el cálculo del resultado.
Sin embargo, debido a que solo la segunda parte posee el secreto, la primera parte debe involucrar a la segunda parte para calcular el resultado de la función pseudoaleatoria (PRF). Este requisito permite que la segunda parte implemente controles de acceso , limitación , registro de auditoría u otras medidas de seguridad.
Si bien las funciones pseudoaleatorias convencionales calculadas por una sola parte se formalizaron por primera vez en 1986, [2] no fue hasta 1997 que se describió en la literatura la primera función pseudoaleatoria ajena de dos partes , [3] pero el término "función pseudoaleatoria ajena" no fue acuñado hasta 2005 por algunos de los mismos autores. [4]
Los OPRF tienen muchas aplicaciones útiles en criptografía y seguridad de la información .
Estos incluyen la derivación de claves basada en contraseñas , el acuerdo de claves basado en contraseñas , el endurecimiento de contraseñas, los CAPTCHA no rastreables , la gestión de contraseñas , la gestión de claves homomórficas y la intersección de conjuntos privados . [1] [5]
Una OPRF puede verse como un caso especial de cifrado homomórfico , ya que permite a otra parte calcular una función sobre una entrada cifrada y producir un resultado (que permanece cifrado) y, por lo tanto, no aprende nada sobre lo que calculó.
La mayoría de las formas de derivación de claves basadas en contraseñas sufren el problema de que las contraseñas suelen contener una pequeña cantidad de aleatoriedad (o entropía) en comparación con las claves de cifrado de longitud completa de 128 o 256 bits. Esto hace que las claves derivadas de contraseñas sean vulnerables a ataques de fuerza bruta .
Sin embargo, esta amenaza se puede mitigar utilizando la salida de un OPRF que toma la contraseña como entrada.
Si la clave secreta utilizada en la OPRF es de alta entropía, entonces la salida de la OPRF también será de alta entropía. Esto resuelve el problema de que la contraseña sea de baja entropía y, por lo tanto, vulnerable a ser descifrada mediante fuerza bruta .
Esta técnica se llama endurecimiento de contraseñas . [6] Cumple una función similar a la de la ampliación de claves , pero el endurecimiento de contraseñas añade significativamente más entropía.
Además, dado que cada intento de adivinar una contraseña reforzada de esta manera requiere interacción con un servidor, se evita un ataque fuera de línea y, por lo tanto, se permite alertar al usuario o al administrador del sistema sobre cualquier intento de descifrado de contraseñas.
La clave recuperada puede luego usarse para autenticación (por ejemplo, realizando una autenticación basada en PKI usando un certificado digital y una clave privada ), o puede usarse para descifrar contenido confidencial, como un archivo cifrado o una billetera criptográfica .
Una contraseña puede utilizarse como base de un protocolo de acuerdo de claves para establecer claves de sesión temporales y autenticar mutuamente al cliente y al servidor. Esto se conoce como intercambio de claves autenticadas mediante contraseña o PAKE .
En la autenticación básica , el servidor aprende la contraseña del usuario durante el transcurso de la autenticación. Si el servidor se ve comprometido, se expone la contraseña del usuario, lo que compromete la seguridad del usuario.
Sin embargo, con PAKE, la contraseña del usuario no se envía al servidor, lo que evita que caiga en manos de un espía. Puede considerarse como una autenticación a través de una prueba de contraseña de conocimiento cero .
Varias " formas aumentadas " de PAKE incorporan una función pseudoaleatoria despreocupada, de modo que el servidor nunca ve la contraseña del usuario durante la autenticación, pero sin embargo puede autenticar que el cliente está en posesión de la contraseña correcta. Esto se hace asumiendo que solo el cliente que conoce la contraseña correcta puede usar la OPRF para derivar la clave correcta.
Un ejemplo de un PAKE aumentado que utiliza un OPRF de esta manera es OPAQUE . [7] [8] [9] [10]
Recientemente, las OPRF se han aplicado al intercambio de claves basado en contraseñas para realizar copias de seguridad de los historiales de chat cifrados en WhatsApp [11] y Facebook Messenger . [12] Se planea agregar un caso de uso similar en Signal Messenger . [13]
Un CAPTCHA o " prueba de Turing pública completamente automatizada para diferenciar entre computadoras y humanos" [14] es un mecanismo para evitar que los robots automatizados o ( bots ) accedan a sitios web. Últimamente, los mecanismos para ejecutar pruebas CAPTCHA se han centralizado en servicios como Google y CloudFlare , pero esto puede ir en detrimento de la privacidad del usuario.
Recientemente, CloudFlare desarrolló una tecnología de preservación de la privacidad llamada "Privacy Pass" [15]. Esta tecnología se basa en OPRF y permite que el navegador del cliente obtenga pases de CloudFlare y luego los presente para eludir las pruebas CAPTCHA. Debido a que el servicio CloudFlare no sabe qué pases se proporcionaron a qué usuarios, no hay forma de que pueda correlacionar a los usuarios con los sitios web que visitan. Esto evita el seguimiento del usuario y, por lo tanto, preserva su privacidad.
Un administrador de contraseñas es un software o un servicio que almacena muchas credenciales de cuenta diferentes en nombre del usuario. Por lo tanto, el acceso al administrador de contraseñas es muy sensible: un ataque podría exponer muchas credenciales al atacante.
La primera propuesta de un gestor de contraseñas basado en OPRF fue SPHINX [16] . Utiliza dos dispositivos (como el ordenador portátil y el teléfono del usuario) que colaboran para calcular una contraseña para una cuenta determinada (identificada por el nombre de usuario y el nombre de dominio del sitio web). Como los dos dispositivos del usuario intercambian valores según un protocolo OPRF, interceptar la conexión entre ellos no revela nada sobre la contraseña ni sobre los valores internos que cada dispositivo utilizó para calcularla. El hecho de que se necesiten dos dispositivos para calcular cualquier contraseña también garantiza que un ataque a cualquiera de los dispositivos no permita al atacante calcular ninguna de las contraseñas. Una desventaja de este enfoque es que el usuario siempre necesita tener acceso a ambos dispositivos cuando quiera iniciar sesión en cualquiera de sus cuentas.
El Monitor de contraseñas de Microsoft Edge utiliza un OPRF para poder consultar a un servidor si se sabe que una credencial (que el usuario guardó en el navegador) está comprometida, sin necesidad de revelar dicha credencial al servidor. [17]
De manera similar a cómo proteger las contraseñas administradas por un administrador de contraseñas, se puede utilizar un OPRF para mejorar la seguridad de un sistema de administración de claves .
Por ejemplo, una OPRF permite que un sistema de gestión de claves emita claves criptográficas a usuarios autenticados y autorizados, sin jamás ver, aprender o estar en posición de aprender ninguna de las claves que proporciona a los usuarios. [18]
La intersección de conjuntos privados es una técnica criptográfica que permite a dos o más partes comparar sus conjuntos privados para determinar qué entradas comparten en común, pero sin revelar ninguna entrada que no tengan en común.
Por ejemplo, la intersección de conjuntos privados podría ser utilizada por dos usuarios de una red social para determinar qué amigos tienen en común, sin revelar las identidades de los amigos que no tienen en común. Para ello, podrían compartir los resultados de una OPRF aplicada a la identidad del amigo (por ejemplo, el número de teléfono o la dirección de correo electrónico del amigo).
La salida del OPRF no se puede invertir para determinar la identidad del usuario y, dado que el OPRF puede tener una velocidad limitada , evitará un ataque de fuerza bruta (por ejemplo, iterar sobre todos los números de teléfono posibles). [19]
Existen varias funciones matemáticas que pueden servir como base para implementar una OPRF.
Por ejemplo, métodos de criptografía asimétrica , incluida la multiplicación de puntos de curva elíptica , la exponenciación modular Diffie-Hellman sobre un primo o un cálculo de firma RSA .
Se pueden utilizar curvas elípticas y campos de orden principal para implementar un OPRF. La idea básica es que la primera parte (el cliente) debe enmascarar criptográficamente la entrada antes de enviarla a la segunda parte.
Este cegamiento puede considerarse como una forma de cifrado que sobrevive al cálculo realizado por la segunda parte. Por lo tanto, la primera parte puede descifrar lo que recibe de la segunda parte para "desenmascararlo" y, de ese modo, recibir el mismo resultado que habría recibido si la entrada no hubiera estado cegada.
Cuando la segunda parte recibe la entrada oculta, realiza un cálculo sobre ella utilizando un secreto . El resultado de este cálculo no debe revelar el secreto.
Por ejemplo, la segunda parte puede realizar una multiplicación de un punto en una curva elíptica, o puede realizar una exponenciación modular módulo un primo grande .
La primera parte, al recibir el resultado y con conocimiento del factor de cegamiento, calcula una función que elimina la influencia del factor de cegamiento en el resultado devuelto por la segunda parte. Esto "desenmascara" el resultado, revelando la salida de la OPRF (o un resultado intermedio que luego utiliza el cliente para calcular la salida de la OPRF, por ejemplo, al aplicar un algoritmo hash a este resultado intermedio).
El siguiente es un pseudocódigo para los cálculos realizados por el cliente y el servidor utilizando un OPRF basado en una curva elíptica.
El siguiente código representa los cálculos realizados por el cliente o la primera parte.
byte [] calculateOPRF ( byte [] input ) { // Aplicar algoritmo de hash de puntos // Por ejemplo, como se describe en RFC 9380 ECPoint hashedPoint = hashToPoint ( input ); // Generar un factor de cegamiento aleatorio Scalar b = randomScalar (); // Ciego la entrada a través de una curva multiplicada ECPoint blindedInput = ECMultiply ( hashedPoint , b ); // Enviar solicitud al servidor para obtener respuesta ECPoint serverResponse = sendRequest ( blindedInput ); // Calcular el inverso multiplicativo de b Inverso escalar = modInverse ( b ); // Desbloquea la respuesta para producir el resultado ECPoint result = ECMultiply ( serverResponse , inverse ); // Mezcle el resultado no cegado para completar el cálculo OPRF return hash ( result ); }
Notas:
El cliente calcula el inverso multiplicativo del factor de cegamiento. Esto le permite invertir el efecto del factor de cegamiento en el resultado y obtener el resultado que el servidor habría devuelto si el cliente no hubiera cegado la entrada.
Como paso final, para completar la OPRF, el cliente realiza un hash unidireccional en el resultado para garantizar que la salida de la OPRF sea uniforme , completamente pseudoaleatorio y no invertible.
El siguiente código representa los cálculos realizados por el servidor o la segunda parte.
El servidor recibe el valor de entrada ciego del cliente y puede realizar la autenticación, el control de acceso, la limitación de solicitudes u otras medidas de seguridad antes de procesar la solicitud. Luego utiliza su propio secreto para calcular:
ECPoint processRequest ( ECPoint blindedInput , Scalar secret ) { // Aplicar secreto para calcular la respuesta ECPoint response = ECMultiply ( blindedInput , secret ); return response ; }
Luego devuelve la respuesta, que es la salida ciega, al cliente.
Notas:
Debido a que la multiplicación de puntos de la curva elíptica es computacionalmente difícil de invertir (como el problema del logaritmo discreto ), el cliente no puede aprender de manera factible el secreto del servidor a partir de la respuesta que produce.
Sin embargo, tenga en cuenta que esta función es vulnerable a ataques de computadoras cuánticas . Un cliente o un tercero en posesión de una computadora cuántica podría resolver el secreto del servidor sabiendo el resultado que produjo para una entrada determinada.
Cuando la salida de un esquema de firma ciega es determinista, se puede utilizar como base para construir una OPRF, por ejemplo, simplemente aplicando un hash a la firma resultante.
Esto se debe a que, debido al cegamiento, la parte que calcula la firma ciega no aprende ni la entrada (lo que se está firmando) ni la salida (la firma digital resultante ).
La construcción OPRF se puede ampliar de varias maneras, entre ellas: versiones verificables, parcialmente ignorantes, con umbral seguro y con seguridad postcuántica.
Muchas aplicaciones requieren que la primera parte pueda verificar que la salida OPRF se calculó correctamente. Por ejemplo, cuando se usa la salida como clave para cifrar datos. Si se calcula el valor incorrecto, esos datos cifrados pueden perderse para siempre.
Afortunadamente, la mayoría de las OPRF admiten la verificabilidad. Por ejemplo, cuando se utilizan firmas ciegas RSA como construcción subyacente, el cliente puede, con la clave pública, verificar la exactitud de la firma digital resultante .
Al utilizar OPRF basados en curvas elípticas o Diffie-Hellman , y conocer la clave pública y = g x , es posible utilizar una segunda solicitud al servidor OPRF para crear una prueba de conocimiento cero de corrección para el resultado anterior. [20] [21]
Una modificación de una OPRF se denomina PRF parcialmente inconsciente o P-OPRF.
Específicamente, una P-OPRF es cualquier función con las siguientes propiedades:
El caso de uso para esto es cuando el servidor necesita implementar limitaciones específicas o controles de acceso en la entrada expuesta ( E ), por ejemplo, ( E ) podría ser una ruta de archivo o un nombre de usuario, para el cual el servidor aplica controles de acceso y solo atiende solicitudes cuando el usuario solicitante está autorizado.
El servicio "Pythia PRF" utilizó un P-OPRF basado en emparejamientos bilineales . [22]
Recientemente han aparecido versiones de P-OPRF no basadas en emparejamientos, como una versión estandarizada en el IETF RFC 9497. [21] así como una mejora más reciente. [23]
Para una seguridad aún mayor, es posible umbralizar el servidor , de modo que el secreto ( S ) no esté en manos de ningún servidor individual, y así la vulneración de cualquier servidor individual, o conjunto de servidores por debajo de un umbral definido, no expondrá el secreto.
Esto se puede lograr haciendo que cada servidor sea accionista de un esquema de intercambio de secretos . En lugar de usar su secreto para calcular el resultado, cada servidor usa su parte del secreto para realizar el cálculo.
El cliente toma entonces un subconjunto de los resultados calculados por el servidor y los combina, por ejemplo, calculando un protocolo conocido como interpolación en el exponente . Esto recupera el mismo resultado que si el cliente hubiera interactuado con un solo servidor que tiene el secreto completo.
Este algoritmo se utiliza en varios protocolos criptográficos distribuidos. [24]
Encontrar implementaciones post-cuánticas seguras y eficientes de OPRF es un área de investigación activa. [25]
"Con la excepción de las OPRF basadas en primitivas simétricas, todas las construcciones OPRF eficientes conocidas se basan en supuestos de dureza de tipo logaritmo discreto o factorización. Se sabe que estos supuestos caen con el auge de las computadoras cuánticas". [1]
Dos posibles excepciones son las OPRF basadas en retículas [26] y las OPRF basadas en isogenias [27] , pero se requiere más investigación para mejorar su eficiencia y establecer su seguridad. Los ataques recientes a las isogenias plantean dudas sobre la seguridad del algoritmo. [28]
Un enfoque más seguro, pero menos eficiente, para lograr una OPRF segura post-cuántica es utilizar un protocolo de cálculo seguro de dos partes para calcular una PRF utilizando una construcción de clave simétrica , como AES o HMAC .
CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) es un [...]