¿El relleno PKCS 1.5 permite que un atacante extraiga la clave privada o no? ¿Es seguro usar PKCS 1.5 en el contexto de autenticación?

5

Actualmente estoy escribiendo una aplicación de autenticación basada en RSA, para Android que debería ser imposible de copiar, incluso si tiene acceso físico a un teléfono sin pantalla de bloqueo / PIN.

Sin embargo, el HSM dentro del teléfono, que garantiza que la clave privada nunca puede dejar el almacenamiento, solo se puede "usar", solo admite el relleno PKCS 1.5 debido a un error en la implementación de bouncycastle.

Los mensajes cifrados serán diferentes cada vez (por lo tanto), por lo que no hay posibilidad de observar que dos mensajes cifrados son idénticos a través del cable.

Un atacante o adversario, que no tiene acceso al teléfono, no tiene acceso a un oráculo de relleno. La aplicación funciona haciendo que el usuario escanee un QR cifrado y este QR cifrado se descifra en un código OTP. Sí, el atacante puede mostrar, en una página de phishing o en una conexión secuestrada, un código QR que contiene errores de relleno, y observar si el usuario continúa con la autenticación (ingresa una OTP válida) o no, pero lo que leí en algunas páginas, un oráculo de relleno El ataque requiere millones de "pruebas" contra el relleno.

Cuando el atacante o el adversario tienen acceso al teléfono, el atacante puede usar el teléfono como un oráculo de relleno, pero también, al tener acceso al teléfono, el atacante puede descifrar los mensajes arbitrarios utilizando la aplicación de todos modos.

Los objetivos de seguridad que deben cumplirse, es que:

  • Si bien el atacante no tiene acceso al teléfono, el atacante no debería poder autenticarse.

  • Si el atacante tiene acceso al teléfono, incluso durante mucho tiempo, debería poder autenticar, pero no extraer la clave privada.

  • Cuando el atacante ya no tiene acceso al teléfono, por ejemplo, si el atacante es un empleado anterior que fue despedido y luego entregó el teléfono, el atacante ya no podrá autenticarse, incluso si anteriormente tenía acceso al teléfono, e incluso si el par de llaves dentro del hardware seguro no se ha cambiado.

En esta página, la respuesta menciona que es posible extraer la clave privada al montar un ataque de oráculo de relleno: ¿En qué debilidad específica del relleno se aborda el OAEP en RSA?

Sin embargo, la página de Wikipedia no menciona la revelación de claves privadas: enlace

Pero la página de wikipedia menciona, usando el oráculo de relleno, un atacante puede descifrar los mensajes arbitrarios, simplemente verificando las respuestas del oráculo de relleno, sin tener acceso ni a la clave ni a la salida de texto sin formato del motor de descifrado. Sin embargo, en este caso, cuando un atacante tiene acceso al oráculo de relleno, el atacante también tiene acceso a la salida de texto sin formato y viceversa, lo que significa que ya es posible descifrar los mensajes arbitrarios cuando el atacante sí tiene acceso al motor de descifrado. , sin tener que recurrir a un ataque de oráculo de relleno.

Las 2 cosas son completamente diferentes, porque con la clave privada, el atacante puede descifrar mientras ya no tiene acceso al oráculo de relleno, pero si el oráculo de relleno solo se puede usar para descifrar mensajes, el oráculo de relleno en este caso, efectivamente se vuelve inútil para el atacante, porque cuando el atacante ya no tiene acceso a Oracle de relleno, ya no puede descifrar y se cumple el objetivo de seguridad.

Las preguntas que tengo son:

1: ¿Es seguro usar PKCS 1.5 en este caso?

2: ¿Es realmente posible extraer la clave privada utilizando un oráculo de relleno o el oráculo de relleno simplemente permite el descifrado de mensajes arbitrarios? Los 2 artículos vinculados son ambiguos en ese sentido.

    
pregunta sebastian nielsen 08.06.2016 - 20:55
fuente

1 respuesta

1
  

¿Es seguro usar PKCS 1.5 en este caso?

No puedo responder "no" aquí. Pero se recomienda evitar "salvo en este caso" por cualquier propósito práctico. Por ejemplo, ¿por qué usaría el cifrado RSA si todo lo que le importa es proteger la clave privada (pero no la confidencialidad de los mensajes en sí)? Además, si BouncyCastle no ha solucionado ese error ya, es probable que lo solucione pronto (¿lo ha informado, por cierto?).

  

¿Es realmente posible extraer la clave privada usando un oráculo de relleno, o el relleno de oráculo simplemente permite el descifrado de mensajes arbitrarios?

No, RSA Padding Oracle solo permite el descifrado de mensajes arbitrarios (no estamos hablando de ataques de tiempo, etc.). Así que la clave privada RSA está segura en el HSM del teléfono.

El CRYPTO'12 paper fue sobre la aplicación de Padding Oracle to Key Wrapping: una clave está "ajustada" (también conocida como encriptación RSA), se pasa al token y se "desenvuelve" allí (también conocida como descifrada y lista para usar en esta ficha). No tiene sentido aplicar este ataque al cifrado / descifrado normal, porque si tiene el dispositivo (su teléfono, su token criptográfico) y el PIN, puede decirle al dispositivo que descifre el texto cifrado que obtuvo en una sola solicitud, no Necesito hacer palanca poco a poco.

Además, ¿consideraría un esquema de autenticación basado en la firma en lugar del descifrado?

Actualizar

  

La razón por la que seleccioné un esquema de autenticación basado en descifrado en lugar de firmas, es porque las firmas se vuelven enormes, siempre y cuando la clave.

Para el cifrado RSA, el texto cifrado es tan grande como la clave (módulo), como en la firma RSA (y por el mismo motivo, para eso es el relleno). Pero supongo que no importa, porque se pasa al teléfono como un escaneo QR ...

  

Pero también el sistema debe funcionar sin ninguna conectividad de red para el dispositivo, por lo que he basado el sistema en códigos QR cifrados, que se descifran a una simple cadena OTP, que se ingresa en el servidor

Según sus comentarios, quiere decir que el teléfono en sí puede no estar conectado, es decir, no puede reaccionar a lo que escanea con QR. Solo muestra el resultado (probablemente algo bastante corto que el usuario puede escribir fácilmente).

En el caso de uso que describe, creo que está bien. Y su clave privada no está expuesta de todos modos. Aunque me pregunto cómo se va a obtener su clave pública del teléfono al servidor que la usaría para cifrar esa OTP para este cliente específico (por lo que su teléfono necesitaría conectividad con alguna en algún momento) .

    
respondido por el Mouse 17.10.2016 - 12:39
fuente

Lea otras preguntas en las etiquetas