認証器としてのキーボード

2020-07-09

最近、身の回りのSSHサーバーや社内システムの多くがFIDO認証に対応し、タッチひとつでログインできるパスワードレスな環境が整ってきました。 しかし人の欲望というのは尽きることがありません。 認証器にタッチするのが面倒になってくるのです。

というのも自宅や会社のオフィスなど異なる環境でローミング認証器を利用する際、 認証を求められるとまずポケットから認証器を取り出し、よっこらせと立ち上がってUSBポートに差し込み、 User Presenceを示すためにタッチをするわけですが、 この動作を繰り返していると、これは従来のパスワード認証と比べて便利になっているのだろうかという疑念が浮かんできます。

ノートPCに組み込まれたプラットフォーム認証器は解決方法のひとつですが、Linuxから利用できないし徒歩通勤でノートPCを持ち運ぶのは大変です。

そんなわけでオープンソースのFIDO認証器Solo Hackerをキーボードに組み込み、キーボードから手を離さずに利用できる認証器をつくることにしました。

犬でもFIDO認証

  目次

キーレイアウト

キーレイアウト

片道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に落とすことでスイッチを押したことになるのでこれもトランジスタで制御します。

東芝製MOSFET(生産終了)

こんな感じです。

回路図

フルカラーLEDの実装

Solo Keyは現在の状態を示すインジケーターとしてフルカラーLEDを利用します。 例えば認証器に電源が入った状態で緑色が点灯し、ユーザープレゼンスを要求する際は青色が点灯します。

このフルカラーLEDは出力ポートで電流を吸い込むタイプですので以下のように配線してやります。

LED回路

CTAPプロトコルには認証器のLEDをチカチカさせるだけのWinkコマンドがあります。 これを実行すると…

Lチカ

光ったー

ファームウェアを書く

QMK FirmwareにAUTH_PWAUTH_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種類用意しました。

AKB45 桜モデル

AKB45 ペンギンモデル

思った上に高さがありましたが、これはPCB化してコントローラーを表面実装すればもっと低く出来るだろうと思います。 PCB化すればこのキーボードケースは不要となるので重箱として使っていく予定です。

キット化は今のところ未定ですが、そのうち技術書典などでキットを配布できたらいいなと考えています。 欲しい人が何人かいれば安く量産できる可能性があるので、 お気軽に@hamanoまでお問い合わせください。

Recent Entries

マイナちゃんピオンシップ・かがわ 2022 参加レポ

認証器としてのキーボード

Using LDAP directory for FIDO 2.0

パスポートのセキュリティ

55億円詐欺と本人確認

マイナンバーカードでPAM認証

マイナンバーカードでmacOSにログイン

マイナンバーカードでSSHする

Python Flaskでつくる LDAPログインページ

GitHub EnterpriseとLDAPで認証連携する

Hot Entries