Estrategia / algoritmo de generación de claves AES para el sistema fuera de línea

4

Digamos que tengo varias aplicaciones que no están conectadas a ninguna red, y tengo un requisito que dice que cada aplicación podría producir un token a partir de una entrada que otra aplicación podría validar el token siempre que se le dé la misma entrada.

Por ejemplo, una persona que accede a la aplicación 1, ingresa una cadena y obtiene un token, luego él / ella viaja a la aplicación 2, ingresa la cadena y el token, luego la aplicación 2 le dice a la persona si el token es válido o no. Incluso si el token está expuesto a los usuarios, debería ser lo suficientemente seguro como para que nadie pueda falsificarlo.

En la fase de prototipo, simplemente cifro la entrada usando AES con una clave AES 128 codificada y luego ofusco un poco el texto cifrado para generar el token. Pero todavía tengo algunas preocupaciones porque tengo la impresión de que usar la misma clave estática para simétricas es vulnerable y fácil de comprometer.

Debido a que no hay medios para que estas aplicaciones se comuniquen entre sí y qué aplicación validará el token generado por cada aplicación, estoy planeando usar algún tipo de generación de claves AES para renovar la clave AES periódicamente para todas las aplicaciones. Esperaba que la clave fuera diferente de vez en cuando, pero toda la aplicación usará la misma clave en cualquier momento.

¿Existe un algoritmo o estrategia estándar abierta para generar la clave AES que cumpla con mi necesidad anterior? Tal vez no haya visto lo suficiente, pero parece que no puedo encontrarlo.

¡Gracias por adelantado!

    
pregunta riza 08.09.2012 - 22:34
fuente

1 respuesta

2

El método más seguro es usar firmas digitales. Generar un par de claves público / privado. La aplicación 1 obtiene una copia de la clave de firma (clave privada). La aplicación 2 obtiene una copia de la clave de verificación (clave pública). Un token ahora es una cadena firmada, firmada por la Aplicación 1.

Cuando la aplicación 1 quiere generar un token, simplemente puede firmar la cadena; El token consiste en la cadena y la firma. La aplicación 2 puede verificar el token verificando la firma.

Tenga en cuenta que este enfoque no impide la reproducción. Si una persona obtiene un token de la Aplicación 1, puede proporcionárselo a la Aplicación 2 tantas veces como lo desee, y parecerá que tiene validez cada vez.

Si desea evitar la repetición, una forma de defenderse contra la repetición es asegurarse de que la cadena que se está firmando contenga todos los detalles de la solicitud, y asegurarse de que la solicitud sea idempotente (el hecho de realizarla varias veces tiene el mismo efecto que la ejecución). una vez). Si haces eso, la reproducción se vuelve irrelevante.

Alternativamente, otro método simple es hacer que la Aplicación 1 incluya la hora actual y un número aleatorio de 64 bits (un nonce) en la cadena. La aplicación 2 puede verificar que el tiempo sea razonablemente reciente (por ejemplo, no más de 24 horas) y verificar que el nonce no esté en su lista de fuentes aceptadas recientemente; si se aprueban ambas comprobaciones, la Aplicación 2 acepta el token y agrega el nonce a su lista de nonces recientemente aceptados. (Puede recolectar esta lista de forma periódica: no tiene sentido retener un nonce de un token que tenga más de 24 horas de antigüedad, ya que la verificación de tiempo garantizará que el token no se acepte como válido).

Si prueba las firmas digitales y descubre que causan problemas de rendimiento, otro sustituto adecuado es usar un código de autenticación de mensaje con una clave simétrica (en lugar de un algoritmo de firma de clave pública). Cuando se utiliza un código de autenticación de mensaje (MAC), solo hay una clave, y ambas aplicaciones necesitarán una copia de la clave. En principio, los tokens basados en MAC son ligeramente menos seguros, porque ahora tienes más copias de la clave secreta flotando alrededor. Dicho esto, en la práctica, en la mayoría de las situaciones, los tokens basados en MAC son probablemente aceptables. Es poco probable que la diferencia entre los tokens basados en MAC y los tokens basados en firmas haga una gran diferencia en la seguridad del sistema en general, ya que lo más probable es que el enlace más débil de su sistema sea otra cosa.

    
respondido por el D.W. 09.09.2012 - 02:19
fuente

Lea otras preguntas en las etiquetas