¿Cómo almacenar de forma segura un número primo cifrado con PIN?

2

Situación: dentro de una aplicación móvil , estamos generando y almacenando una clave privada (RSA o ECC) que usamos para firmar solicitudes varias con (para autenticar usando El móvil como segundo factor, o para firmar transacciones).

Ahora queremos almacenar de forma segura esa clave privada en el dispositivo móvil , protegido con PIN (y otras) credenciales.

Tenemos una situación similar en la que almacenamos tokens de portador OAuth2 (token de actualización), allí usamos la derivación de claves para cifrar los tokens utilizando el PIN ingresado por el usuario. Para un PIN de 6 dígitos, hay 1'000'000 resultados posibles al descifrar los tokens, de los cuales solo uno es el token correcto. Un atacante no puede realizar un ataque de fuerza bruta sin conexión, ya que el token debe enviarse al servidor para verificar si es el correcto (y bloquearemos el dispositivo después de ~ 3 intentos fallidos).

Cuando usamos el mismo mecanismo para cifrar una clave RSA (se reduce a un número primo ) usando un PIN, obtenemos 1'000'000 resultados posibles para un PIN de 6 dígitos, solo que esta vez algunos resultados se pueden descartar fácilmente ya que no son primos.

Una prueba mostró que ~ 99.7% de esos resultados se pueden definir fácilmente como primos , lo que nos deja con aproximadamente un 0.3% de los posibles resultados que son probables primos. Un atacante ahora puede reducir la cantidad de PIN posibles rápidamente de un millón a aproximadamente 3'000.

Preguntas:

  • ¿Se trata de un problema conocido (cifrado de números primos) y existe una solución bien conocida (no se pudo encontrar algo útil en Google)?
  • ¿Deberíamos olvidarnos de las claves RSA y usar las claves ECC (curva elíptica) en su lugar, y podemos guardar una clave privada ECC de forma segura sin descartar los resultados incorrectos al descifrar con el PIN incorrecto?
pregunta Peter Walser 20.06.2017 - 11:34
fuente

0 respuestas

Lea otras preguntas en las etiquetas