この記事をきっかけに公開鍵暗号やPKIの在り方について議論が盛り上がってるので、ポイントになりそうな話をまとめてみます。
パスポートにおける公開鍵暗号のおさらい
上の記事を読んでください、という感じなのですが、ざっくりまとめると以下の仕組みです。
・ICカードにアクセスするためのBasic Access Control:いわゆるPINとかに相当します。「パスポート番号 + 生年月日 + パスポートの有効期限」とのことなので、要するにパスポートの顔写真のページを見た人ならば分かる情報です。
・データの電子署名を確認するPassive Authentication:Basic Access Controlを通ると、券面のデータ及び、そのハッシュ値:SOD(Security Obeject Document)、SODに対する電子署名が取得できます。この電子署名は、最終的に各国が運用する独自ルートCAである「CSCA:Country Signing CA」が最上位となっています。
・カードが複製されないことを保証するActive Authentication:パスポート上のICカードが一枚ずつ持つ鍵対(秘密鍵・公開鍵)を利用した電子署名によって、物理的な耐タンパー性とあわせてそのカードが複製されていないことを保証します。
今回は、このCSCAの公開鍵証明書の入手が問題となっています。
情報開示請求に対する外務省の回答
技術的に判断できる前半については、散々言われているとおり、公開鍵証明書の秘匿性そのものにパスポートの安全性を依存するようでは論外なので、この不開示理由ははっきり間違っていると断言できます。
後半は「共通認識」があるとのことなので、外務省の回答者がそう思うんならそうなんでしょう、外務省の回答者の中では。
外務省はCSCAの公開鍵証明書を公開すべきかどうか
それでは一つ戻って「外務省はCSCAの公開鍵証明書を公開すべきかどうか」というポイントに戻ると、技術的にはいくつかの議論ポイントがあるように思います。あえて擁護側の立場を取ってみます。
なお本筋である「情報公開制度への対応として公開するべきかどうか」の話はこの記事ではスコープ外とし、あくまで暗号学的観点からの思考実験です。
1. そもそも公開鍵証明書を公開する理由がない
公開鍵暗号アルゴリズムにおける公開鍵は、その利用相手にのみ公開鍵を届ければ良く、公開鍵という名前に反して「万人に公開される」必要はありません。これはPKIにおける公開鍵証明書に関しても同様で、ルートCAにより発行される下位の公開鍵証明書を検証する相手が入手できれば良いものです。
今回で言えば、外務省が手間を掛けて(後述)その公開鍵証明書を、想定された利用者(ここも後述)以外に公開する必要はありません。
2. 公開鍵証明書を安易に開示すると、公開鍵配送問題が発生する
公開鍵暗号を利用したPKIの信頼性は、その「トラストアンカー(信頼の起点)」となるルートCAの公開鍵証明書を、いかに安全に入手するかに依存しています。
安易にトラストアンカーを送ってしまうと、その途中で差し替えられてしまうなどの攻撃が考えられます。
CSCAの公開鍵証明書を入手しようと言うからにはそれを利用することが想定されるわけですが、情報開示請求という手続きの仕組みで、公開鍵証明書をセキュアに開示することが困難である、という判断はありえます。少なくとも「手間」は掛かるでしょう。
個人的には、国民からの請求に応じてトラストアンカーを開示するからには、それを正しく利用できるようにするために「請求した国民まで安全に届ける義務」が発生するのではないかと考えます。なので、もし情報公開制度により開示されるのであれば、そういった条件付けは必要かも知れません。
3. 公開鍵証明書を公開したほうが安全になるわけではない
暗号アルゴリズムの安全性は、そのアルゴリズムがたくさんの研究者の目に晒されることによって維持されていることはご存知の通りです。パスポートのICカードの場合は、利用しているRSAは既知のアルゴリズムであり、公開鍵そのものを公開したからといって「よりセキュアになる」わけではないです。
むしろ、今後新しいRSAへの攻撃手法が見つかった際に、公開鍵を知っていることで秘密鍵を入手しやすくなる可能性は否定できません。その場合に、脆弱になった古い鍵対を捨て(revoke)、対策されたアルゴリズムでCSCA鍵対を作り直して公開鍵を再配布する必要がありますが、利用している相手が限られている方が良い、とは言えます。
4. かといって公開鍵を秘匿した方が暗号学的に安全になるわけでもない
発端の記事にもある通り、CSCA公開鍵証明書そのものがもともと公開情報であるため、外務省が秘匿したからと言って、言うまでもなく暗号学的に安全になることはありません。
ここからは、一般論として別の可能性に触れておきます。
たとえば、鍵対(公開鍵と秘密鍵)を生成するときに、脆弱性のある実装を用いると公開鍵から秘密鍵を入手できます*1
ほかにも、RSAには脆弱な運用パターンがいくつもあります。
とはいえ、さすがにそんな脆弱性のある実装でCSCAの鍵対を生成することはさすがに考えられない(うえに、さすがに他国から指摘されているだろう)と思われるので、この可能性は考えないことにしたいです。
いずれにせよ、現実的にCSCA公開鍵証明書は公開状態にあるため、直接は関係無い話です。おそらく暗号解読研究者の方々はとっくに入手できるルートから入手して攻撃を試みていることでしょう。
マイナンバーカードとの違い
似たような話題として、同じブログの方によって話題となったマイナンバーカード上の公的個人認証に関する仕様公開がありました。
マイナンバーカード(の公的個人認証)とパスポートの最大の違いは、そもそもが利活用を目的として設計されているはずの公的個人認証の公開鍵証明書に対して、パスポートは相手国や航空会社での利用のみが想定されているという部分です。
そもそもカジュアルにパスポートのICカード上の情報が認証として一般的に利用されるようになると、そこにはパスポート上の記載事項が載っています。顔写真のデジタルデータが取得できるほか、指紋や虹彩情報などの生体情報を記録することも今後考えられます。
日本が導入したIC旅券に記録される生体情報は、ICAO(国際民間航空機関)が策定したIC旅券の国際標準において必須と規定されている顔画像・国籍・氏名・生年月日・旅券番号など旅券面の記載事項が記録されます。しかし、指紋は記録されません。なお、いくつかの国では、指紋を記録しており、また、虹彩情報を記録するための研究が進められています。
そういった前提がある以上、入出国や航空機搭乗のような場面でなく広く利活用されるべきものではないように思います。
《追記:2019-04-25 10:23》
……と思っていた時期もありましたが、以下の意見を見て考えを変えました。
いまだ民間に対して券面イメージしか開放しないことによって、パスポートや在留カードの偽造やダークウェブでの販売が横行している現実と、数年以内にRSA暗号が危殆化するリスクとを比較考量するセンスが問われますね
— 楠 正憲 (@masanork) April 24, 2019
この現状を鑑みると、暗号学的な多少のリスクよりも、民間がパスポートの暗号学的検証をできないことによる社会的なリスクの方が大きいように思います。
もともとGitHub SSH公開鍵などの過去を踏まえた上で、公開鍵だから必ずしも万人に公開することが良いわけでは無いというモチベーションからの記事でしたが、少なくともパスポートに関しては、政府としてCSCA公開鍵証明書を公開し活用を促進するべきでしょう。
個人の生体情報を含みうるデジタルデータが幅広く利活用されてしまうのには抵抗があるのですが、次世代のIC旅券とかでうまい落としどころがあると良いなと思います。とはいえ現状では犯罪対策の方が優先でしょうね。
《追記:2019-04-26 06:00》
公開鍵証明書を単に公開鍵と書いていたところを、公開鍵証明書と公開鍵にきちんと分けました。これにあわせ、PKIと公開鍵暗号の話を整理しました。
自分としては、公開鍵アルゴリズムとの関係が分かりやすいよう、ルートCAの自己署名証明書を公開鍵と簡略化したつもりだったのですが、かえって混乱を招いてしまったようです。申し訳ありません。
また最上位CAとルートCAなど表現がブレていた部分も直しました。
結論
まとめると、あくまで技術的には「公開鍵は一般に公開されても公開されなくても良い」というように思います。その上で、パスポートのCSCA公開鍵証明書に関しては公開が望ましい、というのが結論です。
このように、いくつかの議論ポイントがある以上、公開鍵暗号だから「公開」されるべきだろう、という直感的な発想で思考停止してしまうのはちょっともったいないな、と感じたので思考実験気味にまとめてみました。
まあでもそれはそれとして、外務省の中の人そこまで考えてないと思います。
ちなみに、パスポートの規格を決めるICAO(国際民間航空機関)は以下のようにおっしゃっています。
https://www.icao.int/security/mrtd/Lists/FAQ/FAQ.aspx
Can CSCA Certificates be published on a state’s website, or would this be a breach of ICAO standards?
(公開して良い?ICAO違反にならない?)
Certificates are public information and as such can be published on a website. This is not a breach of ICAO standards.
(証明書は公開情報だから好きにして。違反じゃないよ)