SSHのところまでやるのは面倒そうなので、マイナンバーカードから公開鍵を取ってくるのと、署名したデータを公開鍵で復号するところだけやってみよう。
これなら、OpenSSLがあればできるはずだ。
マイナンバーカードを作るときには4つの暗証番号を作っている。
- 署名用電子証明書暗証番号
- 利用者証明電子証明書暗証番号
- 住民基本台帳用暗証番号
- 券面事項入力補助用暗証番号
マイナンバーカードでSSHする - AAA Blog
こちらの「署名プロトコル」では、PIN番号が4桁の暗証番号をASCIIで、と書いてある。
1番は文字列だったので違うとして、2~4番のどれだろう?
3つとも同じ数字でも良いようだったのだけど、せっかくだから別々にしたのだ。
ファイルシステムからすると、住基APが3番で、券面事項確認APと券面事項人力補助APが4番だろうか。
となると、消去法で2番となる。
実行時も「User Authentication PIN」となっているから、利用者の方だろう。
総務省のPDFでは、JPKI-APの暗証番号は2種類あるように書かれているので、1番と2番がそれだろう。
1番を使う場合は、PDFを見ていると、情報を得るためのお金がいるような気がする。
http://www.soumu.go.jp/kojinbango_card/kojinninshou-01.html
ここを読むと、いわゆる電子署名で使うのが1番、本人の確認で使うのが2番のようだ。
しかし、利用者証明書の方は、自由なデータを符号化するのではなく、公開鍵+電子証明書を利用者証明書秘密鍵で符号化するようだ。
では、あのサイトで署名に使っているPKCS1形式のハッシュ値、というのは、なんだろうか?
下の方にはPKCS#11 APIと書かれているが、それとは別ということか。
そういう細かいところまでは書かれていないから、ソースファイルを読まないといかんのか。。。
しかし「公的」というくらいだから、実は一般的な仕様書があるんじゃなかろうか?
まずは、そこから探してみよう。
PKCS#1は、RSAとハッシュを使って電子署名を行うアルゴリズムらしい。
http://www.atmarkit.co.jp/ait/articles/0607/11/news113_2.html
ということは、やはり署名の話ではあるようだ。
ならば、入れるメッセージは自由だと思う。
公的個人認証サービス利用のための民間事業者向けガイドライン1.1版
これのp.13を見ると、電子利用者証明を使うのは「文書を伴わないアクセス」となっているから、やはり文書を入れられないということか。
p.11の方には「公開鍵+電子証明書」が自分であることを証明するデータと書かれている。
p.11では、電子署名のしくみはもともとあるのだが、その中身は「基本4情報を含む」ものが入っている。
基本4情報は「氏名、住所、生年月日、性別」だ(証明書の期限は5回目の誕生日だから、生年月日はわからないけど誕生日はわかってしまうんだけどね)。
だから、それは民間には開放しにくいけど、新規の方は基本4情報が入っていないから、インターネットのログイン程度でも使ってもらって構わないということか。
ということからすると、どういうデータかわからなかった「PKCS1形式のハッシュ値」というのは、「公開鍵+電子証明書(基本4情報を含まない)」をPKCS1形式でハッシュ値にしたものなのかな。
でも、p.12の例2を見ると、利用者証明用電子証明書を使っているけど暗号文などが入っているのよねぇ。
それだったら、どういうデータを突っ込んでも、とりあえず秘密鍵で符号化してくれそうな気もするのだ。
もしかしたら、それ自体がPKCS1形式なのかもしれんが。。。どうなのだろう。
JPKIを利用するアプリをインストールして情報を確認すると、sha256フィンガープリント、という情報があった。
64文字あるので、32バイト分→256bitって、そのままだった。。。
適当なデータを突っ込むか、それっぽいデータを突っ込むか考えたが、このフィンガープリントがそれっぽい感じがするので、よいのではなかろうか。
・・・あれ。
そういえば、公開鍵はどうやって取得したらいいんだろう?
pkcs15-toolというツールを使ってid_rsa.pubに出力しているけど、これをカードからどうやって読み込んでいるかの情報は書かれていない。。
これ以上進めるには、公的個人認証APの仕様が公開されないと難しい。
実際にアクセスして解析するという手段もなくはないのだが、今回は止めておこう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。