es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de OTP con Yubikey – problema con la firma HMAC-SHA1.

Tengo un problema de comprensión con la validación OTP para Yubikey. Estoy tratando de desarrollar en Flutter el Protocolo de Validación V2 (https://developers.yubico.com/OTP/Specifications/OTPvalidationprotocol.html).

No entiendo cómo obtener la firma. Utilicé el vector de prueba de https://developers.yubico.com/OTP/Specifications/Test_vectors.html.

Mi código es:

String apiKey = 'mG5be6ZJU1qBGz24yPh/ESM3UdU=';
String keyValue = 'id=1&nonce=jrFwbaYFhn0HoxZIsd9LQ6w2ceU&otp=vvungrrdhvtklknvrtvuvbbkeidikkvgglrvdgrfcdft';
var hmacSha1 = crypto.Hmac(crypto.sha1, apiKey.codeUnits);
crypto.Digest sha1Result = hmacSha1.convert(keyValue.codeUnits);
String hEncode64 = base64.encode(sha1Result.bytes);
final http.Response responseHttp = await http.get(
    Uri.parse('https://api.yubico.com/wsapi/2.0/verify?' +
        keyValue +
        ''' +
        hEncode64),
);

No obtengo el mismo resultado que el Vector de Prueba (h=%2Bja8S3IjbX593/LAgTBixwPNGX4%3D). -> +ja8S3IjbX593/LAgTBixwPNGX4=
Pero mi problema de comprensión es: cuando intento decodificar en base64 su vector de prueba, no puedo porque no está en formato utf8.

Y cuando intento con el vector de prueba disponible en el sitio web, no funciona.

https://api.yubico.com/wsapi/2.0/verify?id=1&otp=vvungrrdhvtklknvrtvuvbbkeidikkvgglrvdgrfcdft&nonce=jrFwbaYFhn0HoxZIsd9LQ6w2ceU&h=%2Bja8S3IjbX593/LAgTBixwPNGX4%3D
h=JE5WcMcXV7vooWkeN2/7A4DpMFo=
t=2021-12-15T12:51:37Z0635
status=BAD_SIGNATURE

¿Podrías ayudarme a entender por favor mi problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo dificultades para obtener la firma correcta al desarrollar el protocolo de validación OTP de YubiKey V2 en Flutter. Has utilizado el vector de prueba del sitio web de Yubico, pero tu código no produce el mismo resultado. Además, has encontrado que no puedes decodificar en base64 el vector de prueba porque no está en formato UTF-8.

    Para ayudarte a entender el problema, aquí tienes algunas posibles explicaciones y sugerencias:

    • Asegúrate de que los valores de apiKey y keyValue que estás utilizando sean correctos y coincidan con los datos del vector de prueba. Puede ser útil revisar la documentación y el código para asegurarte de que no haya errores tipográficos o errores.
    • Verifica que tu código para calcular la firma HMAC-SHA1 sea correcto. Puedes compararlo con otros ejemplos o bibliotecas disponibles en otros lenguajes para ver si hay alguna diferencia o error.
    • Verifica que el valor hEncode64 que generas a partir de la firma sea correcto. Una forma de hacer esto es compararlo con el valor esperado del vector de prueba. También puedes verificar que tus funciones de codificación/decodificación en base64 estén funcionando correctamente.
    • Si tienes problemas con la decodificación del vector de prueba, puedes intentar usar un formato o esquema de codificación diferente. Por ejemplo, puedes intentar usar la codificación hexadecimal o binaria en lugar de base64. También puedes consultar la documentación o los foros de Yubico para ver si hay alguna recomendación o solución alternativa para este problema.

    En general, puede ser útil descomponer el problema en pasos más pequeños y probar cada componente por separado para aislar la causa raíz del problema. También puedes comunicarte con el equipo de soporte de Yubico o la comunidad para obtener más ayuda o orientación.

Comments are closed.