最近、身の回りのSSHサーバーや社内システムの多くがFIDO認証に対応し、タッチひとつでログインできるパスワードレスな環境が整ってきました。 しかし人の欲望というのは尽きることがありません。 認証器にタッチするのが面倒になってくるのです。
というのも自宅や会社のオフィスなど異なる環境でローミング認証器を利用する際、 認証を求められるとまずポケットから認証器を取り出し、よっこらせと立ち上がってUSBポートに差し込み、 User Presenceを示すためにタッチをするわけですが、 この動作を繰り返していると、これは従来のパスワード認証と比べて便利になっているのだろうかという疑念が浮かんできます。
ノートPCに組み込まれたプラットフォーム認証器は解決方法のひとつですが、Linuxから利用できないし徒歩通勤でノートPCを持ち運ぶのは大変です。
そんなわけでオープンソースのFIDO認証器Solo Hackerをキーボードに組み込み、キーボードから手を離さずに利用できる認証器をつくることにしました。
目次
キーレイアウト
片道1時間以上の徒歩通勤でも持ち運びが楽になるよう45キーの40%キーボードにしました。
こんなにキーが少なくて大丈夫なの?
と思うかもしれませんがQMK Firmwareのレイヤー機能を利用すれば問題ありません。
スペースバーにあるSandS
キーはタップするとスペース、長押しするとShiftとなるキーです。
右下のAuth
キーが認証キーです。ユーザープレゼンスを示す時に押します。
またRaise + Auth
キーで認証器を電気的に切り離せるようにしました。
これにより必要なときだけ認証器をPCに刺すという動作をキーボードだけで実現できます。
基板の配線
SU120という試作用基板を使って、キーボードの基板をハンドワイヤーしていきます。
こっちはキーボードで認証器を制御するための基板
Solo Keyの制御
キーボードコントローラーのPro MicroでSolo Keyが載っているSTM32を制御します。
Pro MicroでSTM32の電源制御を行うためにMOS型トランジスタを使いました。
同様にユーザープレゼンスはPA0
ピンをGNDに落とすことでスイッチを押したことになるのでこれもトランジスタで制御します。
こんな感じです。
フルカラーLEDの実装
Solo Keyは現在の状態を示すインジケーターとしてフルカラーLEDを利用します。 例えば認証器に電源が入った状態で緑色が点灯し、ユーザープレゼンスを要求する際は青色が点灯します。
このフルカラーLEDは出力ポートで電流を吸い込むタイプですので以下のように配線してやります。
CTAPプロトコルには認証器のLEDをチカチカさせるだけのWinkコマンドがあります。 これを実行すると…
光ったー
ファームウェアを書く
QMK FirmwareにAUTH_PW
とAUTH_UP
キーコードを定義し、STM32を制御するコードを加えました。
/* 電源のON/OFFをトグル */
void auth_pw(keyrecord_t *record) {
if (record->event.pressed) {
user_config.auth_pw_state ^= 1;
writePin(AUTH_PW_PIN, user_config.auth_pw_state);
}
}
/* ユーザープレゼンスを示す */
void auth_up(keyrecord_t *record) {
if (record->event.pressed) {
writePin(AUTH_UP_PIN, 1);
} else {
writePin(AUTH_UP_PIN, 0);
}
}
ファームウェアのソースコードはこちら
https://github.com/hamano/akb45
キーボードの名前は45キーのAuthenticator KeyBoardということでAKB45となっております。
木を切る
3Dプリンタを持ってないのでキーボードケースは木を切って作るしかありません。 以前、本棚を建てた時に余った端材を使います。
切り分けられました。
接着します。
なんだか酒枡のようなものができあがりました。 このままでは無骨なのでニスを塗っていきます。
塗装する
丁寧にウレタンニスを塗っていくと、重箱のような仕上がりになりました。
完成
キーキャップを取り付けて完成です。 桜モデルとペンギンモデルの2種類用意しました。
思った上に高さがありましたが、これはPCB化してコントローラーを表面実装すればもっと低く出来るだろうと思います。 PCB化すればこのキーボードケースは不要となるので重箱として使っていく予定です。
キット化は今のところ未定ですが、そのうち技術書典などでキットを配布できたらいいなと考えています。 欲しい人が何人かいれば安く量産できる可能性があるので、 お気軽に@hamanoまでお問い合わせください。