YubiKeyのOATHをCLIで扱う

はじめに

前回の投稿「Yubico Authenticator 6」ではYubiKey 5OATH 機能をYubico 社の認証アプリYubico Authenticator を使って操作しましたが、今回はYubiKey ManagerCLIツール (ykmanコマンド) を使って操作してみたのでその解説をします。

ykman コマンドの引数にTwitter のQR コードの値 “otpath://totp/Twitter:@RodentGiant?secret=xxxxx&issuer=Twitter” を指定してYubiKey にアカウントを登録して認証コードを発行する、というようなことの解説です。

扱うコマンドはCLI ツールのOATH コマンドで、Yubico 社の公式サイトにマニュアルが掲載されています。

YubiKey のOATH 機能について

前回の投稿「Yubico Authenticator 6」で解説していたので省略。

YubiKey Manager について

Yubico 社が提供するYubiKey Manager には、ウィンドウ操作のGUI ツールと、コマンドライン操作のCLI ツール の2種類のツールがあります。
今回の投稿はコマンドライン操作のCLI ツールを使った解説になります。

GUI ツールについては、過去の投稿「MacにYubiKey Managerをインストール」で解説しているので興味がある方はご参照ください。
なお、GUI ツールはYubiKey のOATH 機能を操作する機能を備えていないです。

環境について

今回の解説で使う環境です。

  • OS:macOS Monterey
  • YubiKey Manager CLI (ver 5.0.0)
  • YubiKey 5 NFC

インストール(CLIツール)

Yubico 社の公式サイトからCLI ツールのパッケージファイルをダウンロードしてインストールすることができますが、GUI ツールにはCLI ツールも同梱されているので、GUI ツールをインストールしてCLI ツールを使うことも可能です。

  • YubiKey Manager (CLIツール)のパッケージファイル
    • インストールすると自動でパス指定される
    • CLI ツールのバージョンが最新(ver. 5.0.0)
  • YubiKey Manager (GUIツール)のパッケージファイル
    • CLI ツールが同梱されている(パス指定が必要)
    • CLI ツールのバージョンが最新ではない(ver. 4.0.7)

ただ、2022年12月23日時点ではありますが、GUI ツールに同梱されているCLI ツールは最新のver.5.0.0 ではないので、最新を使いたい場合はCLI ツールを単体でインストールする必要があります。

もし、GUI ツールと最新のCLI ツールの両方を使いたい場合は、GUI ツールに同梱されているCLI ツールはパス指定が自動で行われないので、両方とも単純にインストールするだけで最新のCLI ツールが使える状態になります。

なお、macOS ユーザーの場合は、Homebrew を使ってCLI ツールをインストールすることもできます。こちらは最新のバージョン(ver. 5.0.0)になっていました。

各リンク先を貼っておきます。

各種環境のインストール方法が掲載されているYuboco 社のページが参考になりそうなのでリンクを貼っておきます。

Homebrew を使ってインストール

今回、Homebrew を使ってCLIツールのみをインストールします。

ターミナルで下記のコマンドを実行してインストールします。

brew install ykman

インストール後にykman コマンドに既にパスが通っていることを確認します。バージョンは5.0.0 です。

% which ykman
/opt/homebrew/bin/ykman

% ykman -v
YubiKey Manager (ykman) version: 5.0.0

OATH 機能を使う(アカウントの登録〜認証コードの生成)

CLI ツールを使ったアカウントの登録は、2要素認証を登録するサービス側が表示するQR コードの情報を使って行います。

例として、Twitter とGoogle で表示されたQR コードのページとQR コードの情報(QR コードをスキャンして読み取ったURI)を載せておきます。

Twitter

Twitter > QRコード
QRコード
Twitter > shared secret
shared secret
otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter

“Can’t scan the QR code?” をクリックするとshared secret が表示されたページが表示されました。

Google

Google > QRコード
QRコード
Google > shared secret
shared secret
otpauth://totp/Google:[email protected]?secret=abcdefghijklmnopqrstuvwxyz012345&issuer=Google

“スキャンできない場合” をクリックするとshared secret が表示されたページが表示されました。

アカウントの登録(URI を指定する)

QR コードをスキャンして読み取ったURI をそのまま指定して登録します。

ykman oath accounts uri "otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter"

認証コードの発行にYubiKey のタッチを要求するようにする場合は-t オプションを指定します。

ykman oath accounts uri -t "otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter"

アカウントの登録(shared secret を指定する)

shared secret を指定して登録します。

Twitter とGoogle では前述のQR コードを表示するページからリンクできるページでshared secret を確認することができます。
また、URI のクエリパラメータsecret の値がshared secret なので、URI で確認することもできます。

URI に含まれる要素を分解してshared secret 以外のオプションを指定するので、オプションの意味が分かりやすいように、ハイフン2つのオプションも併記しておきます。

ykman oath accounts add -i Twitter -o TOTP @RodentGiant ABCDEFGHIJKLMNOP
ykman oath accounts add --issuer Twitter --oath-type TOTP @RodentGiant ABCDEFGHIJKLMNOP

認証コードの発行にYubiKey のタッチを要求するようにする場合は-t オプションを指定します

ykman oath accounts add -i Twitter -o TOTP -t @RodentGiant ABCDEFGHIJKLMNOP

アカウント情報の一覧を表示

YubiKey に登録されているアカウントの情報を一覧で表示します。

% ykman oath accounts list -H -o -P
% ykman oath accounts list --show-hidden --oath-type --period
Twitter:@RodentGiant, TOTP, 30

-H オプションは非表示アカウントを表示するためのもののようですが、そもそも非表示アカウントが何か調べても分かりませんでした。-H オプションは指定しなくても結果は変わらなかったので、指定する必要ないのかもしれません。

認証コードの生成

アカウントを絞り込む条件を指定しないでコマンドを実行します。

% ykman oath accounts code
Google:RodentGiant    [Requires Touch]
Twitter:@RodentGiant            001542

アカウントが2つ登録されている場合、上記のように出力されます。

出力されるアカウントが2つ以上ある場合、アカウントの登録時に-t オプションを指定したアカウントは[Requires Touch] と表示されます。

-tオプションを指定したアカウントの認証コードの発行

アカウント登録時に-t オプションを指定したアカウントの認証コードを発行するためには、1つのアカウントのみ出力されるようにする必要があります。
YubiKey に複数のアカウントが登録されている場合は、アカウントを絞り込む条件(部分一致)を指定します。

% ykman oath accounts code Google:RodentGiant
Touch your YubiKey...
Google:RodentGiant  302862

2行目でYubiKey のタッチが要求され、タッチすると3行目の抽出したアカウントのアカウント名と認証コードが表示されます。

認証コードのみ出力する

-s オプションを指定して認証コードのみ出力することもできます。
この場合も、1つのアカウントのみ出力されるようにする必要があります。

% ykman oath accounts code -s Twitter:@RodentGiant
% ykman oath accounts code --single Twitter:@RodentGiant
001542

OATH 機能を使う(アカウントの管理)

アカウントの名前変更

% ykman oath accounts rename Twitter:@RodentGiant "Twitter:RenamedName"
Rename account: Twitter:@RodentGiant ? [y/N]: y
Renamed Twitter:@RodentGiant to Twitter:RenamedName.

アカウントにissuer を設定していた場合、変更後の名前の左に”:”(セミコロン)を付けてissuer を指定しないとissuer が削除されます。
上記例では”Twitter” がissuer 、”RenamedName” が変更後のアカウント名です。

アカウントの削除

% ykman oath accounts delete Twitter:@RodentGiant
Delete account: Twitter:@RodentGiant ? [y/N]: y
Deleted Twitter:@RodentGiant.

サービス側の2要素認証の設定も削除する必要があるので注意が必要です。
削除する順番を(1)サービス側の2要素認証の設定を削除、(2)YubiKey 側のアカウントを削除、とすればログイン時にサービス側から2要素認証の認証コードの入力を求められるけれど発行できないという状況は回避できるでしょう。

OATH 機能を使う(パスワード関連)

前回の投稿「Yubico Authenticator 6」のあとがき「YubiKey の紛失や窃取によるアカウント情報の漏洩」で少し解説していますが、YubiKey のOATH 機能にパスワードを設定することができます。
YubiKey を不正に入手した第三者への、YubiKey に登録されているアカウント情報の漏洩と、認証コードの発行を防ぐことができるので、安全のためにはパスワードは設定しておいた方がよさそうです。

なお、これまでの例示したコマンドはパスワードが設定されていない例になります。
パスワードが設定されていると、コマンドを実行する度にパスワードの入力が求められるようになります
アカウント情報の一覧を表示するコマンドの場合、下記のようになります。

% ykman oath accounts list -H -o -P
Enter the password:

-p オプションでコマンドにパスワードの文字列を付加することで、「Enter the password:」を表示しないで結果を得ることができますが、ターミナルに実行したコマンドの記録が残るのは望ましくないと思うので個人的には使わないようにしています。

% ykman oath accounts list -H -o -P -p 123456
Twitter:@RodentGiant, TOTP, 30

パスワードの設定(初期登録・変更)

YubiKey のOATH 機能は、初期状態ではパスワードが設定されていないです。
パスワードを初期登録する場合と、初期登録後に変更する場合で使うコマンドは同じです。

% ykman oath access change
Enter the new password:
Repeat for confirmation:
Password updated.

パスワードの削除

YubiKey のOATH 機能に設定されているパスワードを削除します。削除するとコマンドの実行時にパスワードの入力を求められなくなります。

% ykman oath access change -c
Enter the current password:
Password cleared from YubiKey.

パソコンにパスワードを記憶

パスワードをパソコンに記憶させておくことにより、コマンドを実行する度にパスワードの入力が求められないようにすることができます。
裏で記憶しておいたパスワードが自動入力される感じです。

% ykman oath access remember
Enter the password:
Password remembered.

一度、このコマンドを実行しておけば、同じパソコンであればパソコンを再起動しても記憶された状態が保たれます。
仕組みとしては、~/.ykman/oath.json というファイルに記憶されるようです。

パソコンに記憶したパスワードを削除

パソコンに記憶されているパスワードを削除します。削除した場合、YubiKey のOATH 機能のパスワードが設定されたままだと、コマンドの実行時にパスワードの入力が求められるようになります。

% ykman oath access forget
Password forgotten.

YubiKey のOATH 機能のパスワードの変更や削除をした場合、パソコンに記憶したパスワードは使えなくなるので、パソコンに新しいパスワードを記憶するか、このコマンドでパソコンに記憶されているパスワードを削除します。

あとがき

YubiKey のOATH 機能のパスワード設定について

  • YubiKey 紛失時の備えとして、パスワードは設定しておいた方がよさそう
  • コマンドを入力する度にパスワードを入力するのは面倒なので、パソコンに記憶させる機能は使った方がよい
  • 設定したパスワードを失念すると、パスワードの変更も削除もできなくなる
    • YubiKey に登録したアカウントの認証コードが発行できなくなる
    • YubiKey のOATH をリセットするしかない
    • パスワードはパスワードマネージャーに登録しておいた方がよい

Yubico Authenticator を使えば良いのでは?

YubiKey のOATH 機能は、Yubico Authenticator であればGUI で操作できるので、一般的な用途ではCLI ツールを使う必要がなさそう。
ざっと見た感じ、CLI ツールでできることはすべてYubico Authenticator でできると思われる。

サーバ側で認証コードを発行する仕組みを作るのにCLI ツールを使うにしても、YubiKey 5 のOATH 機能を使う場合、YubiKey 5 のOATH に登録できるOATH-TOTP の上限が32 なので、用途としては向いていなそう。

参照

Yubico Authenticator 6

Yubico 社が Yubico Authenticator 6 の正式版をリリースしました。

ユーザーのクレデンシャルをYubiKey に保存するというのが特徴の認証アプリの使用感がどのようなものか試してみたので、その解説をします。

はじめに

Yubico Authenticator について

いわゆる、2要素認証でユーザIDとパスワードを入力した後に入力する認証コードなどと呼ばれるワンタイムパスワード(OTP)を生成する認証アプリです。

認証アプリとして有名なものに、Google AuthenticatorAuthyMicrosoft Authenticator などがありますが、これらと同じことができるアプリです。

Yubico 社のサイトに、Yubico Authenticator の特徴として以下のような点が挙げられていました。

  • ユーザーのクレデンシャルをモバイル端末ではなくYubiKey内のセキュアエレメントに保存するので、クレデンシャルの漏洩を完全に防ぐことができる
  • YubiKey に保存したクレデンシャルは複数のデバイスでシームレスに利用することができる
  • アプリはWindows, macOS, Linux, iOS, Android で動作するので、パソコンでもモバイル端末でも同じ認証コードを取得できる(ARM 版macOS もサポート)

先ほど例示した認証アプリはスマホにインストールした認証アプリ単体で認証コードを発行しますが、Yubico Authenticator は認証アプリをインストールしたスマホやパソコンにYubiKey をNFT やUSB で接続して認証コードを発行します。

認証コードの発行はYubiKey のOATH-TOTH/TOTP 機能を使って行われるので、この機能を備えたYubiKey 5 シリーズが必要となります。(例えばSecurity Key シリーズは対応していない)

YubiKey のOATH-HOTP/TOTP 機能

YubiKey 5 シリーズには、YubiKey 本体にFIDO2 やPIV(Smart Card) など色々な機能がありますが、このYubico Authenticator はYubiKey のOATH(HOTP/TOTP)の機能を使ってOTP を発行しているようです。

OATH には下記の2つの方式がありますが、今回試すTwitterOATH-TOTP のみ対応しているようです。

  • OATH-HOTP
    • HMAC-based OTP
    • OTP の発行回数を使ってOTP を生成する
    • 生成したOTP を認証に使わなかった場合、サーバーの発行回数と同期がとれなくなる
  • OATH-TOTP
    • Time-based OTP
    • 接続したデバイスの現在時刻を使って6〜8桁の数字のOTP を生成する
    • 30秒ごとにOTP が変わる

Google Authenticator、Authy、Duo Mobile、1Passwordなど、どの時間ベースのワンタイムパスワード(TOTP)認証アプリでも使えます

Twitter ヘルプセンター

インストール

Yubico Authenticator のページにOS ごとのインストーラへのリンクがあります。

Yubico Authenticator > Install

今回、Mac とAndroid にインストールしました。

Mac

Mac(macOS)には、下記の2つのインストールする方法が用意されています。

  • AppStore からダウンロード
  • Yubico の公式サイトからdmg ファイルをダウンロード

今回、後者の方法でインストールすることにしました。
※ Homebrew にはなかった
※ 手順は特筆することがないので省略

Android

Google Play を使ってインストールします。
※ 手順は特筆することがないので省略

Yubico Authenticator > Android > Install

使ってみる(Mac)

Launchpad にあるアイコンをクリックしてYubico Auhenticator を起動します。

Yubico Authenticator アイコン (Mac)

Yubico Authenticator のウィンドウが表示されます。
縦長のスマホの画面のようなウィンドウです。

Yubico Authenticator (Dark mode)
Dark mode
Yubico Authenticator (Light mode)
Light mode

Dark modeLight mode の切り替えは、左上の[≡] > Settings > Appearance からできます。

Insert your YubiKey” と表示されているので、パソコン(Mac) のUSBポートにYubiKey を差し込みます。

YubiKey Authenticator (アカウント未登録)

右上のアイコンが差し込んだYubiKey のアイコンに変わり、中央の文言が”No accounts” に変わりました。
このYubiKey のOATH にはアカウントが何も登録されていないです。

ここで一旦、初回のみ行う作業の解説をします。
このアプリは、アカウントを追加する際にブラウザのページ上に表示されるQR コードをスクリーンショットで読み込むので、そのための権限を許可する必要があります。
以下、その手順です。

右上のYubiKey のアイコンをクリックするとメニューが表示されます。

Yubico Authenticator > Authenticator > menu

[Add account] をクリックします。

Yubico Authenticator > Authenticator > Add account

[Scan QR code] をクリックすると、下記のウィンドウが表示されます。

Yubico Authenticator > Macの初期設定

画面収録の許可を求められるので、[“システム環境設定”を開く] をクリックしてシステム環境設定を表示し、セキュリティとプライバシー > プライバシー > 画面収録 のYubico Authenticator.app のチェックをON にします。

初回のみ行う作業は以上です。

アカウントの追加

今回、Twitter アカウントに2要素認証の登録をします。
ブラウザを開き、2要素認証を登録するTwitter アカウントでTwitter にログインし、下記の操作で2要素認証のページを表示します。

  1. サイドメニューの[もっと見る] を開き、[設定とサポート] > [設定とプライバシー] をクリック
  2. [セキュリティとアカウントアクセス] > [セキュリティ] > [2要素認証] をクリック
Twitter > 2要素認証
※ イメージはセキュリティキーが既に設定されていた状態

[認証アプリ] のチェックボックスをクリックします。

Twitter > 2要素認証 1

[はじめる] をクリックします。

Twitter > 2要素認証 2

QR コードが表示されました。

Yubico Authenticator を起動し、右上のYubiKey のアイコンをクリックして表示されるメニューの[Add account] をクリックします。

Yubico Authenticator > Authenticator > Add account 1

下記イメージのようにブラウザ上のQR コードYubico Authenticator アプリの両方が画面に表示された状態にします。

Yubico Authenticator > Authenticator > Add account 2

[Scan QR code] をクリックします。

Yubico Authenticator > Authenticator > Add account 3

値が自動入力され、ボタンが[Scanned QR code] に変わりました。
Issuer とAccount name は変更することができます。
下にあるボタンは、[Require touch] 以外は変更できない状態になりました。

[Require touch] はON/OFF の切り替えができ、ON にすると認証コードの発行にYubiKey のタッチが要求されるようになります。(デフォルトはOFF)

右上の[Save] をクリックして保存します。

Yubico Authenticator > アカウント(Require touch:OFF)
[Require touch] OFF
Yubico Authenticator > アカウント(Require touch:ON)
[Require touch] ON

先ほど、”No accounts” と表示されていた画面にTwitter アカウントが表示されるようになりました。

  • [Require touch] をOFF にすると認証コードが表示されます。認証コードは30秒ごとに別のコードに自動で変わるので、常に最新のコードが表示されます
  • [Require touch] をON にすると認証コードが表示されず、タッチのアイコンが表示されます

[Require touch] をON にしていた場合、アカウントをクリックします。

Yubico Authenticator > Require touch 1

“Touch Required” と表示されると同時に、接続しているYubiKey 本体が点滅し始めるので、YubiKey を指でタッチします。

Yubico Authenticator > Require touch 2

認証コードが表示されました。

Yubico Authenticator > Require touch 3

認証コードは30秒ごとに変わるので、30秒経過すると表示されていた認証コードが灰色になり、クリップボードにコピーする一番左のアイコンは無効になりました。

再度認証コードを発行する場合は左から2つ目のアイコン「↻」をクリックすると”Touch Required” の状態になるので、再度YubiKey をタッチして発行することができます。

この時点ではYubico Authenticator (YubiKey)側のアカウント登録しかできていないので、Twitter の2要素認証を有効にするためにブラウザに戻ります。

ブラウザに戻ったら、QR コードの下にある[次へ] をクリックします。

Yubico Authenticator > Authenticator > Add account 4

認証コードの入力が求められるので、Yubico Authenticator に表示されている認証コードを入力し、[確認] をクリックします。

Yubico Authenticator > Authenticator > Add account 5

これでTwitter の2要素認証が有効になりました。

上の画像の赤枠の箇所にバックアップコードが表示されています。
バックアップコードは、ログイン時の2要素認証で使うことができる使い捨てのコード(12桁の英数字)で、万が一YubiKey を紛失した場合に代替手段として使うことができるので、どこか安全な場所に保管しておくことをお勧めします。

Yubico Authenticator を使った2要素認証のログイン

パソコンのブラウザでTwitter にログインします。
Yubico Authenticator が発行する認証コードを使ってログインできるか確認します。

Yubico Authenticator > Twitter ログイン 1

電話番号/メールアドレス/ユーザー名 を入力して[次へ] をクリックします。

Yubico Authenticator > Twitter ログイン 2

パスワードを入力して[ログイン] をクリックします。

Yubico Authenticator > Twitter ログイン 3
Chrome の小ウィンドウ

[キャンセル] をクリックします。

Yubico Authenticator > Twitter ログイン 4

[コード表示アプリを使用] を選択し、[次へ] をクリックします。

Yubico Authenticator > Twitter ログイン 5

認証コードの入力が求められるので、Yubico Authenticator アプリに表示されている認証コードを入力し、[次へ] をクリックするとログインが成功しました。

使ってみる(Android)

アプリのアイコンをクリックしてYubico Auhenticator を起動します。

Yubico Authenticator アイコン (Android)

Yubico Authenticator のウィンドウが表示されます。

スクリーンショットが禁止されているようで、キャプチャした画像は画面が黒い状態でした。残念ながらここからはイメージなしの解説になります。

Android 版は画面のレイアウトやできることがパソコン版と基本的に同じだったので、パソコン版との違いを確認できた範囲で解説します。

Yubico Authenticator 起動直後の状態

  • パソコン版
    • “Insert your YubiKey” と表示される
  • Android 版
    • Insert or tap your YubiKey” と表示される

Android 版は、USBポートへのYubiKey の物理的な差し込みに加え、YubiKey をかざしてNFC 接続することができます。

参考まで、Pixel でYubiKey をかざす際のかざす位置(NFC チップがある場所)が分かるリンクを貼っておきます。

アカウントの追加

  • パソコン版
    • USB ポートにYubiKey を差し込まないと、右上の”Add account” を含めたメニューが表示されない
  • Android 版
    • YubiKey と接続(*1) すると、右上の”Add account” を含めたメニューがパソコン版と同じように表示される
    • YubiKey と接続(*1) せずに右上のアイコンをクリックすると、カメラが起動してQR コードをスキャンする状態になる。
      このままQR コードをスキャンするとパソコン版と同じように値が自動入力され、[Save] をタップすると”Tap your key” と表示されるので、このタイミングでYubiKey と接続するとアカウントが保存される
    • つまり、YubiKey の接続はQR コードを読み込む前でも後でもよい

(*1) USBポートへのYubiKey の物理的な差し込み、YubiKey をかざしたNFC 接続

Yubico Authenticator で認証コードを発行

“Require touch” をOFF にして登録したアカウントの認証コードをAndroid 版YubiKey をかざしてNFC 接続する場合だけ、特徴的な違いがありました。

“Require touch” OFF“Require touch”ON
パソコンUSB常に最新のコードが表示されるYubiKey をタッチした時のコードが表示され、
30秒過ぎたら再度タッチして再発行
AndroidUSB同上同上
AndroidNFCYubiKey をかざした時のコードが表示され、
30秒過ぎたら再度かざして再発行
YubiKey をかざした時のコードが表示され、
30秒過ぎたら再度かざして再発行

当然ではありますが、認証コードの発行はYubiKey が行うので、常時接続しているUSB と違いNFC の場合は、新しい認証コードを発行するために30秒過ぎる度にスマホにYubiKey をかざす必要があります。

あとがき

複数のデバイスでシームレスに利用できる

YubiKey に登録した同じアカウントで、パソコンとAndroid のYubico Authenticator が発行する認証コードを使って2要素認証のログインができるかをそれぞれ試したら問題なくできた。

YubiKey が手元にあればどの端末でもYubico Authenticator をインストールするだけで認証コードを発行できるので、パソコンやスマホの機種変更の際は、新しい端末にYubico Authenticator をインストールするだけでよいということになる。
つまり、端末の機種変更の際はアカウント情報の移行やユーザ認証等は不要。

YubiKey の紛失や窃取によるアカウント情報の漏洩

YubiKey を入手した第三者に、YubiKey に登録されているアカウントのサービス名とそれに紐づくユーザID、2要素認証の認証コードが伝わってしまうと、残りのパスワードが特定されると不正ログインを許すことになる。
パスワードの使い回しをしていた場合、どこかのサービスで同じユーザIDとパスワードの組みが漏洩していると、その第三者が漏洩したリストを入手してパスワードを特定することが可能になる。

前述「アカウントの追加」で記載したように、QRコードを読み込むとIssuer(サービス名) とAccount Name(ユーザID) が自動入力されるので、それらの情報と認証コードがYubico Authenticator がインストールされた第三者の端末にYubiKey を接続するだけで表示されてしまっては、上記のようなアカウント情報の漏洩が起きてしまうことになる。
それを防ぐ方法は、下記の2つがある。

  • YubiKey にアカウントを追加する際に、QRコードを読み込んで自動入力されたIssuer とAccount Name を変更してから登録する(登録後の変更も可能)
  • YubiKey のOATH 機能にパスワードを設定する
    • Yubico Authenticator の右上のYubiKey のアイコンをクリックして表示されるメニューの[Set password] からパスワードを設定できる
    • パスワードを設定しておくと、端末にYubiKey を接続するとYubico Authenticator からパスワードの入力を求められるようになる

推奨は後者のパスワード設定。設定したパスワードは1Password などのパスワードマネージャに登録しておけばよい。
もしパスワードを忘れた場合は、OATH をリセットするしかない。

前者はアカウントを追加する際に変更し忘れる可能性があるのと、アカウント名を変更することで使い勝手が悪くなるので運用上無理がありそう。

セキュリティキー(FIDO)を使った2要素認証との使い分け

サービス側がセキュリティキー(FIDO)に対応しているのであれば、フィッシング攻撃に耐性のあるセキュリティキー(FIDO)を有効にしておき、メインの2要素認証として使うようにしておけば最強ともいえるセキュアな状態にすることができる。

この場合、同じYubiKey でTOTP を使った認証コードの設定をする意味は全くなさそう。むしろ下手に設定することで前述したような不正ログインのリスクを作ることになりかねない。

認証アプリの種類と使い分け

サービス側がセキュリティキー(FIDO)に対応していないが、TOTP を使った認証コードに対応している場合は、フィッシング攻撃に耐性がないがTOTP を使った認証コードを有効にしておくことで、パスワード認証のみよりはセキュアな状態にすることができる。

どの認証アプリを使うかの選択は、利便性を含めて使う側の好みにもよるので、ざっくりとした比較だけしておく。

クレデンシャルの保存場所と
認証コードの発行
クレデンシャルの
サーバへの保存
認証アプリ
認証アプリ保存されないGoogle Authenticator、Microsoft Authenticator
同上保存されるAuthy、1Password
YubiKey (OATH)Yubico Authenticator

パソコンのYubico Authenticator をメインで使う

YubiKey 5 NanoYubikey 5C Nano であれば、パソコンに常時接続しておくと邪魔にならずに便利そう。
ただ、コンパクトであることが仇になりかねないので、ログインしようとしたらYubiKey が無くなっていることに気づいたということが起きかねない環境でパソコンを使う際は要注意。

スマホのYubico Authenticator をメインで使う

YubiKey 5 NFCYubiKey 5C NFC などNFC を搭載したYubiKey の方が便利そう。
Android とUSB 接続して使えることを今回確認したが、普段そのような使い方はしないと思う。

YubiKey Manager command line tool (ykman)

Yubico Authenticator 6 のリリースについてYubico 社が公開したブログより抜粋。

To support this new app we also needed to improve the library aspects of ykman, which resulted in the release of ykman 5.0.

デスクトップ版 のYubico Authenticator は、YubiKey Manager command line tool (ykman) をライブラリと使っていて、今回の対応でykman 5.0 をリリースすることになったとのこと。
ykman 5.0 では、ykman コマンドでpython のスクリプトを実行してYubiKey を設定できるのだとか。

ykman 5.0 のことが気になったので、YubiKey Manager (GUI版) をインストールした際に同梱されていた現在使っているバージョンを確認。

% which ykman
/Applications/YubiKey Manager.app/Contents/MacOS/ykman

% ykman -v
YubiKey Manager (ykman) version: 4.0.7

このYubiKey Manager (GUI版) は最新版だったので、ykman 5.0 が同梱されているバージョンはまだ公開されていなかった。

Yubico Authenticator をインストール後にYubico Authenticator.app 内を探してみたけれど、ykman は見つからず。Yubico Authenticator にはykman は同梱されていなかった。

GitHub にはykman 5.0 があったので、使いたい場合は個別にインストールする必要があるみたい。
Homebrew のykman は5.0 になっていたので、Mac ユーザであればこちらも利用可能。

ykman 5.0 のインストールは保留にして、とりあえず現在のykman 4.07 でOATH に登録したTwitter のアカウントを確認するコマンドを実行してみた。

% ykman oath accounts list -H -o -P
Twitter:@RodentGiant, TOTP, 30

他にもアカウント登録など色々なオプションがあるので気になるけれど、収拾つかなくなりそうなのでとりあえず今回はここまでとする。

参照