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.