Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@onokatio

Yubikey 5をArchLinuxで使う

Yubikey 5を買いました。

公式サイトでは、WindowsだけではなくLinuxマシンでも使えるとのことなので、実際に各機能を使っていきたいと思います。

とりあえず買った状態でパッケージから出して、特に何も設定しない状態から進めます。

FIDO U2F

いわゆる、2段階認証を、SMSやワンタイムトークンアプリではなく、Yubikeyで代用できる機能です。
自分はまずこれを試しました。

GoogleやGithubが対応しています。
Yubikey側では特に何も設定せずとも使えます。

Linux側では、ブラウザがYubikeyをUSB接続のスマートカードだと認識するudevルールを追加します。

$ sudo pacman -S libu2f-host

これで、ブラウザからYubikeyのFIDO U2Fを利用できるようになりました。

FIDO2/webauthN

これは、FIDO U2Fと同じく主にブラウザから使う規格です。
U2Fは二段階認証でしたが、これはYubikeyをパスワード代わりに使用できます。
ユーザーIDとYubikeyでパスワードレスログインです。

現状、対応しているサイトを見つけられなかったため、試していません。

Challenge and Response

チャレンジレスポンス機能です。
もっと簡単に言うと、YubikeyをHMAC-SHA1署名を吐いてくれる箱として使う機能です。

チャレンジレスポンスでは、Linuxログイン時に、Yubikeyを2段階認証として使うことができます。

自分は試していないので、興味がある方は公式ドキュメントを参照してください。

※SSH時にも使用できるので、サーバーに設定してみるのも良いかもしれません。
※LUKS/dm-cryptのパスワード代わりにも使えるようです。

OATH-TOTP / OATH-HOTP

  • OATH-TOTP(Time-Based One Time Password)は、Google AuthenticatorやAuthyのように、サイトから渡されたQRコード(コード)から、30秒ごとに乱数を作り出し、二段階認証に使う機能です。
  • OATH-HOTP(HMAC-Based One Time Password)は、30秒ごとではなく回数ごとに乱数が変化するものです。使われているサービスはあまりありません。

Google AuthenticatorやAuthyは、Googleアカウントや電話番号を失効すると、復活することができません。
Yubikeyを使う場合、Yubikey本体さえなくさなければ問題ありません。

※なくしてしまう心配がある場合、Yubikeyを2セット買い、同じQRコードを両方に登録し、片方はスペアとして自宅等に置いておくことをオススメします。

Yubico Authenticator for Desktopをインストールします。

$ sudo pacman -S ccid opensc yubico-yubioath-desktop
$ sudo systemctl enable pcscd
$ sudo systemctl start pcscd

自分はコマンドでインストールしましたが、tar.gz形式でもダウンロード・実行できます。
https://www.yubico.com/products/services-software/download/yubico-authenticator/

メニューからYubico Authenticatorを起動します。
PCの画面にQRコードを表示した状態で、File→Scan QR Codeを選択し、完了です。

File→Set Passwordで暗号化ができます。

Yubikey 5 NFCの場合は、NFC搭載スマートフォンに「Yubico Authenticator」アプリを入れることで、スマートフォンからでもコードの追加/表示ができます。

Yubico OTP(One-Time Password)

デフォルトで、yマークをタップするとUSBキーボードとして自動入力される文字列がありますが、それがこれです。

タップする度に乱数が生成され、サービスへのログインに使用できます。
Yubico OTPを採用しているサービスは身の回りになさそうなので、これもパスです。

スマートカード (PIV)

これは、RSAやECCの鍵を保管し、署名に使える機能です。Windowsのアプリケーション証明書などで使われます。また、SSH鍵を保管することもできます。

PIVだけ別に記事に切り分けました。
Yubikey 5のPIVで遊ぶ ( SSH鍵生成&保管 )

OpenPGP

OpenPGPは、いわゆる公開鍵暗号の方式/プロトコルで、電子署名の作成やデータの暗号化、復号化を行えます。
Linuxには、gpgコマンドがあります。(Gnu Privacy Guard - GNUによるpgp実装)

Yubikeyでpgp鍵を登録する方法として、既にある鍵を登録する方法と、Yubikeyに生成させて公開鍵だけパソコンに返す方法があります。

既にある鍵を登録(推奨)

以下を実行します。

gpg --edit-key `鍵ID`

addkeyを入力します。8→A→Qと入力し、あとはいつもどおり鍵の生成をします。
これで、2つめのサブキーが生成できました、あとで使います。

ここで、togglekeytocardを順に入力します。

マスターキーを移動するか?と尋ねられるので、yを押します。
どこに鍵を保管するか尋ねられるので、Signature keyである1を入力します。

gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1

次に、key 1を入力し、keytocardを入力します。
また鍵の保管場所を尋ねられるので、Encryption keyである2を入力します。

gpg> keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2

次に、key 1key 2を入力し、keytocardを入力します。3を選びます。

gpg> keytocard
Please select where to store the key:
   (1) Signature key
   (2) Encryption key
   (3) Authentication key
Your selection? 3

これで鍵の登録は完了です。

鍵をYubikey内で生成

次は、Yubikeyに生成させる方式を試します。

まずは、Yubikeyにpgp鍵を登録するためのピンコードを変更しましょう。

YubikeyをUSBポートに指した状態でgpg --change-pinを実行します。

  • まず、ピンコードを変更するために1を押し、初期ピンコードである123456を入力します。
    そうすると、新しいピンコードを求められるので、入力します。リピートを求められるのでそれも入力します。

  • 次に、Adminピンコードを変更します。3を押して、同じようにピンコードを登録します。こちらの初期ピンコードは12345678 です。

両方変更が完了したら、次に実際に鍵を登録します。

先程の画面はQを押し終了させ、gpg --card-editを実行します。
Yubikeyはgpgにpgp鍵を保管できる外部デバイスとして認識されます。

以下のような表示がなされるはずです。

Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
Application ID ...: xxxxxxxxxxxxxxxxxxxxx
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: xxxxxxx
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : x x x
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

ここで、adminと入力し、Admin commands are allowedと出ることを確認したら、generateと入力します。

Make off-card backup of encryption key? (Y/n)

と、鍵のバックアップを作るかどうか尋ねられるので、Yを押します。

次に、Yubikeyにpgpを登録するために、ピンコードを求められるので先程設定した(変更した)ピンコードを入力します。

ここから先は、通常のgpgでの鍵生成と同じ手順です。

最後に、Adminピンコードを入力すれば、鍵が作られます。

プロンプトはquitで終了できます。

署名/暗号化

YubikeyをUSBポートに指した状態でgpg -Kすると、Card serial noとともにカード内の鍵が表示されます。これで通常通り署名の作成や、暗号化ができます。

スロット

Yubikey 5には、上記の機能以外に、2つまで機能を追加することができます。
機能を追加できる領域をスロットとよび、Slot 1とSlot 2が存在します。

スロットに追加できる追加機能は以下です。

  • Yubico OTP
  • Challenge and Response
  • 静的パスワード
  • OATH-HOTP

たとえば、Slot 1とSlot 2の両方にOATH-HOTPを追加することで、二段階認証用のキーを、デフォルトの32個にさらに2個追加で、合計34個のサイトの乱数を生成できます。

Slot 1にYubico OTPを、Slot 2に静的パスワードを設定すれば、2種類のYubico OTPアカウントを使い分けられ、パスワードも保管できます。

Yubikeyの金属端子に短く触れるとSlot 1が、長く触れるとSlot 2が動作します。

機能を自由に組み合わせることができます。

静的パスワード / Static Password

この機能だけ説明していなかったので追加します。
これは、任意の文字列をYubikeyに記憶できる機能です。

Yubikey Managerをインストールします。

$ sudo pacman -S yubikey-manager-qt

Application→OTPを選ぶと、スロットの設定画面が出てくるため、1か2のどちらかのスロットに設定して完了です。

参考: https://qiita.com/moutend/items/5c22d6e57a74845578f6
https://support.yubico.com/support/solutions/articles/15000006420-using-your-yubikey-with-openpgp

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What are the problem?