「YubiKey」の版間の差分
(ページの作成:「Category:セキュリティ en:Yubikey Yubikey はワンタイムパスワード (OTP) を生成する小さな ...」) |
(同期) |
||
3行目: | 3行目: | ||
Yubikey は[[Wikipedia:ja:ワンタイムパスワード|ワンタイムパスワード]] (OTP) を生成する小さな [[Wikipedia:ja:セキュリティトークン|USB トークン]]です。Yubikey は [http://www.yubico.com/ Yubico] によって製造されています。 |
Yubikey は[[Wikipedia:ja:ワンタイムパスワード|ワンタイムパスワード]] (OTP) を生成する小さな [[Wikipedia:ja:セキュリティトークン|USB トークン]]です。Yubikey は [http://www.yubico.com/ Yubico] によって製造されています。 |
||
− | Yubikey は USB キーボードをエミュレートして OTP をテキストとして送信するため、ドライバーが必要ないという利点があります。 |
+ | Yubikey は USB キーボードをエミュレートして OTP をテキストとして送信するため、特別なドライバーが必要ないという利点があります。 |
== イントロダクション == |
== イントロダクション == |
||
41行目: | 41行目: | ||
== SSH で2段階認証 == |
== SSH で2段階認証 == |
||
− | {{Note|参照: |
+ | {{Note|参照: https://developers.yubico.com/yubico-pam/Yubikey_and_SSH_via_PAM.html}} |
このセクションでは Yubikey を使って SSH で[[Wikipedia:Two factor authentication|2段階認証]] (パスワードと Yubikey によって生成された OTP を使用) を行う方法を説明します。 |
このセクションでは Yubikey を使って SSH で[[Wikipedia:Two factor authentication|2段階認証]] (パスワードと Yubikey によって生成された OTP を使用) を行う方法を説明します。 |
||
47行目: | 47行目: | ||
=== 要件 === |
=== 要件 === |
||
+ | {{Pkg|yubico-pam}} をインストールしてください。 |
||
− | 必要なパッケージは AUR にあります。SSH で2段階認証をするのに必要なパッケージは {{AUR|yubico-pam-git}} です。このパッケージは以下のパッケージに依存しています: |
||
− | * {{AUR|yubico-c}} |
||
− | * {{AUR|yubico-c-client-git}} |
||
− | * {{AUR|yubikey-personalization-git}} |
||
− | |||
− | 全てのパッケージをインストールしてください。 |
||
{{Note|Yubikey を使用するようにリモートサーバーを設定する場合、緊急用に SSH セッションを余分に一つ開いておいたほうが良いでしょう。間違えて設定をしてメインのセッションをうかり終了してしまったときにサーバーからロックアウトされないようにするためです。}} |
{{Note|Yubikey を使用するようにリモートサーバーを設定する場合、緊急用に SSH セッションを余分に一つ開いておいたほうが良いでしょう。間違えて設定をしてメインのセッションをうかり終了してしまったときにサーバーからロックアウトされないようにするためです。}} |
||
75行目: | 70行目: | ||
auth required pam_yubico.so id=1234 key=YnVubmllcyBhcmUgY29vbAo= |
auth required pam_yubico.so id=1234 key=YnVubmllcyBhcmUgY29vbAo= |
||
{{ic|id}} と {{ic|key}} はあなたの HMAC ID とキーに置き換えて下さい。上で書いたように Yubico からリクエストできます。 |
{{ic|id}} と {{ic|key}} はあなたの HMAC ID とキーに置き換えて下さい。上で書いたように Yubico からリクエストできます。 |
||
+ | {{Note| |
||
− | {{Note|HMAC 証明書はサーバーごとに固有のものです。たとえ攻撃者が証明書を発見したとしても、他のサーバーを認証するレスポンスを作成することはできません。}} |
||
+ | * HMAC 証明書はサーバーごとに固有のものです。たとえ攻撃者が証明書を発見したとしても、他のサーバーを認証するレスポンスを作成することはできません。 |
||
− | {{Note|{{ic|url}} パラメータは指定していません。デフォルトは Yubico の HTTP (non-TLS) サーバーになっています。}} |
||
+ | * {{ic|url}} パラメータは指定していません。デフォルトは Yubico の HTTP (non-TLS) サーバーになっています。}} |
||
HMAC 証明書を権限がないユーザーが見れないようにファイルを読み込み禁止にすると良いでしょう: |
HMAC 証明書を権限がないユーザーが見れないようにファイルを読み込み禁止にすると良いでしょう: |
||
# chmod o-r /etc/pam.d/sshd |
# chmod o-r /etc/pam.d/sshd |
||
94行目: | 90行目: | ||
ログインするには、SSH の {{ic|Password:}} プロンプトで、'''エンターを押さないで'''パスワードを入力します。そして Yubikey のボタンにタッチしてください。Yubikey は OTP の最後にリターンを送信するのでエンターキーに触れる必要はありません。 |
ログインするには、SSH の {{ic|Password:}} プロンプトで、'''エンターを押さないで'''パスワードを入力します。そして Yubikey のボタンにタッチしてください。Yubikey は OTP の最後にリターンを送信するのでエンターキーに触れる必要はありません。 |
||
+ | {{Note|pam_unix.so から use_first_pass 行を削除することで、先に YubiKey を使ってからパスワードが要求されるようにできます。}} |
||
− | {{Note|If you remove use_first_pass from the pam_unix.so line, you can just use your YubiKey first, then it will prompt for your password after the YubiKey line.}} |
||
=== 解説 === |
=== 解説 === |
||
+ | 基本的なパスワード認証を行う {{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}} がある場合は前のモジュールからパスワードを受け取ります。 |
||
− | This works because the prompt is {{ic|pam_yubico.so}}'s one, since this module is before {{ic|pam_unix.so}}, which does basic password authentication. |
||
− | So, you are giving a string that is the concatenation of your password and the OTP to {{ic|pam_yubico.so}}. |
||
− | Since the OTPs have a fixed length (let us call this size N), it just has to get the last N characters to retrieve the OTP, and it assumes that the other characters at the start are the password. |
||
− | It tries to validate the OTP, and in case of success, sends the password to the next PAM module, {{ic|pam_unix.so}}, which was instructed not to prompt for the password, but to receive it from the previous module, with {{ic|use_first_pass}}. |
||
== Yubikey NEO の OATH アプレットをインストール == |
== Yubikey NEO の OATH アプレットをインストール == |
||
以下の手順を踏めば OATH アプレットを Yubikey NEO にインストールすることができます。Google Play ストアの Yubico Authenticator が使えるようになります。 |
以下の手順を踏めば OATH アプレットを Yubikey NEO にインストールすることができます。Google Play ストアの Yubico Authenticator が使えるようになります。 |
||
+ | {{Note|1=以下の手順はファームウェアのバージョン 3.1.2 以下の NEO でのみ必要です。最新の NEO (と U2F) にはあらかじめ OpenPGP アプレットがインストールされています。}} |
||
− | {{Note|1=These steps are only for NEOs with a firmware version <= 3.1.2. The current generation NEOs (with U2F) come with the OpenPGP applet already installed)}} |
||
=== NEO を CCID デバイスとして設定 === |
=== NEO を CCID デバイスとして設定 === |
||
− | # AUR から {{AUR| |
+ | # AUR から {{AUR|yubikey-personalization-gui-git}} をインストールしてください。 |
# udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。 |
# udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。 |
||
# {{ic | ykpersonalize -m82}} を実行して {{ic | y}} と入力してエンターを押します。 |
# {{ic | ykpersonalize -m82}} を実行して {{ic | y}} と入力してエンターを押します。 |
||
=== アプレットのインストール === |
=== アプレットのインストール === |
||
− | * {{AUR| |
+ | * {{AUR|gpshell}}, {{AUR|gppcscconnectionplugin}}, {{AUR|globalplatform}}, {{Pkg|pcsclite}} をインストールしてください。 |
− | * {{ic |
+ | * {{ic|# systemctl start pcscd}} で {{ic|pcscd.service}} を起動します。 |
* [http://opensource.yubico.com/ykneo-oath/releases.html ykneo-oath] サイトから最新の CAP ファイルをダウンロード。 |
* [http://opensource.yubico.com/ykneo-oath/releases.html ykneo-oath] サイトから最新の CAP ファイルをダウンロード。 |
||
− | * [https://github.com/Yubico/ykneo-oath/blob/master/gpinstall.txt GitHub] から {{ic |
+ | * [https://github.com/Yubico/ykneo-oath/blob/master/gpinstall.txt GitHub] から {{ic|gpinstall.txt}} をダウンロード。 |
− | * gpinstall.txt を編集して {{ic |
+ | * gpinstall.txt を編集して {{ic|install -file}} から始まる行を CAP ファイルが置かれているパスに修正。 |
− | * ターミナルを開いて {{ic| |
+ | * ターミナルを開いて {{ic|gpshell <location of gpinstall.txt>}} を実行。 |
* 上手く行けば、テキストが流れて、最後に以下のように表示されます: |
* 上手く行けば、テキストが流れて、最後に以下のように表示されます: |
||
− | {{ |
+ | {{bc|Command --> 80E88013D7C000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A |
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C |
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C |
||
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44 |
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44 |
||
135行目: | 128行目: | ||
release_context}} |
release_context}} |
||
* NEO を抜いて Yubico Authenticator アプリを試して下さい。 |
* NEO を抜いて Yubico Authenticator アプリを試して下さい。 |
||
+ | |||
+ | ===(任意) Yubico Authenticator デスクトップクライアントのインストール === |
||
+ | |||
+ | Yubico Authenticator のデスクトップ版は {{AUR|yubico-yubioath-desktop-git}} でインストールできます。 |
||
+ | |||
+ | == 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 |
||
+ | |||
+ | == ブラウザで U2F を有効化 == |
||
+ | |||
+ | === Chromium/Chrome === |
||
+ | |||
+ | Chromium で U2F を機能させるには {{Pkg|libu2f-host}} ライブラリのインストールが必要です。Yubikey をユーザーからアクセスするのに必要な [https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules udev ルール] がインストールされます。デフォルトでは root からしか Yubikey にアクセスできないため、Chromium はエラーを吐きます。 |
||
+ | |||
+ | === Firefox === |
||
+ | |||
+ | Firefox で U2F のサポートを有効にするには、[https://github.com/prefiks/u2f4moz こちらのアドオン] をインストールしてください。ネイティブなサポートは現在 [https://bugzilla.mozilla.org/show_bug.cgi?id=1065729 開発中] です。 |
||
+ | |||
+ | == OpenPGP スマートカードモードを有効化 == |
||
+ | 以下の手順を実行することで YubiKey の OpenPGP 機能を使うことができるようになります: |
||
+ | |||
+ | # 上に書かれているように 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 を最後に使ったときからアップデートを実行している場合、再起動を行ってください。問題なく動いているようでも再起動してください。 |
2016年9月20日 (火) 22:36時点における版
Yubikey はワンタイムパスワード (OTP) を生成する小さな USB トークンです。Yubikey は Yubico によって製造されています。
Yubikey は USB キーボードをエミュレートして OTP をテキストとして送信するため、特別なドライバーが必要ないという利点があります。
目次
イントロダクション
仕組み
Yubikey の認証プロトコルは共通鍵暗号に基づいています。より正確に言うと、それぞれの Yubikey には固有の128ビットの AES 鍵が含まれています。この鍵を使用して、キーの ID やカウンター、乱数などからなるトークンを暗号化します。OTP はキーの ID と暗号化されたトークンを連結して作成されます。
作成された OTP は認証を行いたいシステムに送られます。システムは OTP が問題ないか検証サーバーに問い合わせを行います。検証サーバーには Yubikey ID -> AES 鍵の対応表があり、OTP のキー ID を使って、AES 鍵を取得して OTP の他の部分を復号化することが可能です。OTP が問題なければ (平文の ID と暗号化された ID が同じで、(反射攻撃をふせぐため) カウンターが最後に確認された値より大きい場合)、認証は成功します。
検証サーバーは認証結果をシステムに送り返し、そのレスポンスに応じてアクセスを与えるべきかどうか決定します。
セキュリティリスク
AES 鍵の漏洩
ご想像の通り、AES 鍵は絶対に秘密にする必要があります。Yubikey から AES 鍵を抜き取ることはできません (少なくともソフトウェアを使って抜き取るのは不可能に近い)。AES 鍵は検証サーバーにも存在するため、このサーバーのセキュリティというのがとても重要になります。
検証リクエスト/レスポンスの盗聴
システムは検証サーバーの決定に従っているため、検証サーバーになりすます攻撃が考えられます。従って、システムは検証サーバーを認証する必要があります。2つの方法が存在します:
- HMAC: 共通鍵暗号を使用して、対象サーバーと検証サーバーで鍵を共有して、その鍵を使ってリクエストとレスポンスに署名をします。
- TLS: リクエストとレスポンスは HTTP で受け取りするので、TLS (HTTPS) を使って接続を認証・暗号化することが可能です。
YubiCloud と検証サーバー
Yubikey を購入した時点で、Yubikey には Yubico だけが知っている AES 鍵が初めから搭載されています。たとえあなたであっても、Yubico はその AES 鍵を教えるようなことはしません。Yubico はフリーの制限付き検証サーバーを提供しています (YubiCloud)。また、サーバーのオープンソース実装も提供しています。
そこで2つの選択肢が出てきます:
- Yubikey に初めから載っている AES 鍵を使って Yubico の検証サーバーで検証を行う。
- Yubikey に新しく AES 鍵を書き込んで自分で検証サーバーを運営する。
SSH で2段階認証
このセクションでは Yubikey を使って SSH で2段階認証 (パスワードと Yubikey によって生成された OTP を使用) を行う方法を説明します。
要件
yubico-pam をインストールしてください。
PAM の設定
/etc/pam.d/sshd
を編集して、以下の行を:
auth required pam_unix.so
次のように修正してください:
auth required pam_unix.so use_first_pass
そして以下のどちらかの設定をしてください。HTTPS を使用する方法を推奨しますが、どちらを選んでもかまいません。
HTTPS を使用して検証サーバーを認証する場合
先に編集した 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 は実際には使われませんがないと動作しません。
HMAC を使用して検証サーバーを認証する場合
先に編集した pam_unix.so
の行の前に以下の行を挿入します。
auth required pam_yubico.so id=1234 key=YnVubmllcyBhcmUgY29vbAo=
id
と key
はあなたの HMAC ID とキーに置き換えて下さい。上で書いたように Yubico からリクエストできます。
HMAC 証明書を権限がないユーザーが見れないようにファイルを読み込み禁止にすると良いでしょう:
# chmod o-r /etc/pam.d/sshd
SSHD の設定
/etc/ssh/sshd_config
に以下の行が含まれていること、そしてアンコメントされていることを確認してください。以下の設定はデフォルトです。
ChallengeResponseAuthentication no UsePAM yes
テスト
PAM 設定ファイルに変更を加えただけで再起動をする必要はありません。
ログインするには、SSH の Password:
プロンプトで、エンターを押さないでパスワードを入力します。そして Yubikey のボタンにタッチしてください。Yubikey は OTP の最後にリターンを送信するのでエンターキーに触れる必要はありません。
解説
基本的なパスワード認証を行う pam_unix.so
よりも前に pam_yubico.so
が読み込まれるため、パスワードと OTP を連結した文字列が pam_yubico.so
に与えられます。OTP は固定長なので (ここではN文字とします)、与えられた最後のN文字を OTP として、他の文字列はパスワードと認識する必要があります。OTP の認証が成功したら、パスワードは次の PAM モジュールである pam_unix.so
に送信されます。ただし use_first_pass
がある場合は前のモジュールからパスワードを受け取ります。
Yubikey NEO の OATH アプレットをインストール
以下の手順を踏めば OATH アプレットを Yubikey NEO にインストールすることができます。Google Play ストアの Yubico Authenticator が使えるようになります。
NEO を CCID デバイスとして設定
- AUR から yubikey-personalization-gui-gitAUR をインストールしてください。
- udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。
ykpersonalize -m82
を実行してy
と入力してエンターを押します。
アプレットのインストール
- gpshellAUR, gppcscconnectionpluginAUR, globalplatformAUR, pcsclite をインストールしてください。
# systemctl start pcscd
でpcscd.service
を起動します。- ykneo-oath サイトから最新の CAP ファイルをダウンロード。
- GitHub から
gpinstall.txt
をダウンロード。 - gpinstall.txt を編集して
install -file
から始まる行を CAP ファイルが置かれているパスに修正。 - ターミナルを開いて
gpshell <location of gpinstall.txt>
を実行。 - 上手く行けば、テキストが流れて、最後に以下のように表示されます:
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
- NEO を抜いて Yubico Authenticator アプリを試して下さい。
(任意) Yubico Authenticator デスクトップクライアントのインストール
Yubico Authenticator のデスクトップ版は yubico-yubioath-desktop-gitAUR でインストールできます。
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
ブラウザで U2F を有効化
Chromium/Chrome
Chromium で U2F を機能させるには libu2f-host ライブラリのインストールが必要です。Yubikey をユーザーからアクセスするのに必要な udev ルール がインストールされます。デフォルトでは root からしか Yubikey にアクセスできないため、Chromium はエラーを吐きます。
Firefox
Firefox で U2F のサポートを有効にするには、こちらのアドオン をインストールしてください。ネイティブなサポートは現在 開発中 です。
OpenPGP スマートカードモードを有効化
以下の手順を実行することで YubiKey の OpenPGP 機能を使うことができるようになります:
- 上に書かれているように YubiKey を CCID デバイスとして設定。
- pcsc-tools, ccid, libusb-compat をインストール。
# systemctl enable pcscd.service
と# systemctl start pcscd.service
でpcscd
を起動・有効化。pcsc_scan
を実行すると接続されているデバイスの情報が表示され YubiKey が使えるかどうか確認できます。さらにgpg --card-status
で GPG からカードを利用できることを確認できます。
トラブルシューティング
Yubikey を最後に使ったときからアップデートを実行している場合、再起動を行ってください。問題なく動いているようでも再起動してください。