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

Mon, Jul 31, 2017

先日、OpenSC 0.17.0がリリースされました。 これはマイナンバーカード内の証明書を扱うためのJPKIドライバが付属した最初のリリースとなります。 まだいくつか既知の問題を残しているのですが、Windows,Mac,Linuxなど様々なプラットフォームでJPKIを利用できる環境が整いつつあります。

今回はマイナンバーカードで自分のMacOSにログインしたり、スクリーンロックを解除する方法を紹介します。

MacOS

JPKIドライバの開発状況

PKCS#11 APIはほとんどの機能が動作するようになりました。SSHやPAM、Firefoxからは問題なく利用できるでしょう。 しかし、MacOSで証明書を利用するにはCDSA/Tokendに対応する必要があります。 これはもはやレガシーなフレームワークで、マイナンバーカードの証明書を扱う際にやっかいな問題があったのですが、このたび認証用証明書だけは問題なく利用できるようになりました。

OSへのログインだけでなく、SafariやGoogle ChromeによるTLSクライアント認証も動作します。 各種ブラウザの対応状況はこちらにまとめています。

OpenSC

macOSにログイン

macOSはスマートカードによるログインをサポートしています。ログイン時にパスワードの代わりに物理的なカードを利用して認証を行なうことができます。

ActiveDirectoryと連携してドメインアカウントでログインすることも出来ますが今回はローカルアカウントへのログイン方法を紹介します。

残念ながらリリース版のOpenSC 0.17.0はカードログインに対応できませんでした、jpkiブランチからビルドしたOpenSCをインストーラーでインストールしてください。1

まず、ユーザーアカウントとカードに入っている認証用証明書のペアリングを行います。 sc_auth hashコマンドで認証用証明書のハッシュ値を確認します。

$ sc_auth hash
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX User Authentication Key

そしてroot権限でsc_auth acceptコマンドを実行し、ユーザーアカウントと証明書を紐付けます。

$ sudo sc_auth accept -u <ユーザー名> -h XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ログインに利用する証明書は、信頼されたルート認証局からのチェーンが構築されている必要があります。 キーチェーンアクセスから認証用CA証明書を右クリックして「常に信頼」をやってしまいそうですが、これではログイン後のユーザーコンテキストに限定されてしまうので上手くいきません。CA証明書はシステムキーチェインにインポートして信頼する必要があります。2

認証用CA証明書を以下のコマンドでカードから取り出します。

$ pkcs15-tool -r 3 > ca.pem
$ openssl x509 -noout -subject -fingerprint -in ca.pem
subject=C = JP, O = JPKI, OU = JPKI for user authentication, OU = Japan Agency for Local Authority Information Systems
SHA1 Fingerprint=11:D9:CC:90:49:2B:10:FC:FA:D1:DA:D3:08:65:C2:40:98:39:13:D0

ちなみに、この証明書IDは以下のように対応しています。

  1. 認証用証明書
  2. 署名用証明書
  3. 認証用CA証明書
  4. 署名用CA証明書

つづいて、このCA証明書をシステムキーチェインにインポートします。

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.pem

keychain

最後に、スマートカードログオンを有効にして設定完了です。

$ sudo security authorizationdb smartcard enable
$ security authorizationdb smartcard status
Current smartcard login state: enabled (system.login.console enabled, authentication rule enabled)

ログイン画面では通常以下のようにユーザー名とパスワードを入力しますが、

login1

カードを読み込むと…

login2

この様にパスワードではなくPINの入力フォームに変わります。

ユーザーと紐付いているため、ユーザーの選択画面でカードを刺すと自動的にそのユーザーが選択されます。 また、スクリーンロックもこのようにPINの入力フォームになります。

screenlock2

ダメな所

  • ログイン画面にPINの失敗回数が表示されないのが不親切。
    • 3回間違えるとロックされて役所で再設定することになるので要注意。PINの失敗回数(あと何回間違えてよいのか)がわからなくなったら、pkcs15-tool --list-pinsmynaコマンドで確認できます。
  • カードによるログイン後にキーチェーンにログインするパスワードを求められる。
    • OSXはログイン時に入力したパスワード(もしくはPIN)で同時にキーチェーンにもログインするようだ、つまりキーチェーンのパスワードをカードのPINと同じに設定すれば面倒はなくなるが、これはやりたくない。
  • カードを取り出すと自動的にスクリーンロックをかける機能もあるがSierraでは動作しない。
    • Sierraより前のバージョンでは動作する。

カード認証の歴史と今後について

MacOSのスマートカード認証の歴史は2005年の米国大統領令HSPD-12に遡ります。 これは米国連邦職員に安全で信頼性のある認証を義務付けるというものでした。 HSPD-12を元にNISTがFIPS 201(PIVカード仕様)の標準化を行い、Appleはこれに準拠するためのCDSA/TokendフレームワークをOS X 10.4から提供し始めました。

こうしてMacOSでPIVカード(米国公務員が利用)やCACカード(米軍が利用)の利用環境が整備されていきました。 しかし、このCDSAフレームワークはOS X 10.7 Lion以降で非推奨となります。そして、PIVやCACのためのtokendが標準で付属しなくなりオープンソースコミュニティによるサポートに切り替わりました。34

Appleは今後利用するセキュリティフレームワークとしてCryptoTokenKitを推奨していますが、詳細なドキュメントが無いためにPIVやCACの対応が進んでいません。

Appleからもっと情報が出てくれば、OpenSCプロジェクトもCryptoTokenKitに移行するという動きも出てくると思われますが現状まだSierraでCDSAフレームワークを利用できるので、まだこのままでいいやという状況です。

いきなりCDSAフレームワークが無くなると困る人が多すぎるのでまだしばらくは無くならないだろうと思われます。


  1. 現在upstreamへのマージ作業を行っていますが、JPKI固有の事情が絡んでいて難航しています。 [return]
  2. Windowsのminidriverではカードを差し込んだら自動的にCA証明書を信頼する、というようなことが出来ますがmacOSでも同じようなことは出来ないのだろうか… [return]
  3. https://lists.apple.com/archives/fed-talk/2011/Jul/msg00099.html [return]
  4. 一時期、tokendは住基カードの署名用証明書をサポートしたこともありましたが、現在は消えてしまいました。 [return]