Non risolvo specificamente nessuna delle domande originali sullo scopo di Yubikey con Password Safe, ma penso che l'esperimento che ho svolto possa far luce sulla situazione.
Ho confermato che @Kousha è corretto: la risposta di Yubikey diventa semplicemente la password statica.
Verifica come descritto di seguito. (Volevo fornire il seguente codice per aiutare il poster su Password Safe on Source Forge , ma non ho un account per farlo.)
Password Risposte Yubikey sicure dalla chiave segreta
Una risposta Yubikey può essere generata in modo semplice con HMAC-SHA1 e la chiave segreta di Yubikey, ma la generazione della risposta Safe Safe Yubikey è un po 'più complicata a causa di caratteri nulli e incompatibilità del sistema operativo. (Essenzialmente, si deve inserire un byte nullo tra ogni byte originale nella sfida.) Inoltre, le sfide di Yubikey hanno analizzato . In breve, su un computer Linux, se key
memorizza la chiave segreta in forma esadecimale con 40 esadecimi e message
memorizza la richiesta, il seguente comando dovrebbe restituire la risposta Password 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
Se possibile, potresti voler scrivere una Chiave Segreta temporanea su Yubikey e utilizzare una sfida diversa dalla tua vera password per la verifica: non ho familiarità con il modo in cui i computer memorizzano le variabili o altri problemi di sicurezza correlati. (Sarei felice di sapere se qualcuno ne è a conoscenza.) Potresti almeno nascondere i caratteri digitati usando stty
. Il seguente script richiede la chiave segreta e la sfida senza visualizzarli, quindi restituisce la risposta di Password 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
Non posso attestare la portabilità del comando precedente e dello script precedente. Sono ridotte versioni di cose che hanno funzionato per me, almeno.