見出し画像

セキュリティトークン「YubiKey」が便利なので布教する #Zaim

おはようございます。@watura です。最近すごく寒くなりましたが、風邪とか引いていないですか? この前の記事で新しいキー配列にチャレンジしてると書いたんですが、やっぱり辛かったので一旦 QWERTY に戻してしまいました。

私は普段、iOS エンジニアとしてお仕事しているのですが、セキュリティ周りも口出ししています。今日はその「セキュリティ口出し係」としての記事です。

今年の 9 月頃にセキュリティトークン(認証のための物理デバイス)を検討したいと考え、その検証のために「YubiKey」という端末を会社で買ってもらいました。これが自腹で自分用に購入したいくらい良かったので、その布教のために記事を書きたいと思います。

二段階認証は高セキュリティだが面倒なのが玉に瑕

Zaim では個人の方々の購買履歴など、非常にセンシティブなデータを取り扱っています。このため、環境をセキュアに保つために、さまざまな対策を施してきました。全社的に 1Password Team を導入しているのも、その一環です。 

また、Web サービスを利用するにあたっては以下のようなルールを守ってもらっています。

パスワードを発行する場合は 1Password でパスワードを生成する
パスワードは 1Password Team でを管理し、ブラウザには保存しない
パスワードの長さや複雑さにルールを決める
二段階認証の用意があるサービスは二段階認証を使う

セキュリティ口出し係としては

「使っていいサービスはこれ、それ以外のものを使う場合は許可が必要というように、もっともっとガチガチにしていきたい」

と思うものの、いちエンジニアとしては

「そんなガッチガチの環境で働くのは嫌だな」

と思うので、その気持ちをせめぎ合わせながら仕事をしています。

実際、ルールの一つである「二段階認証の用意があるサービスは二段階認証を使う」という項目は、自分で制定したものの「めっちゃ面倒なので、できる限り手間なく対応したいな」と感じていました。

最も代表的な二段階認証は、One Time Password(OTP)という方式です。Google Authenticator など二段階認証アプリをスマートフォンにあらかじめインストールしたうえで設定を施し、

1. ID とパスワードを入力する
2. スマホでアプリを起動する
3. 表示された番号を時間内に入力する

とするか、あらかじめ電話番号を登録しておき、

1. ID とパスワードを入力する
2. SMS が届くのを待る
3. 送られてきた番号を入力する

というのが一般的な流れになります。

Google Authenticator など専用アプリを用いず、1Password で同等の機能を使うこともできるはできるのですが、ID とパスワードを保存している 1Password で二段階認証まで管理するのってどうなの?という疑問があるため、Zaim では推奨していません。

手軽で、OTP などと同等かそれ以上にセキュアにする方法はないかと考えたときに、物理デバイスであるセキュリティトークンを使うのはどうかと思い当たりました。

YubiKey は USB に挿して使う物理デバイス

そこで試したのが、前述した YubiKey です。これは Yubico が開発しているセキュリティトークンで、主流なものとして 4 種類ほどがあり、USB-A と USB-C に対応しています。それぞれ大小 2 種類のサイズがあります。USB-C 版は、大きいサイズでも十分小さいです。今回、USB-C の大きいサイズの方(YubiKey 5C)を購入してもらいました。

二段階認証として

One Time Password(OTP)
FIDO Universal 2nd Factor Authentication(U2F)

という 2 パターンに対応し、さらに

Mac のログイン
秘密鍵の管理
GNU Privacy Guard(GPG)の生成

などが容易に実現できます。

USB-A 版の大きい方(YubiKey 5 NFC)は、NFC を使って認証に使えたり、USB-C 版をスマホに物理的に接続して使うということもできるようです。

YubiKey でできる二段階認証法① OTP

YubiKey を使って OTP を管理できます。ただし、そこまで便利になる!っていう感じではありません。やることとしては、上記で説明した方法とほぼ同じで、Yubico Authenticator というアプリを PC にインストールします。

1. YubiKey を PC に接続する
2. Yubico Authenticator を起動する
3. アカウントを選択して PIN を入力する(PIN は不要な設定もあり)
4. 表示されている数字を一定秒数以内に入力する

以下は画面の例です。

アプリしょぼ過ぎワロタっていうレベルですね。OTP は以下のようにして登録します。

1. YubiKey を PC に接続する
2. Yubico Authenticator を起動する
3. メニューの Files → New Credentials を選択する
4. QR が読めない時用コードみたいなのを入力する
5. 保存する

という手順で、OTP が使えるようになります。

QR コードを読ませて自動で入力するというのもあるようですが、手元では動かなかったので、手動で入力しています。これで、OTP がアプリとかと同じように使えるようになりました。

YubiKey でできる二段階認証法② U2F

U2F という OTP に比べてセキュアになった二段階認証の規格があります。この規格は YubiKey 内の公開鍵暗号を使って ID とパスワード+認証を実行するというものになります。

標準では Safari で利用できません。あ、Apple さん……?という感じなので、Chrome などを使いましょう。

使い方は超簡単です。OTP 使うよりも簡単です。例として GitHub での利用を説明してみます。まず、Settings → Security → Security keys の Add を選択します。

この時、YubiKey をタップすると「ブラウザに許可しますか?」という表示が出てきます。

許可すると、以下のような表示になり、無事に登録が完了します。

Github にログインするには、認証時に

もしくは

という画面になるので、YubiKey をタップすると、ログインできるとなります。OTP は普通に面倒だったんですが、U2F はほんとスムーズで最高という感じです。

少なくとも Google、Github、AWS では使えることを確認しています。U2F でのログイン最高だな!という感じなので、早くもっと色々なところが対応してくれるといいなと思います。

U2F のためだけに、YubiKey を自腹購入したいくらいです。

U2F は OTP よりも優れた認証方式

さて、OTP と U2F を比較したときに、OTP の方が優れているよ!という話であれば、U2F が普及することも、それをより発展させた FIDO2 やWebAuthn が普及していくことはないってことになってしまいます。

OTP は、シード値(QR コード)から毎回数字を作り出すという仕組みにです。このため、QR コードさえあれば、他の環境でも同じように値を計算できてしまいます。計算方法はオープンなので、誰でも実装可能です。また、中間者攻撃に弱いという問題もあります。

一方、U2F は、トークン内に保存している秘密鍵を使い、アカウント情報などを暗号化しています。それをサーバー側に送ります。サーバー側は最初の登録時に公開鍵を受け取っているので、その公開鍵を使ってユーザーを認証するという仕組みになります。

認証に使う秘密鍵は YubiKey から出ないので、同じトークンを複数の YubiKey で持つことは基本的には不可能です。また、サーバーに送る値はサーバーから受け取った nonce などを署名したものになるので、1 回しか使えません。

Google も U2F いいよ!って言っている点も重要です。

YubiKey は Mac のログインにも活用可能

さらに、Sierra 以降の macOS では、YubiKey の Personal Identity Verification(PIV)という機能を使ってログインすることも可能です。

PIV はアメリカで使われている身分証明書 IC に関連する技術になります。手順は、それほど複雑ではないので、 

を見ながら操作するのが楽かもしれません。手順は以下のとおりです。

YubiKey PIV Manager をインストールする
YubiKey PIV Manager を開く
PIN を設定する(数字のみ 6〜8 文字)
YubiKey PIV Manager が「Mac のログインに使う?」って聞いてくる
「使う」って答える
YubiKey を挿し直す
PIN を聞かれたり、端末のパスワードを聞かれたりするので入力する
Mac にログインする時に YubiKey が刺さっていたら、PIN でログインできる

ちなみに、特定の設定が入った構成プロファイルを Mac にインストールすると、YubiKey を使った認証以外はできないようにすることも可能です。

そうすると、ログインするためには

パソコンにアクセスできる
トークンを持っている
PIN を知っている

という条件をすべて満たす必要があり、パソコンにアクセスできて、パスワードさえ知ってれば十分だった初期設定時よりも、ずっとセキュアになります。

ただ、私は Touch ID 付の MacBook Pro を使っているので、YubiKey 使うよりも圧倒的に立ち上がりが早く、あんまり私には必要ないかなぁと感じています。

YubiKey をなくしたらやばくない?

超面倒だと思います。さまざまな種類の情報が YubiKey に入っていればいるほど、再設定に時間がかかるでしょう。

ですが、それはスマホでも同じことです。スマホの場合は数年で買い換えるので、より面倒なんじゃないのかと考えています。

このような感じで、YubiKey を使うとより楽に、よりセキュアな環境にできそうです。私個人としては Zaim 全社に YubiKey を導入して、二段階認証を簡単にできるようにしていきたいなぁと妄想しています。

おわりに

Krypton というスマホアプリや、SoftU2F という OSS も気になっています。そのうち検証すると思います。

Zaim ではセキュリティを向上するための人材も募集しています。


この記事が気に入ったらサポートをしてみませんか?