はじめに
「テレワーク」と「リモートワーク」だの急に言われ始めた昨今、社内の機密情報をどのように安全にとどけるのか、重要になると考えた。
たとえば、給与明細は、どのように送り、どのように受け取ればよいだろうか。
重要な書類はどのようにチェックをすればよいだろうか?
もちろんお金周りも文章もすでに電子化対応済みだ。
だがこれまでは、最終的には紙と捺印がつかわれてきた。システムの構築は間に合わない。
突如として「テレワーク」時代は始まってしまった。既存の技術で なんとかできないだろうか。
そんなとき、YubiKeyなる、デバイスがあることを初めて知った。
YubiKeyは救世主になるか?調べてみた。
結論
救世主にはならない。YubiKeyはアーリアダプター的デバイスではないだろうか。普及にはまだまだかかるだろうし、現時点で一般層に使ってもらうのは かなり難しいという感触を得た。
... せっかく調べたので、Yubikeyの使い方(一部)を記載していく。
大雑把にしか記載はしていないが、興味のある方は参考にしてほしい。Yubikeyについて
Yubikeyは歴史あるデバイスのようで、「Yubikey5」というシリーズ名になっている。 2020年で購入できるのも「Yubikey5」。コネクタの形状や出来ることが、ラインナップで分かれている。
https://yubikey.yubion.com/yubikey_lineup.html
さらに、ファームのバージョンで出来ることが増えていくのだが、セキュリティ対策のため、ファームのアップデートははできない。
https://support.yubico.com/support/solutions/articles/15000006434-upgrading-yubikey-firmware購入するときはラインナップをしっかり確認し、 使用するときはファームバージョンを念のため確認しよう。
Yubikey5-NFCが使える対象者
- gpg、ssh-keygen、opensslが使える人。
-
パッケージマネージャが使える人
(Homebrew、Chocolatey、apt、yum, pacman ... ) - 技術の探求者
YubiKeyを使いこなすには、HPからダウンロードしてもよいのだけど、それなりにパッケージが必要になるので、
パッケージマネージャを使うほうがいいだろう。
公式ツールのyubikey-managerなどもパッケージマネージャでインストール可能の他、
openscなどといった聞き慣れないツールもパッケージマネージャからインストール出来る。
設定中や検証中、Yubikeyからキーが取れないときもあるかもしれない。(キーとして認識しない時がある)そのときはYubiKeyを何度か挿し直してみたり、次のどちらかのコマンドを実行しgpg-agentの再起動をしてみよう。
$ gpg-connect-agent /bye
$ gpgconf --kill gpg-agnet
YubiKey5-NFCでできること。(一例です)
- OpenPGPを使うとき、サイン、暗号解除するとき(秘密鍵を使用するとき)にデバイスを挿して、PINを入力してつかう。
- SSH接続するときに、デバイスを挿して、PINを入力して使う。
- (その他、「ログインするとき、デバイスを挿し、PINを入力してログインする」、OTP、FIDO2など機能豊富らしい)
YubiKey5-NFC + OpenPGP
- 最近のファームからECC暗号が使えるようになった。
-
デバイスの設定にはひたすらgpgコマンドを使う。
--card-statusや--card-editオプションが何かと思ったらこのためだった。
このようなデバイスは「smartcard」と言うらしい。 - イメージ的には、デバイスに秘密鍵を登録し、秘密鍵をつかうアクションをするときに、デバイスを挿し、PINを入力する。
- PINには、PINとPUKの2種類あるが、PINは普通に使用するときに入力する。PUKは秘密鍵をデバイスに登録するときに使用する。
- macの場合は、PINを入力する画面が文字化けするかもしれない。その時はpinentry-ttyとかに変えたほうがいいかもしれない。
- デバイスには、秘密プライマリキーを入れることも出来るし、秘密サブキーを入れることも出来る。両方入れることも可能。つまりプライマリキー用にも出来るし、サブキー用にもできる。
- 他のデバイスで使えるようにするには以下のようにする。
- デバイスを設定したPCでパブリックキーをエクスポートする。
- 他のPCでパブリックキーをインポートする。
する。$ gpg --card-status
- gpg -Kで認識できるようになる。
次の状態が、ローカル上にマスター秘密鍵が無い状態。
sec#
次の状態が、ローカル上にサブキー秘密鍵が無い状態。
ssb>
sec#
次の状態が、ローカル上にサブキー秘密鍵が無い状態。
ssb>
パブリックキーがなくなるとデバイスとの同期ができなくなってしまうようだ。道理で「パブリックキーを鍵サーバーに登録する」という手順説明の中にあるわけだ。
YubiKey5-NFC + SSH
-
PublicKeyを取り出すには、Generateしたあと、
または、Exportしたファイルに対して$ pkcs15-tool --read-ssh-key 1
することで変換できる。$ openssl x509 -in foo.pem -noout -pubkey | ssh-keygen -i -m pkcs8 -f /dev/stdin
- クライアント側の使用方法は複雑だ。
Windowsだったら、「「putty-cac」に含まれている「Pageant」」と「「putty」「teraterm」」「MinGWやCygwinだったらさらにssh-pageantが必要」という恐ろしいレベルだ。ssh-pageantを使うときにはこのような感じでキーの登録が必要だ。(ssh-agentの知識もいるということか...)$ ssh -I /usr/local/lib/opensc-pkcs11.so foo@example.com
$ eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME") $ ssh-add -L
おわりに
一般的に普及するのは難しいという感触だが、みんなが使ってくれないとこのようなデバイスは普及しないと思う。gpgとsshのことしか記載していないが、参考になれば幸いだ。