「YubiKey」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(二要素認証に用語を統一)
 
(3人の利用者による、間の44版が非表示)
1行目: 1行目:
[[Category:セキュリティ]]
+
[[Category:OpenPGP]]
  +
[[Category:スマートカード]]
[[en:Yubikey]]
 
  +
[[Category:Universal 2nd Factor]]
Yubikey は[[Wikipedia:ja:ワンタイムパスワード|ワンタイムパスワード]] (OTP) を生成する小さな [[Wikipedia:ja:セキュリティトークン|USB トークン]]です。Yubikey は [http://www.yubico.com/ Yubico] によって製造されています。
 
  +
[[en:YubiKey]]
  +
{{Related articles start}}
  +
{{Related|Universal 2nd Factor}}
  +
{{Related|OATH}}
  +
{{Related|dm-crypt/システム全体の暗号化}}
  +
{{Related|PAM}}
  +
{{Related|GnuPG}}
  +
{{Related|KeePass}}
  +
{{Related|OpenPGP-card-tools}}
  +
{{Related|スマートカード}}
  +
{{Related articles end}}
   
  +
[https://www.yubico.com YubiKey] は小さな [[Wikipedia:ja:セキュリティトークン|USB セキュリティトークン]]です。モデルにも依りますが、以下のようなことができます:
Yubikey は USB キーボードをエミュレートして OTP をテキストとして送信するため、特別なドライバーが必要ないという利点があります。
 
   
  +
* スマートカードのように振る舞う([[Wikipedia:CCID (protocol)|CCID protocol]] を使用) - [https://developers.yubico.com/PGP/ PGP] と [https://developers.yubico.com/PIV/ PIV] 秘密鍵の両方を保存できます。
== イントロダクション ==
 
  +
* [[Universal 2nd Factor]] (U2F) リクエストを処理する。
  +
* 約 30 個の[[オープン認証イニシアチブ]] (OATH) 資格情報を保存・クエリする。
  +
* Yubico OTP モードか HMAC-SHA1 モードで[[Wikipedia:Challenge–response authentication|チャレンジレスポンス認証]]を処理する。
  +
* [[Wikipedia:ja:ワンタイムパスワード|ワンタイムパスワード]] (OTP) を生成する - [https://developers.yubico.com/OTP/ Yubico's AES based standard]。
  +
* 63 文字までの静的パスワードを"入力"する。
   
  +
多くの機能を提供する一方、YubiKey の新しいバージョンは[https://www.yubico.com/blog/secure-hardware-vs-open-source/ オープンソースとしてリリースされていません]。代替としては [[Solo]]、[[Tillitis TKey|TKey]]、[[Nitrokey]] があります。
=== 仕組み ===
 
   
  +
== インストール ==
Yubikey の認証プロトコルは[[Wikipedia:ja:共通鍵暗号|共通鍵暗号]]に基づいています。より正確に言うと、それぞれの Yubikey には固有の128ビットの [[Wikipedia:ja:Advanced_Encryption_Standard|AES]] 鍵が含まれています。この鍵を使用して、キーの ID やカウンター、乱数などからなるトークンを暗号化します。OTP はキーの ID と暗号化されたトークンを連結して作成されます。
 
   
  +
=== 管理ツール ===
作成された OTP は認証を行いたいシステムに送られます。システムは OTP が問題ないか検証サーバーに問い合わせを行います。検証サーバーには Yubikey ID -> AES 鍵の対応表があり、OTP のキー ID を使って、AES 鍵を取得して OTP の他の部分を復号化することが可能です。OTP が問題なければ (平文の ID と暗号化された ID が同じで、([[Wikipedia:ja:反射攻撃|反射攻撃]]をふせぐため) カウンターが最後に確認された値より大きい場合)、認証は成功します。
 
   
  +
* {{App|YubiKey Manager|USB を通して YubiKey の設定とクエリをするための Python ライブラリとコマンドラインツール({{ic|ykman}})。オプションの GUI あり。|https://developers.yubico.com/yubikey-manager/|{{Pkg|yubikey-manager}}, {{Pkg|yubikey-manager-qt}}}}
検証サーバーは認証結果をシステムに送り返し、そのレスポンスに応じてアクセスを与えるべきかどうか決定します。
 
  +
::{{Note|インストール後、{{ic|pcscd.service}} を[[有効化]]してください。}}
  +
* {{App|YubiKey Personalization|OTP USB 接続を通して YubiKey の設定とクエリをするためのライブラリとツール。ykman よりも強力ですが、使うのが難しいです。オプションの GUI あり。|https://developers.yubico.com/yubikey-personalization/|{{Pkg|yubikey-personalization}}, {{Pkg|yubikey-personalization-gui}}}}
   
=== セキュリティリスク ===
+
=== 認証ツール ===
   
  +
* {{App|Yubico PAM|Yubico OTP または チャレンジレスポンス認証による [[PAM]] ユーザ認証。|https://developers.yubico.com/yubico-pam/|{{Pkg|yubico-pam}}}}
==== AES 鍵の漏洩 ====
 
  +
* {{App|Yubico PAM-U2F|[[U2F]] により [[PAM]] ユーザ認証。|https://developers.yubico.com/pam-u2f/|{{Pkg|pam-u2f}}}}
  +
* {{App|Yubico Authenticator for Desktop|USB を通して YbiKey から OATH コードを読み込む GUI。古いスロットベースの実装 (YubiKey Standard と Edge) と新しい OATH 実装をサポート (YubiKey NEO と 4)。注: [https://gitlab.archlinux.org/archlinux/packaging/packages/yubioath-desktop/-/issues/2 archlinux/packaging/packages/yubioath-desktop]。<!-- TODO: issue テンプレートを使う -->|https://developers.yubico.com/OATH/YubiKey_OATH_software.html|{{Pkg|yubioath-desktop}}}}
  +
* {{App|Yubico Authenticator 6.0+ for Desktop|Yubico Authenticator 6.0+ (バージョン 6.0 及びそれ以降) は、YubiKey の第二要素クレデンシャルを管理するためのアプリケーションです。バージョン 6.0 から、コードベースが Flutter フレームワークを使って完全に書き換えられました。|https://developers.yubico.com/yubioath-flutter/|{{AUR|yubico-authenticator-bin}}}}
  +
* {{App|libfido2|クライアントサイドの U2F サポート。ウェブブラウザで U2F プロトコルを YubiKey による認証のために利用できるようになります。|https://developers.yubico.com/libfido2/|{{Pkg|libfido2}}}}
  +
* {{App|YubiKey Full Disk Encryption|チャレンジレスポンスモードを使用し、強力な LUKS パスフレーズを生成します。完全なディスク暗号化をサポート。|https://github.com/agherzan/yubikey-full-disk-encryption|{{Pkg|yubikey-full-disk-encryption}}}}
   
  +
== 入力 ==
ご想像の通り、AES 鍵は絶対に秘密にする必要があります。Yubikey から AES 鍵を抜き取ることはできません (少なくともソフトウェアを使って抜き取るのは不可能に近い)。AES 鍵は検証サーバーにも存在するため、このサーバーのセキュリティというのがとても重要になります。
 
  +
  +
YubiKey は、USB を通して API を呼び出したりボタンを押したりする形で入力を受け付けます。
  +
  +
ボタンはとても敏感です。状況にも依りますが、ボタンを押すと以下のどれか1つを行います:
  +
  +
* 静的パスワードやワンタイムパスワード(OTP)をトリガーする(短く押すとスロット1、長く押すとスロット2)。これはデフォルトの挙動で、うっかりトリガーしてしまうことは簡単です。
  +
* 機能やアクセスを確定/許可する。LED が点灯し、ユーザに入力を促します。
  +
* スマートカードを挿入/除去する。
  +
  +
== 出力 ==
  +
  +
YubiKey は以下の入力を出力に変換します:
  +
  +
* キーストローク(USB キーボードをエミュレートします)、静的パスワードや OTP をタイプするために使用します。(静的パスワードはキーロガーに対して脆弱であることに注意してください。)
  +
* 組み込みの LED は:
  +
** 挿入した際に一度光ります。トラブルシューティングに便利です。
  +
** API の応答を許可するためにボタンを押すことを要求された際に安定して光ります。
  +
* USB を通した API 応答。これは以下のように使用されます:
  +
** チャレンジレスポンス認証(Yubico OTP モードか HMAC-SHA1 モードを使って計算されます)
  +
** U2F チャレンジレスポンス認証
  +
** CCID スマートカード関連のリクエスト
  +
  +
== USB 接続モード ==
  +
  +
YubiKey のモデルによりますが、デバイスは3つまでの異なる USB インターフェイスを提供します。これらのインターフェイスのうち2つは USB HID (Human Interface Device) デバイスクラスを実装しています; 3つ目はスマートカードインターフェイス(CCID)です。3つすべて独立して有効化/無効化できます。これにより、それらに関連したプロトコルの制御ができます。
  +
  +
以下の表はどのプロトコルがどのインターフェイスを使用するかを示しています:
  +
  +
{| class="wikitable"
  +
! プロトコル !! インターフェイス
  +
|-
  +
|OTP || Keyboard HID
  +
|-
  +
|FIDO || Other HID
  +
|-
  +
|PIV || CCID
  +
|-
  +
|OpenPGP || CCID
  +
|-
  +
|OATH || CCID
  +
|}
  +
  +
{{ic|ykman}} は "modes" という用語を使用します、OTP、FIDO、CCID と名付けられています。
  +
  +
{{Note|ykman はリリース 0.6.1 (2018-04-16)で "U2F" を "FIDO" と名前を変更しました。https://developers.yubico.com/yubikey-manager/Release_Notes.html}}
  +
  +
=== 有効になっているモードを取得 ===
  +
  +
バージョン 5 以前の YubiKey では:
  +
  +
{{hc|$ ykman config mode|
  +
Current connection mode is: OTP+FIDO+CCID
  +
}}
  +
  +
{{Note|{{ic|ykman mode}} というコマンドは非推奨となっており、今後削除されるでしょう。}}
  +
  +
YubiKey バージョン 5 では:
  +
  +
{{hc|$ ykman info|
  +
Device type: YubiKey 5 NFC
  +
Serial number: XXXXXXXXX
  +
Firmware version: 5.4.3
  +
Form factor: Keychain (USB-A)
  +
Enabled USB interfaces: OTP, FIDO, CCID
  +
NFC transport is enabled.
  +
  +
Applications USB NFC
  +
FIDO2 Enabled Enabled
  +
OTP Enabled Enabled
  +
FIDO U2F Enabled Enabled
  +
OATH Enabled Enabled
  +
YubiHSM Auth Enabled Enabled
  +
OpenPGP Enabled Enabled
  +
PIV Enabled Enabled
  +
}}
  +
  +
=== モードをセット ===
  +
  +
すべてのモードが出荷時から有効化されています。変更するには:
  +
  +
$ ykman mode ''[OPTIONS]'' ''MODE''
  +
  +
* {{ic|''MODE''}} には文字列を使用できます。例えば、{{ic|OTP+FIDO+CCID}}。短い形式もあります: {{ic|o+f+c}}。
  +
* {{ic|''MODE''}} にはモード番号を使用できます。複数の有効化するモードをエンコードしたものです。
  +
  +
以下にモード番号の表があります:
  +
  +
{| class="wikitable"
  +
|0||OTP device only.
  +
|-
  +
|1||CCID device only.
  +
|-
  +
|2||OTP/CCID composite device.
  +
|-
  +
|3||U2F device only.
  +
|-
  +
|4||OTP/U2F composite device.
  +
|-
  +
|5||U2F/CCID composite device.
  +
|-
  +
|6||OTP/U2F/CCID composite device.
  +
|-
  +
|81||CCID device only, with touch-eject.
  +
|}
  +
  +
{{Note|一部の例では 86 という番号を使用しています。これは[https://github.com/Yubico/yubikey-manager/issues/20#issuecomment-326496204 無効な番号]です。80 は無視され、6 のように振る舞います。}}
  +
  +
オプション:
  +
* {{ic|--touch-eject}} - ボタンを押すとスマートカードを挿入/除去します。これは CCID のみのモードでのみ動作します; FIDO と OTP は無効化されていなければなりません。
  +
* {{ic|--autoeject-timeout ''SECONDS''}} - 一定時間立つとスマートカードを自動的に除去します。{{ic|--touch-eject}} と同じような制限があります。
  +
* {{ic|--chalresp-timeout ''SECONDS''}} - チャレンジレスポンス認証のタイムアウトを設定します。
  +
  +
さらなる情報は、{{ic|ykman mode --help}} を見てください。
  +
  +
== ワンタイムパスワード ==
  +
  +
どういうわけか、この機能には誤解を招く名前が付けられています。この機能には静的パスワードとチャレンジレスポンス認証の機能も含まれているのです。
  +
  +
2つのスロットがこの機能のために提供されています。それぞれのスロットには、短くボタンを押したり、長くボタンを押すことでアクセスできます。それぞれのスロットは以下のうち'''1つ'''を設定できます:
  +
  +
* Yubico OTP
  +
* OATH-HOTP
  +
* OATH-TOTP
  +
* チャレンジレスポンス認証
  +
* 静的パスワード
  +
  +
それぞれの機能には、作成時に提供できる複数の設定オプションがあります。しかし、一度設定すると読み返すことができません。{{ic|ykman otp swap}} により、スロット1とスロット2を入れ替えることはできます。
  +
  +
=== 工場出荷時の設定 ===
  +
  +
新しい YubiKey では、Yubico OTP がスロット1に事前に設定されています。この初期の AES 共通鍵はその YubiKey と Yubico の認証サーバーに保存されています。これにより、YubiCloud に対して認証でき、Yubico Forum ウェブサイトや https://demo.yubico.com と組み合わせて Yubico OTP を使用できます。
  +
  +
{{Warning|スロット1にある工場出荷時のキーを上書きしてしまうと、同じ信頼レベルの新しいキーを作成することはできなくなります。工場で生成された Yubico OTP 認証情報は {{ic|CC}} という接頭辞で始まります。一方、ユーザが生成した認証情報は {{ic|VV}} で始まります。セキュリティおよび機能的には基本的な違いはありませんが、一部のサービスは {{ic|CC}} の認証情報のみを信頼します。さらなる情報はこの[https://forum.yubico.com/viewtopic12ca.html?f%3D16&t%3D1960 フォーラムスレッド]で見られます。}}
   
  +
=== Yubico OTP ===
==== 検証リクエスト/レスポンスの盗聴 ====
 
   
  +
[https://developers.yubico.com/OTP/ Yubico OTP] は[[Wikipedia:ja:共通鍵暗号|共通鍵暗号]]に基づいています。より具体的には、それぞれの YubiKey にはそのデバイスにユニークな128ビットの [[Wikipedia:ja:Advanced_Encryption_Standard|AES]] 鍵が含まれており、この鍵は検証サーバーにも保存されています。パスワードを尋ねられた際には、YubiKey は鍵の ID、カウンタ、乱数などの異なるフィールドを連結し、その結果を暗号化することでトークンを作成します。
システムは検証サーバーの決定に従っているため、検証サーバーになりすます攻撃が考えられます。従って、システムは検証サーバーを認証する必要があります。2つの方法が存在します:
 
* '''HMAC''': 共通鍵暗号を使用して、対象サーバーと検証サーバーで鍵を共有して、その鍵を使ってリクエストとレスポンスに署名をします。
 
* '''TLS''': リクエストとレスポンスは HTTP で受け取りするので、TLS (HTTPS) を使って接続を認証・暗号化することが可能です。
 
   
  +
この OTP は対象のシステムに送られ、検証サーバーに渡されます。検証サーバー(同じく秘密鍵を所有しています)はそれを復号し、内部の情報を検証します。その結果は対象のシステムに返されます。そして、システムはアクセスを許可するかどうかを判断することができます。
=== YubiCloud と検証サーバー ===
 
   
  +
==== YubiCloud と検証サーバー ====
Yubikey を購入した時点で、Yubikey には Yubico だけが知っている AES 鍵が初めから搭載されています。たとえあなたであっても、Yubico はその AES 鍵を教えるようなことはしません。Yubico はフリーの制限付き検証サーバーを提供しています (YubiCloud)。また、サーバーのオープンソース実装も提供しています。
 
   
  +
Yubico は、YubiCloud と呼ばれる、無料かつ制限無しでアクセスできる検証サーバーを提供しています。YubiCloud はすべての YubiKey の工場出荷時の設定を把握しており、これは (例えば) {{Pkg|yubico-pam}} によって使用される「デフォルト」の検証サービスです。Yubico はまた、サーバーの[https://developers.yubico.com/Software_Projects/Yubico_OTP/YubiCloud_Validation_Servers/ オープンソースの実装]も提供しています。
そこで2つの選択肢が出てきます:
 
* Yubikey に初めから載っている AES 鍵を使って Yubico の検証サーバーで検証を行う。
 
* Yubikey に新しく AES 鍵を書き込んで自分で検証サーバーを運営する。
 
   
 
{{Note|Yubico の検証サーバーを認証する場合:
 
{{Note|Yubico の検証サーバーを認証する場合:
  +
 
* '''HMAC''' を使用: https://upgrade.yubico.com/getapikey/ から HMAC 鍵と ID を取得してください。
 
* '''HMAC''' を使用: https://upgrade.yubico.com/getapikey/ から HMAC 鍵と ID を取得してください。
* '''HTTPS''' を使用: 検証サーバーの証明書は GoDaddy によって署名されています。Arch ではデフォルトで GoDaddy を信頼しています ({{Pkg|ca-certificates}} をインストールしていれば)。}}
+
* '''HTTPS''' を使用: 検証サーバーの証明書は GoDaddy によって署名されています。Arch ではデフォルトで GoDaddy を信頼しています ({{Pkg|ca-certificates}} をインストールしていれば)。
  +
}}
   
  +
==== 設定と使用 ====
== SSH で2段階認証 ==
 
   
  +
スロットに新しいキーを生成してください。そして、それを YubiCloud にアップロードしてください(ブラウザで開きます):
{{Note|参照: https://developers.yubico.com/yubico-pam/Yubikey_and_SSH_via_PAM.html}}
 
   
  +
$ ykman otp yubiotp --generate-key --upload 2
このセクションでは Yubikey を使って SSH で[[Wikipedia:Two factor authentication|2段階認証]] (パスワードと Yubikey によって生成された OTP を使用) を行う方法を説明します。
 
   
  +
さらなる情報は、{{ic|ykman otp yubiotp --help}} で見てください。
=== 要件 ===
 
   
  +
==== セキュリティリスク ====
{{Pkg|yubico-pam}} をインストールしてください。
 
   
  +
===== AES 鍵の漏洩 =====
{{Note|Yubikey を使用するようにリモートサーバーを設定する場合、緊急用に SSH セッションを余分に一つ開いておいたほうが良いでしょう。間違えて設定をしてメインのセッションをうかり終了してしまったときにサーバーからロックアウトされないようにするためです。}}
 
   
  +
ご想像の通り、AES 鍵は絶対に秘密にする必要があります。Yubikey から AES 鍵を抜き取ることはできません (少なくともソフトウェアを使って抜き取るのは不可能に近い)。AES 鍵は検証サーバーにも存在するため、このサーバーのセキュリティというのがとても重要になります。
=== PAM の設定 ===
 
   
  +
===== 検証リクエスト/レスポンスの盗聴 =====
{{ic|/etc/pam.d/sshd}} を編集して、以下の行を:
 
auth required pam_unix.so
 
次のように修正してください:
 
auth required pam_unix.so use_first_pass
 
   
  +
システムは検証サーバーの決定に従っているため、検証サーバーになりすます攻撃が考えられます。これを防ぐには、対象のシステムが、HMAC か HTTPS を使用して、検証サーバーを認証する必要があります。
そして以下のどちらかの設定をしてください。HTTPS を使用する方法を推奨しますが、どちらを選んでもかまいません。
 
   
  +
=== チャレンジレスポンス認証 ===
==== HTTPS を使用して検証サーバーを認証する場合 ====
 
先に編集した {{ic|pam_unix.so}} の行の'''前'''に以下の行を挿入します。
 
auth required pam_yubico.so id=1 url=https://api.yubico.com/wsapi/2.0/verify?id=%d&otp=%s
 
id=1 は実際には使われませんがないと動作しません。
 
{{Note|自分で検証サーバーを動かしている場合は、{{ic|url}} パラメータをあなたのサーバーに置き換えて下さい。自分で検証サーバーを動かさない場合、{{ic|url}} パラメータを省略してもかまいません。上の設定はデフォルトだからです。}}
 
   
  +
チャレンジは YubiKey に送られ、YubeKey はとある秘密に基づいてレスポンスを計算します。同じチャレンジに対しては常に同じレスポンスが返されます。その秘密無しでは、この計算は現実的ではありません。たとえ、大量のチャレンジレスポンス認証を行ったとしてもです。
==== HMAC を使用して検証サーバーを認証する場合 ====
 
先に編集した {{ic|pam_unix.so}} の行の'''前'''に以下の行を挿入します。
 
auth required pam_yubico.so id=1234 key=YnVubmllcyBhcmUgY29vbAo=
 
{{ic|id}} と {{ic|key}} はあなたの HMAC ID とキーに置き換えて下さい。上で書いたように Yubico からリクエストできます。
 
{{Note|
 
* HMAC 証明書はサーバーごとに固有のものです。たとえ攻撃者が証明書を発見したとしても、他のサーバーを認証するレスポンスを作成することはできません。
 
* {{ic|url}} パラメータは指定していません。デフォルトは Yubico の HTTP (non-TLS) サーバーになっています。}}
 
HMAC 証明書を権限がないユーザーが見れないようにファイルを読み込み禁止にすると良いでしょう:
 
# chmod o-r /etc/pam.d/sshd
 
   
  +
これは以下のように利用できます:
{{Note|自分で検証サーバーを運営している場合、{{ic|url}} パラメータを追加してあなたのサーバーを指定してください。自分で検証サーバーを動かさない場合、{{ic|url}} パラメータを省略してもかまいません。}}
 
   
  +
* 真の二要素認証: ユーザーはチャレンジを与えられ、パスワードに加えて正しいレスポンスを返さなければなりません。両方が秘密鍵を持っていなければなりません。
=== SSHD の設定 ===
 
  +
* 「準」二要素認証: チャレンジはパスワードのように振る舞い、サーバーは正しいレスポンスを保持しています。これは OTP ではなく、レスポンス鍵を手に入れれば誰でもアクセス許可を得ることができます。しかし、サーバーが秘密鍵を必要としないので、よりシンプルです。
   
  +
2つのチャレンジレスポンス認証アルゴリズムがあります:
{{ic|/etc/ssh/sshd_config}} に以下の行が含まれていること、そしてアンコメントされていることを確認してください。以下の設定はデフォルトです。
 
ChallengeResponseAuthentication no
 
UsePAM yes
 
   
  +
* HMAC-SHA1
=== テスト ===
 
  +
* Yubico OTP
   
  +
これは、{{Pkg|yubikey-personalization-gui}} を使って GUI で、あるいは以下の指示で設定できます。
PAM 設定ファイルに変更を加えただけで再起動をする必要はありません。
 
   
  +
==== HMAC-SHA1 アルゴリズム ====
ログインするには、SSH の {{ic|Password:}} プロンプトで、'''エンターを押さないで'''パスワードを入力します。そして Yubikey のボタンにタッチしてください。Yubikey は OTP の最後にリターンを送信するのでエンターキーに触れる必要はありません。
 
   
  +
生成された鍵を使ってスロット2をチャレンジレスポンス認証モードで設定してください:
{{Note|pam_unix.so から use_first_pass 行を削除することで、先に YubiKey を使ってからパスワードが要求されるようにできます。}}
 
   
  +
$ ykman otp chalresp --generate 2
=== 解説 ===
 
基本的なパスワード認証を行う {{ic|pam_unix.so}} よりも前に {{ic|pam_yubico.so}} が読み込まれるため、パスワードと OTP を連結した文字列が {{ic|pam_yubico.so}} に与えられます。OTP は固定長なので (ここではN文字とします)、与えられた最後のN文字を OTP として、他の文字列はパスワードと認識する必要があります。OTP の認証が成功したら、パスワードは次の PAM モジュールである {{ic|pam_unix.so}} に送信されます。ただし {{ic|use_first_pass}} がある場合は前のモジュールからパスワードを受け取ります。
 
   
  +
キーを与えるための {{ic|--generate}} フラグは省略できます ({{ic|ykman otp chalresp --help}} を参照)。キーを与える主な利点は、バックアップ用の2つ目のデバイスをセットアップする際に使用できることです。例えば、{{ic|openssl rand -hex 20}} は適切な鍵を生成します。
== Yubikey NEO の OATH アプレットをインストール ==
 
以下の手順を踏めば OATH アプレットを Yubikey NEO にインストールすることができます。Google Play ストアの Yubico Authenticator が使えるようになります。
 
{{Note|1=以下の手順はファームウェアのバージョン 3.1.2 以下の NEO でのみ必要です。最新の NEO (と U2F) にはあらかじめ OpenPGP アプレットがインストールされています。}}
 
   
  +
==== Yubico OTP アルゴリズム ====
=== NEO を CCID デバイスとして設定 ===
 
  +
# AUR から {{AUR|yubikey-personalization-gui-git}} をインストールしてください。
 
  +
{{ic|ykman}} は chal-yubico アルゴリズムの設定にはサポートしていないようです。しかし、{{ic|ykpersonalize}} を使用できます。スロット2にランダムな鍵を生成してください:
  +
  +
$ ykpersonalize -2 -ochal-resp -ochal-yubico
  +
  +
さらなる情報は {{man|1|ykpersonalize}} を見てください。
  +
  +
==== チャレンジを送信 ====
  +
  +
チャレンジを送信してレスポンスを受信するには、{{ic|ykchalresp -''slot'' ''challenge''}} コマンドを使用できます。例えば:
  +
  +
{{hc|$ ykchalresp -2 ''archie''|
  +
12a19763be77d75af46fb76f0b737c117fa47205
  +
}}
  +
  +
このコマンドは、プログラム済みのスロット2のユニークな 40 バイトの SHA1 ハッシュ値を返します。チャレンジが異なると、異なるユニークなレスポンスが返されます。
  +
  +
=== 静的パスワード ===
  +
  +
静的パスワードも生成できます:
  +
  +
$ ykman otp static --generate ''slot''
  +
  +
あるいは、パスワードを与えることも:
  +
  +
$ ykman otp static ''slot'' ''password''
  +
  +
複数のオプションがあります; 生成されるパスワードの長さと文字セットや、Enter キーストロークを送るかどうかを設定できます。詳細は {{ic|ykman otp static --help}} で見てください。
  +
  +
{{Tip|ほとんどの YubiKey では、性的パスワードを保存するためのスロットの数 (2個) は限られています。チャレンジレスポンス認証のスロットは、無制限のチャレンジに対して静的ハッシュ値のレスポンスを提供します。これらは数字と小文字アルファベットのみですが、レスポンスの長さによってかなりのエントロピーが生まれます。}}
  +
  +
=== エミュレートされた USB キーボードの限界、「なぜ私のパスワードは弱く見えるのか」 ===
  +
  +
ほとんどのキーボードレイアウトで YubiKey が機能するようにするために、パスワードはデフォルトで ModHex アルファベット({{ic|cbdefghijklnrtuv}})、数値 {{ic|0-9}}、{{ic|!}} に制限されています。これらの文字は非常に多くのキーボードレイアウトで同じスキャンコードを使用し、ほとんどのコンピュータで互換性が保証されます。
  +
  +
Yubico はこの問題に関する[https://resources.yubico.com/53ZDUYE6/as/9hccqgx9bwwqq96mhkk8jb4h/Static_Password_Function.pdf 白書]を提供しています。
  +
  +
== OATH ==
  +
  +
YubiKey は2つの [[OATH]] 実装を提供します:
  +
; OATH API: 新しい手法であり、モデルによっては約30個の認証情報を格納できます。(YubiKey 4、NEO、それ以降)
  +
; OTP slot: 古い手法であり、両方の OTP スロットが1つの認証情報を格納できます。(チャレンジレスポンス認証をサポートするすべてのモデル)
  +
  +
=== OATH API ===
  +
  +
GUI がお好みならば、{{Pkg|yubioath-desktop}} を使用できます。
  +
  +
{{ic|ykman}} は、{{ic|ykman oath uri}} を使って URI 形式のコードを追加できます。以下は、QR コードのイメージから認証情報を追加するワンライナーです:
  +
  +
$ zbarimg qr_code.png --quiet --raw | xargs ykman oath uri
  +
  +
手動で行うこともできます。TOTP 鍵をプログラムし、コードを生成するためにボタンへのタッチを要求します:
  +
  +
$ ykman oath add --touch ''name'' ''secret''
  +
  +
HOTP 鍵をプログラムします:
  +
  +
$ ykman oath add --oath-type HOTP ''name'' ''secret''
  +
  +
認証情報を一覧表示します:
  +
  +
$ ykman oath list
  +
  +
コードを生成します:
  +
  +
$ ykman oath code ''query''
  +
  +
利用可能なサブコマンドをすべて見るには、{{ic|ykman oath --help}} を実行してください。それぞれのサブコマンドの情報を見るには、{{ic|ykman oath ''subcommand'' --help}} を使ってください。
  +
  +
=== OTP スロット実装 ===
  +
  +
スロット2で HOTP をプログラムします:
  +
  +
$ ykman otp hotp 2 ''key''
  +
  +
TOTP をプログラムします:
  +
  +
$ ykman otp chalresp --totp ''slot'' ''key''
  +
  +
HOTP を生成します:
  +
  +
$ ykman otp calculate ''slot''
  +
  +
TOTP を生成します:
  +
  +
$ ykman otp calculate --totp ''slot''
  +
  +
{{ic|ykman otp --help}} と https://developers.yubico.com/OATH/ も参照してください。
  +
  +
== U2F ==
  +
  +
YubiKey を用いた [[Universal 2nd Factor]] (U2F) はとても単純です。鍵そのものに対する設定は必要ありません。このモードは一部のドキュメントやユーティリティでは 'FIDO' とも呼ばれていることに注意してください。{{ic|ykman}} ユーティリティを通じていくつかの限定された管理オプションがあります:
  +
  +
* PIN を設定: {{ic|ykman fido access change-pin}}
  +
* 個別の資格情報を削除: {{ic|ykman fido credentials delete ''QUERY''}}
  +
* すべての資格情報と PIN をリセット: {{ic|ykman fido reset}}
  +
  +
U2F を認証に使用するには、[[U2F]] の指示を見てください。
  +
  +
[[WebAuthn]] も参照。
  +
  +
== CCID スマートカード ==
  +
  +
CCID (Chip Card Interface Device) は、スマートカードリーダーとして振る舞う USB デバイスによって使用されたり、YubiKey のように USB を通して直接接続するセキュリティトークンで使用されたりする USB 標準デバイスクラスです。HID (Human Interface Device) と CCID は両方とも USB デバイスクラスです。つまり、これらは USB 仕様の同じカテゴリに属すということです。HID は、キーボードなどのようなコンピュータ周辺機器のための仕様です。YubiKey は、OTP モードと FIDO モードで使用されたときは USB (HID) キーボードのように働きます。しかし、PIV アプリケーションを使用する時や OpenPGP デバイスとして使用する時は CCID プロトコルに切り替わります。
  +
  +
CCID モードは 2015 年11以降に出荷された YubiKey のすべてでデフォルトで有効になっているはずです[https://www.yubico.com/support/knowledge-base/categories/articles/use-yubikey-yubikey-windows-hello-app/]。少なくとも CCID モードは有効化してください。[[#有効になっているモードを取得]] を見てください。
  +
  +
=== PIV ===
  +
  +
YubiKey NEO 以降から、YubiKey はチップ上に PIV (Personal Identity Verification) アプリケーションが含まれています。PIV は、RSA や ECC(楕円曲線暗号) を使用するトークンが個人電子証明書にどのように使用されるかを定めた米国政府規格(FIPS 201)です。YubiKey NEO は RSA 暗号のみをサポートしますが、その後のモデル(YubiKey 4 と 5)は RSA と ECC の両方をサポートします。PIV トークンの特徴は、秘密鍵を保護しオンチップで動作するように構築されているという点です。秘密鍵は、トークン上にインストールされた後は決してトークン外に出ることはありません。オプションで、オンチップの乱数生成器を使って秘密鍵をオンチップで生成することもできます。秘密鍵がオンチップで生成された場合、秘密鍵はチップの外部で処理されることはなく、トークンから秘密鍵を復元する方法もありません。PIV メカニズムを使用する際は、YubiKey は CCID デバイスとして機能します。
  +
  +
=== OpenPGP スマートカード ===
  +
  +
YubiKey は標準の GPG スマートカードとしてとして振る舞うことができます; セットアップと使用法に関する説明は [[GnuPG#スマートカード]] セクションを見てください。Yubico は https://developers.yubico.com/PGP/ でドキュメントも提供しています。
  +
  +
他の機能(U2F と OTP)を使用したくない場合、ボタンはキーを挿入/除去するように設定でき、自動除去のタイムアウトも設定できます。詳細は [[#USB 接続モード]] を見てください。
  +
  +
デフォルトのユーザ PIN は {{ic|123456}} で、デフォルトの admin PIN は {{ic|12345678}} です。デフォルトの PUK も {{ic|12345678}} です。覚えておきましょう。
  +
  +
== 使用例 ==
  +
  +
このセクションでは、様々な認証の目的での YubiKey の使用法について説明しています。しかし、以下は使用法について完全に網羅されたリストではありません。
  +
  +
=== LUKS による完全なディスク暗号化 ===
  +
  +
複数の選択肢があります:
  +
  +
* '''チャレンジレスポンス認証:''' とあるチャレンジに対する[[#チャレンジレスポンス認証|レスポンス]]が LUKS 鍵として使用されます。チャレンジは、真の二要素認証においてはパスワードとして機能し、一要素認証においてはチャレンジは平文で保存することができます。
  +
* '''GnuPG:''' YubiKey の [[#CCID スマートカード|PGP スマートカード]]の機能を使用します。長いパスフレーズ無しで強力な二要素認証を提供します。
  +
* '''FIDO HMAC Secret:''' あなたの YubiKey が [[U2F]] をサポートしているのであれば、共通鍵を返すように設定できます。
  +
  +
{{Note|ディスクの暗号化の強度は、使用している鍵のうち最も弱いものの強さと同じです。上記のツールの内一つを設定したら、初期のパスフレーズを削除するか、より長いものに置き換えることを検討してください。}}
  +
  +
==== 共通の前提条件 ====
  +
  +
* [[dm-crypt/システム全体の暗号化|LUKS により暗号化された]]起動可能なシステム。少なくとも1つの空きキースロットがあり、{{ic|encrypt}} [[mkinitcpio]] フックを使用していること。
  +
** {{AUR|mkinitcpio-ykfde}} を例外として、{{ic|sd-encrypt}} はこれらのツールの全てでサポートされていません。
  +
* LUKS ヘッダーのバックアップ(任意ですが、推奨)
  +
  +
==== チャレンジレスポンス認証 ====
  +
  +
完全な手順については {{Pkg|yubikey-full-disk-encryption}} の [https://github.com/agherzan/yubikey-full-disk-encryption#usage 公式ドキュメント] を見てください。大まかには:
  +
  +
# {{Pkg|yubikey-full-disk-encryption}} をインストール。
  +
# {{ic|/etc/ykfde.conf}} を設定。
  +
# 対象のディスクを登録: {{ic|# ykfde-enroll -d /dev/''DISK'' -s ''LUKS_SLOT''}}
  +
# {{ic|ykfde}} [[mkinitcpio#HOOKS|mkinitcpio フック]] を {{ic|encrypt}} フックの前に追加。
  +
# [[Initramfs の再生成]]
  +
  +
:{{Note|Plymouth ユーザーは、{{ic|plymouth-encrypt}} フックを {{ic|ykfde}} フックに置き換えてください。}}
  +
  +
いくつかの利用可能なバリエーションがあります:
  +
  +
* 2FA: デフォルトの挙動。対象デバイスの登録時、および起動時にパスワードとしてチャレンジを与えなければなりません。
  +
* 1FA: {{ic|ykfde.conf}} に {{ic|YKFDE_CHALLENGE}} を設定してください。これは平文で保存されることに注意してください。このファイルに対する非ルートユーザの読み込みアクセスを禁止することを検討してください。
  +
* [https://github.com/agherzan/yubikey-full-disk-encryption#enable-nfc-support-in-ykfde-initramfs-hook-experimental NFC サポート] (実験的)
  +
* [https://github.com/agherzan/yubikey-full-disk-encryption#enable-ykfde-suspend-service-experimental サスペンドと復帰のサポート] (実験的) サスペンド時に、暗号化されたボリュームが自動的にロックされます。復帰時に自動でアンロックします。
  +
  +
設定の変更を行った時は、変更を反映させるために initramfs の再生成を行わなければなりません。
  +
  +
==== systemd ベースの initramfs ====
  +
  +
{{ic|sd-encrypt}} フックのユーザは {{AUR|mkinitcpio-ykfde}} か {{AUR|mkinitcpio-ykfde-git}} をインストールし、[https://github.com/eworm-de/mkinitcpio-ykfde/blob/master/README-mkinitcpio.md プロジェクトのドキュメント]にある手順に従ってください。手順は、大まかに言えば {{Pkg|yubikey-full-disk-encryption}} に似ています。
  +
  +
==== GnuPG 暗号化キーファイル ====
  +
  +
これを行うためのツールの一つは [https://github.com/fuhry/initramfs-scencrypt initramfs-scencrypt] です。完全な手順についてはドキュメントを見てください。2022年10月以降、このパッケージは、GitHub で PKGBUILD が提供されていますが、AUR に存在せず、徹底的にテストもされていないことに注意してください。
  +
  +
  +
[[dm-crypt/特記事項#GPG や OpenSSL で暗号化されたキーファイルを使う|Dm-crypt のページ]]ではいくつかの代替策が提示されています。しかし、それらの殆どがフォーラムの古い投稿へのリンクです。
  +
  +
==== FIDO2 プロトコルの HMAC secret extension ====
  +
  +
YubiKey を完全ディスク暗号化に使うもう一つの方法は、[https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#sctn-hmac-secret-extension HMAC Secret Extension] を使用して、YubiKey から LUKS のパスワードを取得することです。これはパスフレーズによって保護することができます。この機能には、少なくとも[https://support.yubico.com/hc/en-us/articles/360016649319-YubiKey-5-2-3-Enhancements-to-FIDO-2-Support ファームウェア 5.2.3+ のYubiKey 5] が必要です。
  +
パスフレーズによる保護の方法では、{{AUR|khefin}} をインストールし、[https://github.com/mjec/khefin/wiki/Arch-Linux-LUKS-configuration プロジェクトのドキュメント]にある手順に従ってください。
  +
systemd 248 以降での(任意で PIN による保護が施された)1要素による方法では、FIDO2 キーを LUKS2 キースロットとして使用できます。手順は[https://0pointer.net/blog/unlocking-luks2-volumes-with-tpm2-fido2-pkcs11-security-hardware-on-systemd-248.html 作者のブログ投稿]で見られます。
  +
  +
=== KeePass ===
  +
  +
[[KeePass]] は YubiKey をサポートするように設定できます。手順は [[KeePass#Yubikey|YubiKey セクション]] を見てください。
  +
  +
=== SSH 鍵 ===
  +
  +
==== CCID ====
  +
  +
あなたの YubiKey が CCID スマートカードをサポートしているのであれば、GPG 鍵や PIV 鍵のどちらかをベースとしてハードウェアによる [[SSH 鍵]] として使用することができます。Yubico は品質の良いドキュメントを提供しています:
  +
* [https://developers.yubico.com/PIV/Guides/Securing_SSH_with_OpenPGP_or_PIV.html PGP と PIV の両方の可能性から見た概要]、それらの利点と欠点を挙げています。
  +
* [https://developers.yubico.com/PGP/SSH_authentication/index.html PGP 認証]のための手順
  +
* [https://developers.yubico.com/PIV/Guides/SSH_user_certificates.html ユーザ証明書による PIV 認証]のための手順
  +
* [https://developers.yubico.com/PIV/Guides/SSH_with_PIV_and_PKCS11.html #PKCS11 による PIV 認証]のための手順
  +
  +
:{{Note|YubiKey 上の PIV アプリケーションデフォルトの PIN コードは {{ic|123456}} です。デフォルトの管理キーと一緒に PIN コードも変更しておくべきでしょう。詳細は [https://developers.yubico.com/PIV/Guides/Device_setup.html デバイスセットアップの手順] を見てください。}}
  +
  +
==== U2F ====
  +
  +
YubiKey の U2F の機能を使用してハードウェアによる SSH 鍵を作成することもできます。手順は [[SSH 鍵#FIDO/U2F]] を見てください。
  +
  +
==== PIV ====
  +
  +
{{AUR|yubikey-agent}} は SSH 鍵 を PIV トークンとして保存します。セットアップガイドは https://github.com/FiloSottile/yubikey-agent#readme を見てください。
  +
  +
=== PAM を用いた Linux ユーザ認証 ===
  +
  +
ユーザ認証のために [[PAM]] を使用するすべてのものは、ユーザ認証のプロセスの一つの要素として YubiKey を使用するように設定できます。これには sudo、su、ssh、スクリーンロッカー、ディスプレイマネージャー、そして Linux システムがユーザを認証する必要のあるほぼすべての場面を含みます。その柔軟な設定により、システム全体や特定のアプリケーション、あるいはアプリケーションのグループに対して、あなたのニーズに合う認証要件を自由に設定することができます。例えば、ローカルセッションではパスワードの代わりとして YubiKey を受け入れ、リモートのセッションでは両方を要求することができます。これがどのように機能し、どのように設定するのかを理解するために、Arch Wiki の記事に加えて、{{man|8|pam}} や {{man|5|pam.conf}} を読むことをおすすめします。
  +
  +
YubiKey がサポートするプロトコルを PAM に統合するのに利用できるモジュールが複数あります:
  +
  +
* {{Pkg|pam-u2f}} - FIDO2 規格による [[#U2F]] をサポート。どの手法を使うべきかわからない場合、これが良い選択です。
  +
** [[Universal 2nd Factor#Arch Linux の認証|Arch Wiki の記事]]
  +
** [https://developers.yubico.com/pam-u2f/ Yubico の公式ドキュメント]、サポートされるモジュールパラメータのリストがあります。
  +
** Man ページ: {{man|8|pam_u2f}}、{{man|1|pamu2fcfg}}
  +
* {{Pkg|oath-toolkit}} - [[#OATH]] ワンタイムパスワードをサポート(HOTP か TOTP)。
  +
** [[pam_oath]]
  +
* {{Pkg|yubico-pam}} - [[#Yubico OTP]] と チャレンジレスポンス認証 OTP をサポート。Yubico OTP モードでは認証サーバーへのネットワーク接続が必要であることに注意してください。チャレンジレスポンス認証では必要ありません。
  +
** [https://developers.yubico.com/yubico-pam/ Yubico の公式ドキュメント]
  +
** {{man|8|pam_yubico}} - チャレンジレスポンス認証モードを設定するのに使用される {{ic|mode}} パラメータに注意してください。
  +
  +
{{Warning|PAM の設定ファイルを変更する際には厳重な注意が必要です。間違うと、システムが完全に安全ではなくなったり、安全すぎて認証できなくなる可能性があります。}}
  +
  +
PAM の設定はこの記事の範囲を超えますが、簡単な概要としては:
  +
  +
* 認証されたキーを含むファイルをホームディレクトリ内か一元的に作成する。
  +
* 適切な PAM 設定ファイルの適切な場所に、以下のフォーマットに従う行を追加する:
  +
auth [required|sufficient] [module_name].so [module arguments]
  +
* 多要素認証には {{ic|auth required}}、単一要素認証には {{ic|auth sufficient}}。
  +
* {{ic|module_name}} - 例: {{ic|pam_u2f.so}}。インストールされているモジュールのリストを見てください: {{ic|ls /usr/lib/security }}
  +
* モジュールの設定引数は、キーファイルの場所や、認証するためにどの手法をモジュールが使用すべきかなどです。
  +
  +
==== SSH における注意事項 ====
  +
  +
* Yubico は[https://developers.yubico.com/yubico-pam/Yubikey_and_SSH_via_PAM.html 追加のガイダンス]を公開しています。これは Ubuntu の古いバージョン向けですが、アップデートされている Arch システムにも適用できます。
  +
* 遠隔地にあるサーバを YubiKey を使用するように設定する場合、追加で少なくとも一つの緊急用 SSH セッションを開いておくべきです。こうすれば、設定ミスにより締め出されないで済みます。
  +
* {{ic|/etc/ssh/sshd_config}} に以下の設定が含まれていることを確認してください。{{Pkg|openssh}} に同梱されている {{ic|sshd_config}} はデフォルトでこれらが正しく設定されています。
  +
ChallengeResponseAuthentication no
  +
UsePAM yes
  +
  +
=== ブラウザ/web 統合 ===
  +
  +
多くのウェブサービスが FIDO ハードウェアトークンをサポートし始めています。詳細は [[U2F]] や [[WebAuthn]] のページを見てください。しかし、通常、するべきことといえば {{Pkg|libfido2}} をインストールして [https://demo.yubico.com/webauthn-technical/registration 試してみる]ことくらいです。
  +
  +
== ヒントとテクニック ==
  +
  +
=== YubiKey デバイスの挿入/除去時にアクションを実行する ===
  +
  +
例えば、USB スロットから YubiKey を抜いた時にアクションを実行したいとしましょう。{{ic|/etc/udev/rules.d/80-yubikey-actions.rules}} を作成し、以下の内容を追加してください:
  +
  +
ACTION=="remove", ENV{ID_VENDOR}=="Yubico", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410", RUN+="''/usr/local/bin/script args''"
  +
  +
注意すべきなのは、ほとんどのキーはこの例でカバーされていますが、すべてのバージョンの YubiKey で動作するとは限らないということです。lsusb の出力を見て、ベンダーとモデル ID をデバイスの説明と共に得るか、udevadm を使って情報を得る必要があります。もちろん、YubiKey の挿入時にスクリプトを実行したい場合は、アクションを "remove" ではなく "add" にしてください。
  +
  +
=== 挿入時に Yubico Authenticator を開始する ===
  +
  +
Authenticator は長時間実行される GUI プロセスです。Udev ルール内で直接実行すると、プロセスが udev の処理をブロックしてしまいます。フォークすると、イベント処理の終了後に udev は無条件で (フォークによって生成された) プロセスをキルしてしまいます。なので、authenticator を udev ルールから開始することはできません。しかし、systemd.device を使うことができます。
  +
  +
上記と同じように、{{ic|/etc/udev/rules.d/80-yubikey-actions.rules}} を作成して、以下の内容を書き込んでください:
  +
  +
ENV{ID_VENDOR}=="Yubico", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410", SYMLINK+="yubikey", TAG+="systemd"
  +
  +
そして、新しい systemd [[ユーザーユニット]]を[[作成]]してください:
  +
  +
{{hc|~/.config/systemd/user/yubioath-desktop.service|2=
  +
[Unit]
  +
Description=Autostart Yubico Authenticator
  +
# Uncomment if you want to stop the authenticator when unplugged.
  +
#StopPropagatedFrom=dev-yubikey.device
  +
  +
[Install]
  +
WantedBy=dev-yubikey.device
  +
  +
[Service]
  +
Type=oneshot
  +
ExecStart=/usr/bin/yubioath-desktop
  +
}}
  +
  +
そして、このユニットを[[有効化]]してください。''systemctl'' が、このユニットが存在しない {{ic|dev-yubikey.device}} ユニットの依存関係として追加されたことを警告してきますが、問題ありません。このユニットは、YubiKey が挿入されると開始されます。
  +
  +
== メンテナンス/アップグレード ==
  +
  +
=== YubiKey NEO 用に OATH アプレットをインストールする ===
  +
  +
以下のステップで、YubiKey NEO に OATH アプレットをインストールできます。Google Play Store の Yubico Authenticator を使えるようになります。
  +
  +
{{Note|1=以下のステップは、ファームウェアバージョン <= 3.1.2 の NEO でのみ必要です。現在の世代の NEO (U2F 搭載) は OpenPGP アプレットがすでにインストールされています。}}
  +
  +
==== NEO を CCID デバイスとして設定する ====
  +
  +
# {{Pkg|yubikey-personalization-gui}} ({{AUR|yubikey-personalization-gui-git}}) を[[インストール]]。
 
# udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。
 
# udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。
# {{ic | ykpersonalize -m82}} を実行し{{ic | y}} 入力してエンターを押します。
+
# {{ic|ykpersonalize -m82}} を実行し{{ic|y}} 入力エンターを押す。
  +
  +
==== アプレットをインストールする ====
   
  +
# {{AUR|gpshell}}、{{AUR|gppcscconnectionplugin}}、{{AUR|globalplatform}}、{{Pkg|pcsclite}} を[[インストール]]。
=== アプレットのインストール ===
 
  +
# {{ic|pcscd.service}} を[[起動]]。
* {{AUR|gpshell}}, {{AUR|gppcscconnectionplugin}}, {{AUR|globalplatform}}, {{Pkg|pcsclite}} をインストールしてください。
 
  +
# 最も最近の CAP ファイルを [https://developers.yubico.com/ykneo-oath/Releases/ ykneo-oath] サイトからダウンロード。
* {{ic|# systemctl start pcscd}} で {{ic|pcscd.service}} を起動します。
 
* [http://opensource.yubico.com/ykneo-oath/releases.html ykneo-oath] サイトから最新の CAP ファイルをダウンロード。
+
# {{ic|gpinstall.txt}} を [https://github.com/Yubico/ykneo-oath/blob/master/gpinstall.txt GitHub] からダウンロード。
  +
# gpinstall.txt を編集して {{ic|install -file}} から始まる行を CAP ファイルが置かれているパスに修正。
* [https://github.com/Yubico/ykneo-oath/blob/master/gpinstall.txt GitHub] から {{ic|gpinstall.txt}} をダウンロード。
 
  +
# ターミナルを開き、{{ic|gpshell ''path/to/gpinstall.txt''}} を実行。
* gpinstall.txt を編集して {{ic|install -file}} から始まる行を CAP ファイルが置かれているパスに修正。
 
  +
# 理想的には、大量のテキストが流れて、最後に以下のようなものが書かれていることです:
* ターミナルを開いて {{ic|gpshell <location of gpinstall.txt>}} を実行。
 
  +
{{bc|<nowiki>Command --> 80E88013D7C000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A
* 上手く行けば、テキストが流れて、最後に以下のように表示されます:
 
{{bc|Command --> 80E88013D7C000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A
 
 
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C
 
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C
 
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44
 
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44
126行目: 549行目:
 
Response <-- 009000
 
Response <-- 009000
 
card_disconnect
 
card_disconnect
release_context}}
+
release_context</nowiki>}}
* NEO を抜いて Yubico Authenticator アプリして下さい
+
# NEO を抜き、Yubico Authenticator アプリ
   
===(任意) Yubico Authenticator デスクトップクライアントインストール ===
+
==== (任意)Yubico Authenticator デスクトップクライアントインストールする ====
   
Yubico Authenticator のデスクトップ版は {{AUR|yubico-yubioath-desktop-git}} インストールできます。
+
{{Pkg|yubioath-desktop}} インストールすることで、Yubico Authenticator のデスクトップバージョンを取得できます。
   
  +
{{ic|pcscd.service}} が実行中の間に、{{ic|yubioath-desktop}} を実行して、プロンプトが表示されたら YubiKey を挿入してください。
== Plug-up International の FIDO U2F セキュリティキー ==
 
# cat > /etc/udev/rules.d/10-security-key.rules
 
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0"
 
   
  +
== トラブルシューティング ==
# udevadm trigger
 
   
  +
Yubikey が最後に機能したときからアップデートを実行した場合特に、再起動を行ってください。一部の機能が問題なく動いているようでも再起動してください。
== ブラウザで U2F を有効化 ==
 
   
  +
=== YubiKey が HID デバイスとして機能しない ===
=== Chromium/Chrome ===
 
   
  +
{{Note|1=[https://github.com/systemd/systemd/commit/d45ee2f31a8358db0accde2e7c81777cedadc3c2 バージョン 244以降の systemd は]この機能に対するネイティブサポートを追加したので、以下のステップはもはや必要ありません。}}
Chromium で U2F を機能させるには {{Pkg|libu2f-host}} ライブラリのインストールが必要です。Yubikey をユーザーからアクセスするのに必要な [https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules udev ルール] がインストールされます。デフォルトでは root からしか Yubikey にアクセスできないため、Chromium はエラーを吐きます。
 
   
  +
[https://michaelheap.com/yubikey-on-arch/ この記事]で説明されているように、udev ルールを追加してください:
=== Firefox ===
 
   
  +
{{hc|/etc/udev/rules.d/10-security-key.rules|2=
Firefox で U2F のサポートを有効にするには、[https://github.com/prefiks/u2f4moz こちらのアドオン] をインストールしてください。ネイティブなサポートは現在 [https://bugzilla.mozilla.org/show_bug.cgi?id=1065729 開発中] です。
 
  +
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0"
  +
}}
   
  +
その後、{{ic|udevadm trigger}} を実行してください。
== OpenPGP スマートカードモードを有効化 ==
 
以下の手順を実行することで YubiKey の OpenPGP 機能を使うことができるようになります:
 
   
  +
=== ykman が YubiKey に接続できない ===
# 上に書かれているように YubiKey を CCID デバイスとして設定。
 
# {{Pkg|pcsc-tools}}, {{Pkg|ccid}}, {{Pkg|libusb-compat}} をインストール。
 
# {{ic|# systemctl enable pcscd.service}} と {{ic|# systemctl start pcscd.service}} で {{ic|pcscd}} を起動・有効化。
 
# {{ic|pcsc_scan}} を実行すると接続されているデバイスの情報が表示され YubiKey が使えるかどうか確認できます。さらに {{ic|gpg --card-status}} で GPG からカードを利用できることを確認できます。
 
   
  +
マネージャが YubiKey への接続に失敗する場合、{{ic|pcscd.service}} か {{ic|pcscd.socket}} が起動していることを確認してください。
== トラブルシューティング ==
 
  +
  +
=== Error: Failed connecting to YubiKey 5 [OTP+FIDO+CCID]. Make sure the application have the required permissions. ===
  +
  +
これは、{{ic|scdaemon}} がすでにデバイスの排他的な制御を取得している場合に {{ic|ykman}} がデバイスの oath 認証情報にアクセスした際に発生する可能性があります。[https://github.com/Yubico/yubikey-manager/issues/35]
  +
  +
これを修正するには、{{ic|~/.gnupg/scdaemon.conf}} 内であなたのデバイスに対して {{ic|reader-port}} オプションを正しい値で設定することができます。[https://support.yubico.com/hc/en-us/articles/360013714479-Troubleshooting-Issues-with-GPG]
  +
  +
{{Note|これにより、ykman を通して YubiKey にアクセスするたびに gpgagent が YubiKey をアンロックするプロンプトを表示するようになります。}}
  +
  +
YubiKey NEO と YubiKey 4 の場合:
  +
  +
reader-port Yubico Yubikey
  +
  +
YubiKey 5 の場合:
  +
  +
reader-port Yubico Yubi
  +
  +
=== YubiKey がゲスト VM 内でバインドできない ===
  +
  +
YubiKey がゲストで利用可能であると仮定すると、この問題はドライバがホストのデバイスにバインドしている結果です。デバイスのバインドを解除するには、ホストの [[dmesg]] からバスとポートの情報を手に入れる必要があります:
  +
  +
# dmesg | grep -B1 Yubico | tail -n 2 | head -n 1 | sed -E 's/^\<nowiki>[[^]]</nowiki>+\] usb (<nowiki>[^:]</nowiki>*):.*/\1/'
  +
  +
出力の USB id は {{ic|X-Y.Z}} または {{ic|X-Y}} の形式であるはずです。そして、ホスト上で、{{ic|find}} を使って {{ic|/sys/bus/usb/drivers}} を検索し、YubiKey がバインドしているドライバを探します (例: {{ic|usbhid}} または {{ic|usbfs}})。
  +
  +
$ find /sys/bus/usb/drivers -name "*X-Y.Z*"
  +
  +
デバイスのバインドを解除するには、先のコマンドの出力を使ってください (つまり、{{ic|/sys/bus/usb/drivers/''DRIVER''/X-Y.Z:1.0}}):
  +
  +
# echo 'X-Y.Z:1.0' > /sys/bus/usb/drivers/''DRIVER''/unbind
  +
  +
=== Error: [key] could not be locally signed or gpg: No default secret key: No public key ===
  +
  +
これは、YubiKey が挿入された状態で非標準的なキーリングでキーの署名をしようとした際に起こります(例えば、[[pacman-key|Pacman]] が {{ic|pacman-key --populate}} で行うように)。解決策は、問題を起こしている YubiKey を取り外してやり直すことです。
  +
  +
=== YubiKey が Yubico Authenticator で消えたり現れたりする ===
  +
  +
これは、CCID ドライバがインストールされていない際に起こります。{{Pkg|ccid}} パッケージを[[インストール]]する必要があります。
  +
  +
=== YubiKey core error: timeout ===
  +
  +
おそらく間違ったスロットを使用しています。もう一方のスロットで試してみてください。
   
  +
{{TranslationStatus|YubiKey|2024-08-26|814790}}
Yubikey を最後に使ったときからアップデートを実行している場合、再起動を行ってください。問題なく動いているようでも再起動してください。
 

2024年9月5日 (木) 21:05時点における最新版

関連記事

YubiKey は小さな USB セキュリティトークンです。モデルにも依りますが、以下のようなことができます:

多くの機能を提供する一方、YubiKey の新しいバージョンはオープンソースとしてリリースされていません。代替としては SoloTKeyNitrokey があります。

目次

インストール

管理ツール

  • YubiKey Manager — USB を通して YubiKey の設定とクエリをするための Python ライブラリとコマンドラインツール(ykman)。オプションの GUI あり。
https://developers.yubico.com/yubikey-manager/ || yubikey-manager, yubikey-manager-qt
ノート: インストール後、pcscd.service有効化してください。
  • YubiKey Personalization — OTP USB 接続を通して YubiKey の設定とクエリをするためのライブラリとツール。ykman よりも強力ですが、使うのが難しいです。オプションの GUI あり。
https://developers.yubico.com/yubikey-personalization/ || yubikey-personalization, yubikey-personalization-gui

認証ツール

  • Yubico PAM — Yubico OTP または チャレンジレスポンス認証による PAM ユーザ認証。
https://developers.yubico.com/yubico-pam/ || yubico-pam
  • Yubico PAM-U2FU2F により PAM ユーザ認証。
https://developers.yubico.com/pam-u2f/ || pam-u2f
  • Yubico Authenticator for Desktop — USB を通して YbiKey から OATH コードを読み込む GUI。古いスロットベースの実装 (YubiKey Standard と Edge) と新しい OATH 実装をサポート (YubiKey NEO と 4)。注: archlinux/packaging/packages/yubioath-desktop
https://developers.yubico.com/OATH/YubiKey_OATH_software.html || yubioath-desktop
  • Yubico Authenticator 6.0+ for Desktop — Yubico Authenticator 6.0+ (バージョン 6.0 及びそれ以降) は、YubiKey の第二要素クレデンシャルを管理するためのアプリケーションです。バージョン 6.0 から、コードベースが Flutter フレームワークを使って完全に書き換えられました。
https://developers.yubico.com/yubioath-flutter/ || yubico-authenticator-binAUR
  • libfido2 — クライアントサイドの U2F サポート。ウェブブラウザで U2F プロトコルを YubiKey による認証のために利用できるようになります。
https://developers.yubico.com/libfido2/ || libfido2
  • YubiKey Full Disk Encryption — チャレンジレスポンスモードを使用し、強力な LUKS パスフレーズを生成します。完全なディスク暗号化をサポート。
https://github.com/agherzan/yubikey-full-disk-encryption || yubikey-full-disk-encryption

入力

YubiKey は、USB を通して API を呼び出したりボタンを押したりする形で入力を受け付けます。

ボタンはとても敏感です。状況にも依りますが、ボタンを押すと以下のどれか1つを行います:

  • 静的パスワードやワンタイムパスワード(OTP)をトリガーする(短く押すとスロット1、長く押すとスロット2)。これはデフォルトの挙動で、うっかりトリガーしてしまうことは簡単です。
  • 機能やアクセスを確定/許可する。LED が点灯し、ユーザに入力を促します。
  • スマートカードを挿入/除去する。

出力

YubiKey は以下の入力を出力に変換します:

  • キーストローク(USB キーボードをエミュレートします)、静的パスワードや OTP をタイプするために使用します。(静的パスワードはキーロガーに対して脆弱であることに注意してください。)
  • 組み込みの LED は:
    • 挿入した際に一度光ります。トラブルシューティングに便利です。
    • API の応答を許可するためにボタンを押すことを要求された際に安定して光ります。
  • USB を通した API 応答。これは以下のように使用されます:
    • チャレンジレスポンス認証(Yubico OTP モードか HMAC-SHA1 モードを使って計算されます)
    • U2F チャレンジレスポンス認証
    • CCID スマートカード関連のリクエスト

USB 接続モード

YubiKey のモデルによりますが、デバイスは3つまでの異なる USB インターフェイスを提供します。これらのインターフェイスのうち2つは USB HID (Human Interface Device) デバイスクラスを実装しています; 3つ目はスマートカードインターフェイス(CCID)です。3つすべて独立して有効化/無効化できます。これにより、それらに関連したプロトコルの制御ができます。

以下の表はどのプロトコルがどのインターフェイスを使用するかを示しています:

プロトコル インターフェイス
OTP Keyboard HID
FIDO Other HID
PIV CCID
OpenPGP CCID
OATH CCID

ykman は "modes" という用語を使用します、OTP、FIDO、CCID と名付けられています。

ノート: ykman はリリース 0.6.1 (2018-04-16)で "U2F" を "FIDO" と名前を変更しました。https://developers.yubico.com/yubikey-manager/Release_Notes.html

有効になっているモードを取得

バージョン 5 以前の YubiKey では:

$ ykman config mode
Current connection mode is: OTP+FIDO+CCID
ノート: ykman mode というコマンドは非推奨となっており、今後削除されるでしょう。

YubiKey バージョン 5 では:

$ ykman info
Device type: YubiKey 5 NFC
Serial number: XXXXXXXXX
Firmware version: 5.4.3
Form factor: Keychain (USB-A)
Enabled USB interfaces: OTP, FIDO, CCID
NFC transport is enabled.

Applications    USB     NFC
FIDO2           Enabled Enabled
OTP             Enabled Enabled
FIDO U2F        Enabled Enabled
OATH            Enabled Enabled
YubiHSM Auth    Enabled Enabled
OpenPGP         Enabled Enabled
PIV             Enabled Enabled

モードをセット

すべてのモードが出荷時から有効化されています。変更するには:

$ ykman mode [OPTIONS] MODE
  • MODE には文字列を使用できます。例えば、OTP+FIDO+CCID。短い形式もあります: o+f+c
  • MODE にはモード番号を使用できます。複数の有効化するモードをエンコードしたものです。

以下にモード番号の表があります:

0 OTP device only.
1 CCID device only.
2 OTP/CCID composite device.
3 U2F device only.
4 OTP/U2F composite device.
5 U2F/CCID composite device.
6 OTP/U2F/CCID composite device.
81 CCID device only, with touch-eject.
ノート: 一部の例では 86 という番号を使用しています。これは無効な番号です。80 は無視され、6 のように振る舞います。

オプション:

  • --touch-eject - ボタンを押すとスマートカードを挿入/除去します。これは CCID のみのモードでのみ動作します; FIDO と OTP は無効化されていなければなりません。
  • --autoeject-timeout SECONDS - 一定時間立つとスマートカードを自動的に除去します。--touch-eject と同じような制限があります。
  • --chalresp-timeout SECONDS - チャレンジレスポンス認証のタイムアウトを設定します。

さらなる情報は、ykman mode --help を見てください。

ワンタイムパスワード

どういうわけか、この機能には誤解を招く名前が付けられています。この機能には静的パスワードとチャレンジレスポンス認証の機能も含まれているのです。

2つのスロットがこの機能のために提供されています。それぞれのスロットには、短くボタンを押したり、長くボタンを押すことでアクセスできます。それぞれのスロットは以下のうち1つを設定できます:

  • Yubico OTP
  • OATH-HOTP
  • OATH-TOTP
  • チャレンジレスポンス認証
  • 静的パスワード

それぞれの機能には、作成時に提供できる複数の設定オプションがあります。しかし、一度設定すると読み返すことができません。ykman otp swap により、スロット1とスロット2を入れ替えることはできます。

工場出荷時の設定

新しい YubiKey では、Yubico OTP がスロット1に事前に設定されています。この初期の AES 共通鍵はその YubiKey と Yubico の認証サーバーに保存されています。これにより、YubiCloud に対して認証でき、Yubico Forum ウェブサイトや https://demo.yubico.com と組み合わせて Yubico OTP を使用できます。

警告: スロット1にある工場出荷時のキーを上書きしてしまうと、同じ信頼レベルの新しいキーを作成することはできなくなります。工場で生成された Yubico OTP 認証情報は CC という接頭辞で始まります。一方、ユーザが生成した認証情報は VV で始まります。セキュリティおよび機能的には基本的な違いはありませんが、一部のサービスは CC の認証情報のみを信頼します。さらなる情報はこのフォーラムスレッドで見られます。

Yubico OTP

Yubico OTP共通鍵暗号に基づいています。より具体的には、それぞれの YubiKey にはそのデバイスにユニークな128ビットの AES 鍵が含まれており、この鍵は検証サーバーにも保存されています。パスワードを尋ねられた際には、YubiKey は鍵の ID、カウンタ、乱数などの異なるフィールドを連結し、その結果を暗号化することでトークンを作成します。

この OTP は対象のシステムに送られ、検証サーバーに渡されます。検証サーバー(同じく秘密鍵を所有しています)はそれを復号し、内部の情報を検証します。その結果は対象のシステムに返されます。そして、システムはアクセスを許可するかどうかを判断することができます。

YubiCloud と検証サーバー

Yubico は、YubiCloud と呼ばれる、無料かつ制限無しでアクセスできる検証サーバーを提供しています。YubiCloud はすべての YubiKey の工場出荷時の設定を把握しており、これは (例えば) yubico-pam によって使用される「デフォルト」の検証サービスです。Yubico はまた、サーバーのオープンソースの実装も提供しています。

ノート: Yubico の検証サーバーを認証する場合:
  • HMAC を使用: https://upgrade.yubico.com/getapikey/ から HMAC 鍵と ID を取得してください。
  • HTTPS を使用: 検証サーバーの証明書は GoDaddy によって署名されています。Arch ではデフォルトで GoDaddy を信頼しています (ca-certificates をインストールしていれば)。

設定と使用

スロットに新しいキーを生成してください。そして、それを YubiCloud にアップロードしてください(ブラウザで開きます):

$ ykman otp yubiotp --generate-key --upload 2

さらなる情報は、ykman otp yubiotp --help で見てください。

セキュリティリスク

AES 鍵の漏洩

ご想像の通り、AES 鍵は絶対に秘密にする必要があります。Yubikey から AES 鍵を抜き取ることはできません (少なくともソフトウェアを使って抜き取るのは不可能に近い)。AES 鍵は検証サーバーにも存在するため、このサーバーのセキュリティというのがとても重要になります。

検証リクエスト/レスポンスの盗聴

システムは検証サーバーの決定に従っているため、検証サーバーになりすます攻撃が考えられます。これを防ぐには、対象のシステムが、HMAC か HTTPS を使用して、検証サーバーを認証する必要があります。

チャレンジレスポンス認証

チャレンジは YubiKey に送られ、YubeKey はとある秘密に基づいてレスポンスを計算します。同じチャレンジに対しては常に同じレスポンスが返されます。その秘密無しでは、この計算は現実的ではありません。たとえ、大量のチャレンジレスポンス認証を行ったとしてもです。

これは以下のように利用できます:

  • 真の二要素認証: ユーザーはチャレンジを与えられ、パスワードに加えて正しいレスポンスを返さなければなりません。両方が秘密鍵を持っていなければなりません。
  • 「準」二要素認証: チャレンジはパスワードのように振る舞い、サーバーは正しいレスポンスを保持しています。これは OTP ではなく、レスポンス鍵を手に入れれば誰でもアクセス許可を得ることができます。しかし、サーバーが秘密鍵を必要としないので、よりシンプルです。

2つのチャレンジレスポンス認証アルゴリズムがあります:

  • HMAC-SHA1
  • Yubico OTP

これは、yubikey-personalization-gui を使って GUI で、あるいは以下の指示で設定できます。

HMAC-SHA1 アルゴリズム

生成された鍵を使ってスロット2をチャレンジレスポンス認証モードで設定してください:

$ ykman otp chalresp --generate 2

キーを与えるための --generate フラグは省略できます (ykman otp chalresp --help を参照)。キーを与える主な利点は、バックアップ用の2つ目のデバイスをセットアップする際に使用できることです。例えば、openssl rand -hex 20 は適切な鍵を生成します。

Yubico OTP アルゴリズム

ykman は chal-yubico アルゴリズムの設定にはサポートしていないようです。しかし、ykpersonalize を使用できます。スロット2にランダムな鍵を生成してください:

$ ykpersonalize -2 -ochal-resp -ochal-yubico

さらなる情報は ykpersonalize(1) を見てください。

チャレンジを送信

チャレンジを送信してレスポンスを受信するには、ykchalresp -slot challenge コマンドを使用できます。例えば:

$ ykchalresp -2 archie
12a19763be77d75af46fb76f0b737c117fa47205

このコマンドは、プログラム済みのスロット2のユニークな 40 バイトの SHA1 ハッシュ値を返します。チャレンジが異なると、異なるユニークなレスポンスが返されます。

静的パスワード

静的パスワードも生成できます:

$ ykman otp static --generate slot

あるいは、パスワードを与えることも:

$ ykman otp static slot password

複数のオプションがあります; 生成されるパスワードの長さと文字セットや、Enter キーストロークを送るかどうかを設定できます。詳細は ykman otp static --help で見てください。

ヒント: ほとんどの YubiKey では、性的パスワードを保存するためのスロットの数 (2個) は限られています。チャレンジレスポンス認証のスロットは、無制限のチャレンジに対して静的ハッシュ値のレスポンスを提供します。これらは数字と小文字アルファベットのみですが、レスポンスの長さによってかなりのエントロピーが生まれます。

エミュレートされた USB キーボードの限界、「なぜ私のパスワードは弱く見えるのか」

ほとんどのキーボードレイアウトで YubiKey が機能するようにするために、パスワードはデフォルトで ModHex アルファベット(cbdefghijklnrtuv)、数値 0-9! に制限されています。これらの文字は非常に多くのキーボードレイアウトで同じスキャンコードを使用し、ほとんどのコンピュータで互換性が保証されます。

Yubico はこの問題に関する白書を提供しています。

OATH

YubiKey は2つの OATH 実装を提供します:

OATH API
新しい手法であり、モデルによっては約30個の認証情報を格納できます。(YubiKey 4、NEO、それ以降)
OTP slot
古い手法であり、両方の OTP スロットが1つの認証情報を格納できます。(チャレンジレスポンス認証をサポートするすべてのモデル)

OATH API

GUI がお好みならば、yubioath-desktop を使用できます。

ykman は、ykman oath uri を使って URI 形式のコードを追加できます。以下は、QR コードのイメージから認証情報を追加するワンライナーです:

$ zbarimg qr_code.png --quiet --raw | xargs ykman oath uri

手動で行うこともできます。TOTP 鍵をプログラムし、コードを生成するためにボタンへのタッチを要求します:

$ ykman oath add --touch name secret

HOTP 鍵をプログラムします:

$ ykman oath add --oath-type HOTP name secret

認証情報を一覧表示します:

$ ykman oath list

コードを生成します:

$ ykman oath code query

利用可能なサブコマンドをすべて見るには、ykman oath --help を実行してください。それぞれのサブコマンドの情報を見るには、ykman oath subcommand --help を使ってください。

OTP スロット実装

スロット2で HOTP をプログラムします:

$ ykman otp hotp 2 key

TOTP をプログラムします:

$ ykman otp chalresp --totp slot key

HOTP を生成します:

$ ykman otp calculate slot

TOTP を生成します:

$ ykman otp calculate --totp slot

ykman otp --helphttps://developers.yubico.com/OATH/ も参照してください。

U2F

YubiKey を用いた Universal 2nd Factor (U2F) はとても単純です。鍵そのものに対する設定は必要ありません。このモードは一部のドキュメントやユーティリティでは 'FIDO' とも呼ばれていることに注意してください。ykman ユーティリティを通じていくつかの限定された管理オプションがあります:

  • PIN を設定: ykman fido access change-pin
  • 個別の資格情報を削除: ykman fido credentials delete QUERY
  • すべての資格情報と PIN をリセット: ykman fido reset

U2F を認証に使用するには、U2F の指示を見てください。

WebAuthn も参照。

CCID スマートカード

CCID (Chip Card Interface Device) は、スマートカードリーダーとして振る舞う USB デバイスによって使用されたり、YubiKey のように USB を通して直接接続するセキュリティトークンで使用されたりする USB 標準デバイスクラスです。HID (Human Interface Device) と CCID は両方とも USB デバイスクラスです。つまり、これらは USB 仕様の同じカテゴリに属すということです。HID は、キーボードなどのようなコンピュータ周辺機器のための仕様です。YubiKey は、OTP モードと FIDO モードで使用されたときは USB (HID) キーボードのように働きます。しかし、PIV アプリケーションを使用する時や OpenPGP デバイスとして使用する時は CCID プロトコルに切り替わります。

CCID モードは 2015 年11以降に出荷された YubiKey のすべてでデフォルトで有効になっているはずです[1]。少なくとも CCID モードは有効化してください。#有効になっているモードを取得 を見てください。

PIV

YubiKey NEO 以降から、YubiKey はチップ上に PIV (Personal Identity Verification) アプリケーションが含まれています。PIV は、RSA や ECC(楕円曲線暗号) を使用するトークンが個人電子証明書にどのように使用されるかを定めた米国政府規格(FIPS 201)です。YubiKey NEO は RSA 暗号のみをサポートしますが、その後のモデル(YubiKey 4 と 5)は RSA と ECC の両方をサポートします。PIV トークンの特徴は、秘密鍵を保護しオンチップで動作するように構築されているという点です。秘密鍵は、トークン上にインストールされた後は決してトークン外に出ることはありません。オプションで、オンチップの乱数生成器を使って秘密鍵をオンチップで生成することもできます。秘密鍵がオンチップで生成された場合、秘密鍵はチップの外部で処理されることはなく、トークンから秘密鍵を復元する方法もありません。PIV メカニズムを使用する際は、YubiKey は CCID デバイスとして機能します。

OpenPGP スマートカード

YubiKey は標準の GPG スマートカードとしてとして振る舞うことができます; セットアップと使用法に関する説明は GnuPG#スマートカード セクションを見てください。Yubico は https://developers.yubico.com/PGP/ でドキュメントも提供しています。

他の機能(U2F と OTP)を使用したくない場合、ボタンはキーを挿入/除去するように設定でき、自動除去のタイムアウトも設定できます。詳細は #USB 接続モード を見てください。

デフォルトのユーザ PIN は 123456 で、デフォルトの admin PIN は 12345678 です。デフォルトの PUK も 12345678 です。覚えておきましょう。

使用例

このセクションでは、様々な認証の目的での YubiKey の使用法について説明しています。しかし、以下は使用法について完全に網羅されたリストではありません。

LUKS による完全なディスク暗号化

複数の選択肢があります:

  • チャレンジレスポンス認証: とあるチャレンジに対するレスポンスが LUKS 鍵として使用されます。チャレンジは、真の二要素認証においてはパスワードとして機能し、一要素認証においてはチャレンジは平文で保存することができます。
  • GnuPG: YubiKey の PGP スマートカードの機能を使用します。長いパスフレーズ無しで強力な二要素認証を提供します。
  • FIDO HMAC Secret: あなたの YubiKey が U2F をサポートしているのであれば、共通鍵を返すように設定できます。
ノート: ディスクの暗号化の強度は、使用している鍵のうち最も弱いものの強さと同じです。上記のツールの内一つを設定したら、初期のパスフレーズを削除するか、より長いものに置き換えることを検討してください。

共通の前提条件

  • LUKS により暗号化された起動可能なシステム。少なくとも1つの空きキースロットがあり、encrypt mkinitcpio フックを使用していること。
    • mkinitcpio-ykfdeAUR を例外として、sd-encrypt はこれらのツールの全てでサポートされていません。
  • LUKS ヘッダーのバックアップ(任意ですが、推奨)

チャレンジレスポンス認証

完全な手順については yubikey-full-disk-encryption公式ドキュメント を見てください。大まかには:

  1. yubikey-full-disk-encryption をインストール。
  2. /etc/ykfde.conf を設定。
  3. 対象のディスクを登録: # ykfde-enroll -d /dev/DISK -s LUKS_SLOT
  4. ykfde mkinitcpio フックencrypt フックの前に追加。
  5. Initramfs の再生成
ノート: Plymouth ユーザーは、plymouth-encrypt フックを ykfde フックに置き換えてください。

いくつかの利用可能なバリエーションがあります:

  • 2FA: デフォルトの挙動。対象デバイスの登録時、および起動時にパスワードとしてチャレンジを与えなければなりません。
  • 1FA: ykfde.confYKFDE_CHALLENGE を設定してください。これは平文で保存されることに注意してください。このファイルに対する非ルートユーザの読み込みアクセスを禁止することを検討してください。
  • NFC サポート (実験的)
  • サスペンドと復帰のサポート (実験的) サスペンド時に、暗号化されたボリュームが自動的にロックされます。復帰時に自動でアンロックします。

設定の変更を行った時は、変更を反映させるために initramfs の再生成を行わなければなりません。

systemd ベースの initramfs

sd-encrypt フックのユーザは mkinitcpio-ykfdeAURmkinitcpio-ykfde-gitAUR をインストールし、プロジェクトのドキュメントにある手順に従ってください。手順は、大まかに言えば yubikey-full-disk-encryption に似ています。

GnuPG 暗号化キーファイル

これを行うためのツールの一つは initramfs-scencrypt です。完全な手順についてはドキュメントを見てください。2022年10月以降、このパッケージは、GitHub で PKGBUILD が提供されていますが、AUR に存在せず、徹底的にテストもされていないことに注意してください。


Dm-crypt のページではいくつかの代替策が提示されています。しかし、それらの殆どがフォーラムの古い投稿へのリンクです。

FIDO2 プロトコルの HMAC secret extension

YubiKey を完全ディスク暗号化に使うもう一つの方法は、HMAC Secret Extension を使用して、YubiKey から LUKS のパスワードを取得することです。これはパスフレーズによって保護することができます。この機能には、少なくともファームウェア 5.2.3+ のYubiKey 5 が必要です。 パスフレーズによる保護の方法では、khefinAUR をインストールし、プロジェクトのドキュメントにある手順に従ってください。 systemd 248 以降での(任意で PIN による保護が施された)1要素による方法では、FIDO2 キーを LUKS2 キースロットとして使用できます。手順は作者のブログ投稿で見られます。

KeePass

KeePass は YubiKey をサポートするように設定できます。手順は YubiKey セクション を見てください。

SSH 鍵

CCID

あなたの YubiKey が CCID スマートカードをサポートしているのであれば、GPG 鍵や PIV 鍵のどちらかをベースとしてハードウェアによる SSH 鍵 として使用することができます。Yubico は品質の良いドキュメントを提供しています:

ノート: YubiKey 上の PIV アプリケーションデフォルトの PIN コードは 123456 です。デフォルトの管理キーと一緒に PIN コードも変更しておくべきでしょう。詳細は デバイスセットアップの手順 を見てください。

U2F

YubiKey の U2F の機能を使用してハードウェアによる SSH 鍵を作成することもできます。手順は SSH 鍵#FIDO/U2F を見てください。

PIV

yubikey-agentAUR は SSH 鍵 を PIV トークンとして保存します。セットアップガイドは https://github.com/FiloSottile/yubikey-agent#readme を見てください。

PAM を用いた Linux ユーザ認証

ユーザ認証のために PAM を使用するすべてのものは、ユーザ認証のプロセスの一つの要素として YubiKey を使用するように設定できます。これには sudo、su、ssh、スクリーンロッカー、ディスプレイマネージャー、そして Linux システムがユーザを認証する必要のあるほぼすべての場面を含みます。その柔軟な設定により、システム全体や特定のアプリケーション、あるいはアプリケーションのグループに対して、あなたのニーズに合う認証要件を自由に設定することができます。例えば、ローカルセッションではパスワードの代わりとして YubiKey を受け入れ、リモートのセッションでは両方を要求することができます。これがどのように機能し、どのように設定するのかを理解するために、Arch Wiki の記事に加えて、pam(8)pam.conf(5) を読むことをおすすめします。

YubiKey がサポートするプロトコルを PAM に統合するのに利用できるモジュールが複数あります:

警告: PAM の設定ファイルを変更する際には厳重な注意が必要です。間違うと、システムが完全に安全ではなくなったり、安全すぎて認証できなくなる可能性があります。

PAM の設定はこの記事の範囲を超えますが、簡単な概要としては:

  • 認証されたキーを含むファイルをホームディレクトリ内か一元的に作成する。
  • 適切な PAM 設定ファイルの適切な場所に、以下のフォーマットに従う行を追加する:
   auth [required|sufficient] [module_name].so [module arguments]
  • 多要素認証には auth required、単一要素認証には auth sufficient
  • module_name - 例: pam_u2f.so。インストールされているモジュールのリストを見てください: ls /usr/lib/security
  • モジュールの設定引数は、キーファイルの場所や、認証するためにどの手法をモジュールが使用すべきかなどです。

SSH における注意事項

  • Yubico は追加のガイダンスを公開しています。これは Ubuntu の古いバージョン向けですが、アップデートされている Arch システムにも適用できます。
  • 遠隔地にあるサーバを YubiKey を使用するように設定する場合、追加で少なくとも一つの緊急用 SSH セッションを開いておくべきです。こうすれば、設定ミスにより締め出されないで済みます。
  • /etc/ssh/sshd_config に以下の設定が含まれていることを確認してください。openssh に同梱されている sshd_config はデフォルトでこれらが正しく設定されています。
   ChallengeResponseAuthentication no
   UsePAM yes

ブラウザ/web 統合

多くのウェブサービスが FIDO ハードウェアトークンをサポートし始めています。詳細は U2FWebAuthn のページを見てください。しかし、通常、するべきことといえば libfido2 をインストールして 試してみることくらいです。

ヒントとテクニック

YubiKey デバイスの挿入/除去時にアクションを実行する

例えば、USB スロットから YubiKey を抜いた時にアクションを実行したいとしましょう。/etc/udev/rules.d/80-yubikey-actions.rules を作成し、以下の内容を追加してください:

ACTION=="remove", ENV{ID_VENDOR}=="Yubico", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410", RUN+="/usr/local/bin/script args"

注意すべきなのは、ほとんどのキーはこの例でカバーされていますが、すべてのバージョンの YubiKey で動作するとは限らないということです。lsusb の出力を見て、ベンダーとモデル ID をデバイスの説明と共に得るか、udevadm を使って情報を得る必要があります。もちろん、YubiKey の挿入時にスクリプトを実行したい場合は、アクションを "remove" ではなく "add" にしてください。

挿入時に Yubico Authenticator を開始する

Authenticator は長時間実行される GUI プロセスです。Udev ルール内で直接実行すると、プロセスが udev の処理をブロックしてしまいます。フォークすると、イベント処理の終了後に udev は無条件で (フォークによって生成された) プロセスをキルしてしまいます。なので、authenticator を udev ルールから開始することはできません。しかし、systemd.device を使うことができます。

上記と同じように、/etc/udev/rules.d/80-yubikey-actions.rules を作成して、以下の内容を書き込んでください:

ENV{ID_VENDOR}=="Yubico", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410", SYMLINK+="yubikey", TAG+="systemd"

そして、新しい systemd ユーザーユニット作成してください:

~/.config/systemd/user/yubioath-desktop.service
[Unit]
Description=Autostart Yubico Authenticator
# Uncomment if you want to stop the authenticator when unplugged.
#StopPropagatedFrom=dev-yubikey.device

[Install]
WantedBy=dev-yubikey.device

[Service]
Type=oneshot
ExecStart=/usr/bin/yubioath-desktop

そして、このユニットを有効化してください。systemctl が、このユニットが存在しない dev-yubikey.device ユニットの依存関係として追加されたことを警告してきますが、問題ありません。このユニットは、YubiKey が挿入されると開始されます。

メンテナンス/アップグレード

YubiKey NEO 用に OATH アプレットをインストールする

以下のステップで、YubiKey NEO に OATH アプレットをインストールできます。Google Play Store の Yubico Authenticator を使えるようになります。

ノート: 以下のステップは、ファームウェアバージョン <= 3.1.2 の NEO でのみ必要です。現在の世代の NEO (U2F 搭載) は OpenPGP アプレットがすでにインストールされています。

NEO を CCID デバイスとして設定する

  1. yubikey-personalization-gui (yubikey-personalization-gui-gitAUR) をインストール
  2. udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。
  3. ykpersonalize -m82 を実行し、y を入力、エンターを押す。

アプレットをインストールする

  1. gpshellAURgppcscconnectionpluginAURglobalplatformAURpcscliteインストール
  2. pcscd.service起動
  3. 最も最近の CAP ファイルを ykneo-oath サイトからダウンロード。
  4. gpinstall.txtGitHub からダウンロード。
  5. gpinstall.txt を編集して install -file から始まる行を CAP ファイルが置かれているパスに修正。
  6. ターミナルを開き、gpshell path/to/gpinstall.txt を実行。
  7. 理想的には、大量のテキストが流れて、最後に以下のようなものが書かれていることです:
Command --> 80E88013D7C000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44
407326810B004B43103441003334002B102B404B3B403BB4003B440076820A4100221024405B4341008B44600000231066820A100
Wrapped command --> 84E88013DFC000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44
407326810B004B43103441003334002B102B404B3B403BB4003B440076820A4100221024405B4341008B44600000231066820A15D848CB77
27D0EDA00
Response <-- 009000
Command --> 80E60C002107A000000527210108A00000052721010108A000000527210101010003C901000000
Wrapped command --> 84E60C002907A000000527210108A00000052721010108A000000527210101010003C9010000B4648127914A4C7C00
Response <-- 009000
card_disconnect
release_context
  1. NEO を抜き、Yubico Authenticator アプリで試す。

(任意)Yubico Authenticator デスクトップクライアントをインストールする

yubioath-desktop をインストールすることで、Yubico Authenticator のデスクトップバージョンを取得できます。

pcscd.service が実行中の間に、yubioath-desktop を実行して、プロンプトが表示されたら YubiKey を挿入してください。

トラブルシューティング

Yubikey が最後に機能したときからアップデートを実行した場合特に、再起動を行ってください。一部の機能が問題なく動いているようでも再起動してください。

YubiKey が HID デバイスとして機能しない

ノート: バージョン 244以降の systemd はこの機能に対するネイティブサポートを追加したので、以下のステップはもはや必要ありません。

この記事で説明されているように、udev ルールを追加してください:

/etc/udev/rules.d/10-security-key.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0"

その後、udevadm trigger を実行してください。

ykman が YubiKey に接続できない

マネージャが YubiKey への接続に失敗する場合、pcscd.servicepcscd.socket が起動していることを確認してください。

Error: Failed connecting to YubiKey 5 [OTP+FIDO+CCID]. Make sure the application have the required permissions.

これは、scdaemon がすでにデバイスの排他的な制御を取得している場合に ykman がデバイスの oath 認証情報にアクセスした際に発生する可能性があります。[2]

これを修正するには、~/.gnupg/scdaemon.conf 内であなたのデバイスに対して reader-port オプションを正しい値で設定することができます。[3]

ノート: これにより、ykman を通して YubiKey にアクセスするたびに gpgagent が YubiKey をアンロックするプロンプトを表示するようになります。

YubiKey NEO と YubiKey 4 の場合:

reader-port Yubico Yubikey

YubiKey 5 の場合:

reader-port Yubico Yubi

YubiKey がゲスト VM 内でバインドできない

YubiKey がゲストで利用可能であると仮定すると、この問題はドライバがホストのデバイスにバインドしている結果です。デバイスのバインドを解除するには、ホストの dmesg からバスとポートの情報を手に入れる必要があります:

# dmesg | grep -B1 Yubico | tail -n 2 | head -n 1 | sed -E 's/^\[[^]]+\] usb ([^:]*):.*/\1/'

出力の USB id は X-Y.Z または X-Y の形式であるはずです。そして、ホスト上で、find を使って /sys/bus/usb/drivers を検索し、YubiKey がバインドしているドライバを探します (例: usbhid または usbfs)。

$ find /sys/bus/usb/drivers -name "*X-Y.Z*"

デバイスのバインドを解除するには、先のコマンドの出力を使ってください (つまり、/sys/bus/usb/drivers/DRIVER/X-Y.Z:1.0):

# echo 'X-Y.Z:1.0' > /sys/bus/usb/drivers/DRIVER/unbind

Error: [key] could not be locally signed or gpg: No default secret key: No public key

これは、YubiKey が挿入された状態で非標準的なキーリングでキーの署名をしようとした際に起こります(例えば、Pacmanpacman-key --populate で行うように)。解決策は、問題を起こしている YubiKey を取り外してやり直すことです。

YubiKey が Yubico Authenticator で消えたり現れたりする

これは、CCID ドライバがインストールされていない際に起こります。ccid パッケージをインストールする必要があります。

YubiKey core error: timeout

おそらく間違ったスロットを使用しています。もう一方のスロットで試してみてください。

翻訳ステータス: このページは en:YubiKey の翻訳バージョンです。最後の翻訳日は 2024-08-26 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。