¿Cómo funciona YubiKey Challenge-Response "localmente"?

8

Recientemente obtuve un YubiKey NEO (y un poco decepcionado de que solo puedas tener dos métodos de autenticación de segundo factor activados de todos los listados).

En los administradores de contraseñas, aquellos que admiten YubiKey, Password Safe es de código abierto y funciona de forma local. Se puede configurar para autenticarse utilizando Desafío-Respuesta YubiKey HMAC-SHA1 . Estoy confundido acerca de cómo es posible crear un mecanismo seguro de desafío-respuesta con solo dos partes: (1) mi PC local, y (2) YubiKey. ( documentación relacionada )

De hecho, ¿cuál es la ventaja de enviar la Contraseña maestra a YubiKey, obtener la respuesta y descifrar la base de datos al usarla? Ahora, la respuesta de YubiKey es nuestra contraseña estática, que está disponible en la memoria y en todos los lugares donde se puede filtrar la Contraseña Maestra.

¿Lo han implementado por diversión? o me faltan algunos puntos?

    
pregunta Kousha 12.06.2015 - 01:28
fuente

4 respuestas

3

El código fuente de la contraseña Safe es de código abierto, por lo que puede hacer lo que hice: verificar.

Un HMAC toma dos entradas: la clave y los datos. Lo que PS hace con la ubikey es tomar su entrada como datos y enviarla a UbiKey. La clave está en la propia UbiKey y permanece allí.

Por lo tanto, la secuencia de eventos es la siguiente:

  • Usted ingresa su contraseña.
  • El software envía esa frase de contraseña al ubikey
  • La UbiKey realiza un HMAC usando su frase de contraseña como entrada y la clave secreta (almacenada internamente).
  • El valor resultante se envía a la aplicación y se usa para desbloquear su base de datos.

Por lo tanto, el sistema sigue siendo seguro siempre que los distintos elementos criptográficos estén seguros: la frase de contraseña REAL de la base de datos es el resultado de la operación del HMAC, el HMAC está hecho de la clave secreta, que permanece en su dispositivo 2FA y en su propio maestro contraseña, que ingresas a través de tu computadora.

    
respondido por el Stephane 12.06.2015 - 11:32
fuente
2

Te faltan algunos puntos.

Si alguien roba una copia de su archivo de base de datos de Password Safe, no podrá desbloquearlo a menos que también tenga posesión física de su yubikey (incluso si ya saben cuál es su frase de contraseña).

Por supuesto, si un atacante tiene un nivel de acceso a su sistema en el que puede leer la memoria, se le atornilla tan pronto como desbloquea su base de datos de Password Safe sin importar cuántos yubikeys tenga.

Una de las ventajas de vincular su yubikey con Password Safe es que puede sentirse un poco mejor al hacer una copia de seguridad de la base de datos de Password Safe en la nube.

    
respondido por el Michael 14.06.2015 - 05:34
fuente
2

No resuelvo específicamente ninguna de las preguntas originales aquí relacionadas con el propósito de Yubikey con Password Safe, pero creo que el experimento que realicé puede arrojar algo de luz sobre la situación.

He confirmado que @Kousha es correcta: la respuesta de Yubikey simplemente se convierte en la contraseña estática.

Verifique como se describe a continuación. (Quería proporcionar el siguiente código para ayudar al póster en Password Safe en Source Forge , pero no tengo una cuenta para hacerlo.)

Respuestas de contraseña seguras de Yubikey desde la clave secreta

Una respuesta de Yubikey se puede generar de manera directa con HMAC-SHA1 y la clave secreta de Yubikey, pero generar la respuesta de Contraseña segura de Yubikey es un poco más complicado debido a los caracteres nulos y las incompatibilidades del sistema operativo. (Esencialmente, uno tiene que insertar un byte nulo entre cada byte original en el desafío). Además, los desafíos de Yubikey obtienen analizado . En resumen, en una computadora con Linux, si key almacena la clave secreta en forma hexadecimal con 40 hexits y message almacena el desafío, el siguiente comando debe devolver la respuesta de Safe Safe Yubikey:

printf $message |
  xxd -p | sed 's/../&00/g' |
  sed 's/00$//' | cut -c -63 | xxd -r -p |
  openssl dgst -sha1 -mac HMAC -macopt "hexkey:$key" -binary |
  xxd -p

Si es posible, puede escribir una clave secreta temporal en el Yubikey y usar un desafío que no sea su contraseña real para la verificación. No estoy familiarizado con la forma en que las computadoras almacenan las variables u otros problemas de seguridad relacionados. (Me encantaría saber si alguien tiene conocimiento de esto). Al menos podría ocultar los caracteres escritos con stty . La siguiente secuencia de comandos solicita la clave secreta y el desafío sin mostrarlos, y luego envía la respuesta de contraseña Hash Yubikey.

#!/usr/bin/env bash
stty -echo
printf "shared secret key (40 hexits): "
read HMACSHA1_key
if [ -z "$HMACSHA1_key" ]; then
    stty echo
    printf '\n    Empty input. Exiting.\n'
    exit 1
fi
if [ ${#HMACSHA1_key} -ne 40 ]; then
    stty echo
    printf '\n    Need exactly 40 characters. Exiting.\n'
    exit 1
fi
HMACSHA1_no_space="${HMACSHA1_key/ /}"
if [ ${#HMACSHA1_no_space} -ne 40 ]; then
    stty echo
    printf '\n    No spaces. Exiting.\n'
    exit 1
fi
HMACSHA1_key_mod_hex=$(printf "$HMACSHA1_key" | sed 's/\([0-9]\|[a-f]\|[A-F]\)//g')
if [ -n "${HMACSHA1_key_mod_hex}" ]; then
    stty echo
    printf '\n    Invalid characters: %s\n' "${HMACSHA1_key_mod_hex}"
    printf '\n    Only 0-9, a-f, A-F allowed. Exiting.\n'
    exit 1
fi
printf "\n"
printf "message/challenge: "
read HMACSHA1_value
if [ -z "$HMACSHA1_value" ]; then
    stty echo
    printf '\n    Empty input. Exiting.\n'
    exit 1
fi

printf $HMACSHA1_value |
  xxd -p | sed 's/../&00/g' |
  sed 's/00$//' | cut -c -63 | xxd -r -p |
  openssl dgst -sha1 -mac HMAC -macopt "hexkey:$HMACSHA1_key" -binary |
  xxd -p

No puedo dar fe de la portabilidad del comando anterior y la secuencia de comandos anterior. Son versiones reducidas de las cosas que me funcionaron, al menos.

    
respondido por el user121934 20.08.2016 - 09:16
fuente
1

Básicamente, lo que agregó es como una "clave" física antigua a su almacenamiento de contraseñas.

Una "llave" que ningún cerrajero puede duplicar.

En su modelo existente, la "frase de contraseña" era el enlace débil. Si lo reveló accidentalmente, o si alguien navegó por el hombro, registró sus pulsaciones o lo reutilizó en un sitio web dudoso, un atacante podría ingresar a su almacén de contraseñas.

En la nueva configuración, el atacante debe hacer todo lo que más tiene acceso a su clave física.

    
respondido por el curious_cat 14.06.2015 - 06:23
fuente

Lea otras preguntas en las etiquetas