Estoy usando HMAC + SHA256 para firmar y verificar reclamos en una aplicación web. Cada implementación tiene su propio secreto de 512 bits criptográfico al azar que puedo usar como clave HMAC, pero en algunos casos quiero mezclar otro secreto también. Por ejemplo, al mezclar la contraseña con hash del usuario como parte de la clave, el token se vuelve inválido tan pronto como el usuario cambia su contraseña, lo que es útil para los enlaces de restablecimiento de contraseña.
Mi pregunta principal es: ¿Cuál es la forma correcta de mezclar varios secretos para formar una clave HMAC?
Una posibilidad es concatenar los secretos juntos, pero ya he alcanzado la longitud máxima de la clave efectiva de HMAC + SHA256 con mi secreto de instancia de 512 bits. ¿Es XOR una mejor alternativa?
¿O hay una mejor manera de mezclar varias claves juntas, como anidar llamadas HMAC? P.ej. HMAC(HMAC(claims, secret1), secret2)
?
Como pregunta auxiliar: ¿Es apropiado hacer esto en primer lugar? Me gusta poder decir que si X secreto cambia, entonces el token no es válido automáticamente, sin exponer El secreto como reclamo . Firmar el token con múltiples secretos parece ser una excelente manera de hacerlo. ¿Debo tener en cuenta alguna inquietud al usar secretos (especialmente la contraseña de hash del usuario) de esta manera?