ことのはじめ
- Macを使っているとTouch IDなる指紋認証の仕組みが存在しており、起動以降はTouch IDを使えば様々な認証をID/Passwordの入力なく行える。
- 指紋認証は基本的に本人認証の方法としては安全なように思うしPasswordを覚えたりする手間を思えば全部の認証を指紋で行いたいところだ。
ところでLinuxをデスクトップで使っていると簡単にはこれが行えないようだった。
調査
Linuxで指紋認証を行うための手段
少し調べたところ、下記のような手段があった
- (1) fprintd対応済みデバイスを使うかドライバを書く
- fprintはFreeDesktopのプロジェクトの1つで、Linuxで指紋リーダー機器のサポートを追加することを目的としている
- サポートされているデバイス; https://fprint.freedesktop.org/supported-devices.html
最初、USB形式の指紋認証機器を購入し、そのLinux向けドライバを書けば早いのではないかと思っていたが色々と調べるうちに困難だとわかってきた。というのは商用の指紋読み取りデバイスはホストPCとUSB機器の通信が暗号化されているために、そこのリバースエンジニアリングが必要になるからだ。
このあたりは下記のサイトが参考になった
というわけで第二の選択肢を取ることにした
- (2) Arduinoなどに対応した指紋認証デバイスをインテグレーションする
- AS608という指紋認証デバイスがArduino, Linux, Windows向けにAPI仕様が公開されており、基本的にシリアル通信でつなぎこむことができる
- これは安価なデバイスであり、AliExpressを「as608 fingerprint sensor」などで検索すると類似の機器がたくさん出てくる
- 一番最初に見つけたインテグレーション例は; RaspiReader DIY Raspberry Pi fingerprint reader
これはかなり行けそうだったのでAliExpressで機材を購入した
検討
- 参考に動画を見ていると、AS608に接続するインターフェースはシリアル通信(UART)であることがわかった
- 次に、RaspberryPiやArduinoを使わず直接Linux(Debian/Ubuntu)でインテグレーションを行えるソフトウェアが公開されているのを発見した
インテグレーション
物理デバイス編
- まず指紋認証センサーを圧着端子でUSB-シリアル変換器でつないだ
- USB-シリアル変換器はPL2303というものを使った、「USB UART TTLケーブル」とかで検索すればAliExpressで買える
- USBの口はもちろんホストPCに接続する、うまく接続できていれば指紋認証センサーが光る
機器とUSBシリアル変換器の接続は下記のようにする(TX-RXはそれぞれ逆につなぐ)
[デバイス] [USB-シリアル変換器]
GND - GND
RX - TX
TX - RX
3V3 - 3.3V
T-OUT 使わない
T-3V3 使わない
うまく接続できていればdmesgの結果に/dev/ttyUSB0が出てきてシリアル通信の準備ができる
kernel: [ 8440.889059] pl2303 1-7.1:1.0: pl2303 converter detected
kernel: [ 8440.889744] usb 1-7.1: pl2303 converter now attached to ttyUSB0
ソフトウェア編
-
PAM Fingerprint に記載の手順に従ってパッケージをインストールする
- ここ、実はうまくいかなかったのでローカルでパッケージをビルドした
ともあれ、後はPAM Fingerprintで配布されているコマンドを使うと指紋認証デバイスへの指紋の登録とUNIXユーザーへの関連付け / 登録された指紋の削除 / 指紋のチェックがそれぞれできる
# pamfingerprint-conf
usage: pamfingerprint-conf [-h] [--add-user NAME] [--remove-user NAME] [--check-user NAME] [--version]
PAM Fingerprint configuration program:
options:
-h, --help show this help message and exit
--add-user NAME Adds a new user.
--remove-user NAME Removes a user.
--check-user NAME Checks fingerprint for an existing user.
--version, -v Prints version and exits.
使ってみた感触と今後
- 指紋認証の判定自体はスマホの指紋認証等よりは判定が厳しい印象
- PAM Fingerprintはパッケージ内部にPAMの設定ファイルも組み込まれているため、ちゃんと動いていればLinuxログイン時の指紋認証ログインも可能となる
- 1Passwordとの連携もできるのだが、どうやら1PasswordはPC初回起動時に1度はマスターパスワードを入れないとだめらしくちょっと不便だった(2回目の認証は指紋認証で可)
後は機材がむき出しなので、なにかを使ってケースへの格納をして見た目をきれいにしたいなと思っている。