メインコンテンツまでスキップ

【YubiKey】PINを間違えたYubiKeyのロックを解除する

· 約5分
ogumaru

概要

Git のコミット署名に利用している YubiKey の PIN を 3 回間違えてしまい、ロックされてしまった。

ロックされた状態でgit commitすると下記のエラーとなった。

error: gpg failed to sign the data
error: unable to sign the tag

解除コードを利用してロックの解除を行う。

環境

項目種類 / バージョン
ハードウェアキーYubikey 5 NFC
ykmanYubiKey Manager (ykman) version: 4.0.7
yubico-piv-toolyubico-piv-tool 2.2.0
gpggpg (GnuPG) 2.2.27

また、git configで下記の設定をしており、コミットに署名するようになっている。

commit.gpgsign=true
user.signingkey=********

主鍵は別途保管し、副鍵から生成した署名鍵を YubiKey に入れて管理している。

結論

YubiKey の持つ機能の内、GPG スマートカードとしての PIN がロックされているため、下記の通り対話的に GPG コマンドを実行して解除する。

gpg --card-edit

プロンプトが gpg/cardになったらadminコマンドで管理コマンドを有効化する。

gpg/card> admin
Admin commands are allowed

passwdコマンドで2を選択し、PIN のブロックを解除する。

gpg/card> passwd
gpg: OpenPGP card no. … detected

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 2
PIN unblocked and new PIN set.

ブロックが解除されたらqを入力し終了する。

前提知識: YubiKey の入力コードについて

YubiKey では以下の入力コードが出てくる

当初これを正しく認識しておらず、混乱した。

名称主な用途初期値
PIN (User PIN)ユーザ認証 (これを間違えてロックされた)123456
Admin PIN不明 (今回これを利用)12345678
PUKPIN のブロック解除 (今回利用しない)12345678
Management keyエンティティの認証 (今回利用しない)0102030405060708 の 3DES

参考:

だめだった方法

ykman

設定時にインストールしていたため、最初このツールでの解除を図った。

ドキュメント内からUnblock the PIN (using PUK).と書かれているものがあったためこれを実行した。

WARNING: PC/SC not available. Smart card protocols will not function.

のようなエラーが出た場合はここを参考にsudo systemctl start pcscd.serviceすることで無事実行できるようになる。

ykman piv access unblock-pin
# > Enter PUK:
# > Enter a new PIN:
# > PIN unblocked

しかしgit commitを実行しても PIN のロックは解除できていなかった。

yubico-piv-tool

上記とは別のツールがあったためこれを利用して解除を試みた。

yubico-piv-tool -a unblock-pin
# > Enter puk:
# > Enter new pin:
# > Verifying - Enter new pin:
# > Successfully unblocked the pin code.

若干出力は異なるものの、概ねykmanと同様の出力となり、同じくロックの解除はできていなかった。

再発防止のための暫定的な対応

大文字/小文字、打ち間違いなどを考慮するとリトライ回数が 3 回では不足が考えられたので、下記の通り設定を変更した。

yubico-piv-tool -a verify -P "${YUBIKEY_PIN}" -a pin-retries --pin-retries=5 --puk-retries=5

参考: PIN/PUK のリトライ回数の変更 - YubiKey PIV Manual - (tech.yubion.com)