Como todos sabemos, se necesita nonce para evitar los ataques de repetición. En todas partes que leo sobre nonce, veo que el cliente siempre obtiene uno del servidor, y , para mejorar aún más la seguridad, también puede agregar su propio nonce de cliente (cnonce).
Al igual que en este diagrama:
Este esquema agrega una sobrecarga de un viaje de ida y vuelta más al servidor; y estoy tratando de averiguar qué vectores de ataque serán posibles si solo usamos el cliente nonce, y nos aseguramos en el servidor que nunca se reutilicen los códigos (para evitar el almacenamiento de todos los códigos usados, obviamente podríamos requerir que cada próximo cnonce para una clave de API dada es mayor que el anterior, y solo almacena el último cnonce para la clave de API dada).
Hasta ahora no encuentro ningún nuevo vector de ataque: al garantizar que cnonces nunca pueda reutilizarse para cada clave de API, eliminamos por completo los ataques de repetición. ¿Me estoy perdiendo algo?