Bloom filtro para evitar ataques de reproducción en solicitudes HTTP firmadas

1

Estoy pensando en un esquema de autenticación de una API REST en una configuración donde la única cosa que el servidor almacena acerca de un cliente, es su clave pública (el esquema de cifrado asimétrico no debería importar). Así que he ideado un esquema donde las solicitudes autenticadas se verían así:

{
    body: {
        <actual request body>
    },
    auth: {
        pubKey: <user's public key and identifier as well>
        nonce: <UUID generated by the client>
        signature: <signature of [body, nonce]>
    }
}

La firma está ahí, obviamente, para garantizar que la solicitud haya sido enviada por el usuario y no haya sido manipulada. El nonce está ahí para evitar ataques de repetición. Por supuesto, el nonce solo se puede usar una vez. Se requiere que el nonce sea un UUID, por lo que el servidor puede descartar automáticamente los nonces fuera de un período de tiempo determinado (digamos + - 60 segundos), pero todavía tengo que lidiar con los nonces dentro de esos 120 segundos de ventana.

Y aquí viene mi pregunta principal: ¿Cómo almacenar de manera eficiente los datos que no se utilizan dentro de un cierto marco de tiempo?

Se me ocurrió usar un filtro de floración para eso, pero, por supuesto, se puede contaminar después de un tiempo determinado, por lo que debes restablecerlo de vez en cuando. Y poco después de reiniciarlo sería vulnerable. Así que mi idea es tener dos de ellas y rotarlas, cada nonce pasaría a través de ambas, pero pediría la (no) presencia de ella solo la más antigua. ¿Es ese enfoque de sonido? ¿Hay algún "estándar de la industria" para la prevención de repetición de nonce adecuado para mi caso de uso?

Otra pregunta: ¿dónde colocaría la parte "auth" de la solicitud? ¿Hay alguna forma estándar de almacenar la firma y el nonce en el encabezado o incluso una forma estándar de realizar la autenticación de clave asimétrica en las API REST que sugeriría?

    
pregunta Rafael K. 08.09.2018 - 13:14
fuente

0 respuestas

Lea otras preguntas en las etiquetas