Chienomi

認証と権限の根本的な考え方

trend

最近、法人設立における印鑑登録を必須でなくす法案がはんこ業界の反対によって頓挫したのだが、その際に

欧米のサイン制度と違い、代理決済できるという印章の特長が、迅速な意思決定や決裁に繋がり、戦後の日本の急速な発展にも寄与してきたという自負もあります。

と声明を出し、失笑を買った。

根本的に、印鑑が証明として効力を持つのは、「同一の印鑑は本人しか持っていないはずだから、その印鑑を持っているのは本人である」という前提に基づく。 つまり、「本人以外がはんこを押せる」という状態は「hackされた状態」なわけである。

ところが、業界的にそのhackを認めてしまったことで、逆に「印鑑は本人の意思の証明にはならない」ということを主張するという本末転倒な状態である。

予め言っておくが、私は印鑑は 嫌いではない 。もちろん、印鑑文化にまつわる無意味な儀礼的要素や形式などは 唾棄するほど嫌い だが、印鑑自体はそれなりに好きで、私が使っている印鑑はかなり凝ったものである。会社設立のときも私の強い推しによって特殊な印鑑を制作した。

また、この話はセキュリティ的な認証と権限の話であり、 はんこの話ではない

認証

はんこやサインがどのような意味を持っているかということを考えてみれば、それは「以上の行為が本人であることを証す」ものである。 それは契約であったり、取引であったりといったことだが、このうちの「何者が」というのを担っている。 日本式の「自著+印鑑」というのはかなり無意味に思えるが、まぁ単純に多重化されている(どちらも単独では信頼できないとみなしている)と考えられる。

当たり前だが、認証時に他者を騙ることは許されないし、それが許されてしまってはそもそも認証としての機能を成していないということになる。

代理決裁が必要なのであれば、決裁権を他の者にも付与すれば良い。 Mimir Yokohamaではサポートサービスが福利厚生として利用できるようになっており、このとき決裁者を決めることができるが、 Any ofだけでなく、Orderedも可能になっている。つまり、上位から決裁可能な状態になければ次のものに決裁権を与える方式である。

他者を騙ることが許される認証というのはないのと同じである。

私としては、はんこもサインも「認証」としての機能は極めて脆弱であり、機能しないと考えている。

まず、照合されない、というのが大きい。 印影照合システムがあるのは知っているが、どれだけ導入されていて、どれだけ実際に使われているというのか。 ほとんどの場合、単に「押されている」だけで通過してしまう。

さらにいえば、最近の印鑑は基本的に機械的なフォントなので、実物に触れることさえできれば比較的簡単に模造できる。 もしかしたら陰影照合システムはそれを判別するのかもしれないが、欠けたりしても結構平気なので、それを考えると工業レベルの差は吸収されてしまうのではないだろうか。

署名はもっといい加減で、クレジットカードの署名なんて、私はペン次第でまるで形が変わってしまう。 私はクレジットカードに楷書ではなく、いわゆる「サイン」を使っているのだけど、「何語を操る人物にも模倣しにくい」という点を意識した特殊なサインを使っている。これは、通常の「サイン」に使っているものとも異なる。異なる理由はセキュリティ的な意識があることがひとつ、そしてクレジットカード裏の署名欄が横長であるのがひとつ。 だが、ペン次第で線の交差位置すら変わってしまうので、サインとしては認証できないことがかなり多いと思うのだけど、これで困ったことは一度もない。

いずれもどちらかといえば、裁判にまでなったときに「本人によるものかどうか」を焦点にして真贋が争われるものだと思うのだけど、この時点で「認証」ではできていない。「鑑定」できるに過ぎない。

そして、「本人でない者が勝手に押した印鑑に効力があるか」は法的に不明なのである。 まぁ、この声明の直後に役人が勝手に100度に渡り無断で決裁印を押したとして咎められたのは笑い話でもあったが。

共有される認証という愚

共有される認証ということでいえは「グループパスワード」というものがある。 Unixシステムにも導入されているが、これが有効になっていることはまずない。

その理由は、「共有される秘密は必ず漏洩する」ということからである。

認証の要件は「当人だけが持ちうるものである」ことなのだが、共有されている秘密というのは帰属が曖昧になるため、他に誰も知りえない状態にはなりえない。 暗号としては、「他の人に触れるチャンスのあった秘密」というのは「無効な秘密」とみなす。

グループパスワードをかけるのではなく、個別に認証される個々のアカウントに対するパスワードをグループに所属させるべきである。

この意味では、SSH鍵をマシン外に持ち出してしまうのもアウトである。 Inflatonでは異なるホストまたは異なるユーザーで鍵を使いまわしたことが発覚すると、アカウント停止を含む処置をとる場合があり、極めて厳しい処置をとることになっている。 そうする理由は、機密度の高い情報が取り扱われる非公開のサーバーへのアクセスを外部に晒すことは、他者の秘密情報にアクセスする踏み台を提供するのと同義であるためだ。

ちなみに、Mimir YokohamaでもInflatonでも、同一鍵の異なるアカウントへの使い回しも警告することにしている。

この意味ではホスト間で共有されるGnuPG鍵というのは非常に問題がある気がする。 だから私はOpenSSH鍵は場合によっては暗号化しないが(それでも少なくとも暗号化ファイルシステムもしくは暗号化ブロックデバイス上にはあるが)、GnuPG鍵は必ず暗号化するようにしている。そして、GnuPG鍵の暗号という秘密を漏洩することはない。

だから、決裁権を持つ人が複数いるのであれば複数人の有効な承認を用意すべきで、少なくとも共有されるべきではない。 共有したら、もはや認証としての価値はない。

有効性

認証要素の有効性、というのは簡単に見えて実は非常に難しい。

前述のように、印鑑や署名には認証要素として不十分である。 そもそも、複製が可能ではいけないのだ。本人しか知りえない秘密でなくてはならない。

その意味では頭の中にだけあるパスワードというのは非常に強い。が、実はこれも「本人しか知りえない秘密」かと言うと微妙だったりする。 典型的にはメモを残してしまえば終わりだし、ショルダーハッキングという方法もある。 私は外に持ち出す端末は他と共有されていないパスフレーズを使っているし、誰かの前で繰り返し使うもの(例えばクライアントが使っているサーバーのOpenSSH鍵のパスフレーズ)はその人に固有のものにしている。 実際、私は過去には「彼女によるショルダーハッキング」を食らったことがある。もちろん、そのときも十分に複雑で使い回されないパスフレーズによって防衛に成功したが。

だから実は複雑なパスフレーズを使い回すという方法はあまりよくない。 可能であれば「知りうる手段によって知りうる内容で攻略できない方法」である必要がある。 例えば、生体認証+PINまたはパスフレーズのようにだ。

この意味では、Windowsの「PINのほうが安全」という理屈はわからないではない。 使い回される可能性のあるパスフレーズを人前で打たせるよりは、PINを使ったほうが、「パスフレーズを使った覚えられてオンラインサービスに不正ログインされる」というコンボを防ぐことができる。 しかし、これに関してはそもそもパスフレーズを使い回すようなことを避けるべきで、正直PINのほうがショルダーハッキングによる攻略性は向上する。実際に私にもPINを攻略した経験はある。

私のラップトップの場合は前述のような複雑なパスフレーズ認証に加えて、LUKSによる暗号化を伴っている。 確実とは言えないが、シャットダウンしてしまえばLUKSパスフレーズを外で打つことは基本的にないので、アンロック不可能な状態にできる。 もっとも、これに関してはログインパスフレーズ変更ほどLUKSパスフレーズ変更は容易ではないので、LUKSパスフレーズの取り扱いに細心の注意を払う必要があるが。

同様に、スマートフォンの生体認証というのは脆弱な認証である。 確かに「本人しか持ちえない情報」ではあるのだが、「複製可能」であり、しかも「不正利用可能な」生体情報なので、ロングPINやパスフレーズよりもはるかに脆弱である。もちろん、4桁PINなんかよりはマシだが。

だが、これも考え方次第で、普段生体認証を使っているとパスフレーズを打つ機会が減り、ショルダーハッキングが難しくなる。 Androidスマートフォンは再起動すると生体認証が無効になるので、端末から離れるときや、端末を奪われそうなときなどは再起動すれば防衛することができる。

安全性では生体認証と秘密を用いた複要素認証を行うことが望ましいが、秘匿性、「秘密を秘密たらしめるもの」という観点からいえばそれは最善ではない。

認証を追求するコンピュータ技術

私が知る限り最も合理的で適切な認証と権限を持っているのはSSHだと思う。 もちろん、Unixシステムの認証と権限の設定が十分に堅固であることを前提としてではあるが。 あまり知られていないが、OpenSSHはPKI鍵の利用も可能である。

鍵の共有という問題はあるが、PGPも大変に強力である。 もちろん、隙なしというわけではないことは知っているが、基本的には非対称暗号というのは非常に強力なものであり、「秘密鍵が強固な対称暗号によって暗号化された非対称暗号」はほとんど本人以外は認証できないだろう。

考えられる方法としては、コンピュータと本人を奪った上で、尋問して対称暗号鍵を聞き出すことだが、そこまですれば大概の認証は無効化できるだろう。 これに加えて静脈認証のような強めの生体認証を組み合わせた多要素認証にすれば完璧なのだが、残念ながらそこまで強力な多要素認証を現実的に利用可能なシステムというものがない。

翻って現実では、「はんこを押すだけ」「サインするだけ」「物を持っていればよし」といった非常に雑な認証が行われており、実際のところ本人かどうかなどというのは全く認証できていない。 クレジットカードですら、その認証は極めて脆弱である。

これらの認証を支えているのは、運用であるが、実際のところ私は荷物をかすめ取られたり、勝手に契約されたり解約されたり…とかいろいろ大変な目にあっている。つまり、十分に運用でカバーできていない。 根本的に「本人であることを証明する」ということが社会的に非常に軽視されているのだ。

では、なぜコンピュータ上ではそこまで厳密な認証技術が発達しているのか…というと、real worldと比べて「詐称するのが簡単だから」である。 6文字英数字だの8文字英数字だのといった脆弱そのもののパスワードを採用しているところはreal world同様認証に対する意識が甘いのだと思うが、その程度のものを突破することは全く難しくなく、効力はない。

現実にはPGPは非常に強力で便利である。 PGPの話をすると大抵は暗号化の話になってしまうのだが、現実にはほとんどの場合署名として使用する。つまり、それを書いたのが本人であるということを証明するのが主な用途なわけだ。

実はその気になればPGPはメールのような限られたメディアでのみ利用できるわけでなく、例えば掲示板の書き込みなどでも利用できる。 当たり前に日常的に使いたいのだが、徳丸さんですら「今までに使ったのは1, 2度」というのが現実らしい。 ちなみに、私はメーリングリストなどでつけられる署名と、私が使うように迫った場合を除くと一度もない。 そんなものだ。

ちなみに、本気で本人認証するのであれば、マイナンバーカードには2kb長のRSA鍵が入っているため、これを使えばよいのだけれど、これは必要以上に情報を結びつけてしまうので、好ましいとは思わない。

本人認証というのは基本的にその人がある条件を満たす人と同一人物であることを認証できれば良いのであり、この定義が全て集約されなければならないわけではない。 これは、「しなければいけない」の話であって、情報がほしいかどうかは別の話だ。

例えば企業の決裁であれば、その人が決裁権を持つ人物と同一の人物であることが検証できれば良いのであり、それ以上にその人が何者であるかを知る必要は はない。

これはハンドルネームも同じ話で、「本名至上主義」は根本的に認証というものを理解していない。 ハンドルネームを「偽名」として扱うのも間違っている。ハンドルネームは「公開するための名前」であり、偽名や匿名(自身が何者であるかを隠す行為)とは同じではない。偽名ハンドルネームや匿名ハンドルネームというものが別に存在するのだ。 これは、例えば俳優の名前が芸名であってもそれが誰なのかわからなくなるわけではないのと等しい。

実際、私はもう何年もこの名前(本名)でhacker活動をしているが、別にこれが本名でなかったときに何者であるか不明だったということもない。 また、私が文筆家としてなんという名前で、声優として何という名前かということは知らない人が多いと思うが、それをつなげる必要があることは稀だろうからそれで困るということもないだろう。

本質的に認証というのはその人がある一定の条件を満たすことを証明する行為である。 その意味ではパスワード認証が通ることは認証側からすれば「本人であることを証明している」のではなく、「パスワードを知っていることを証明している」のであり、「パスワードを知っている時点で正当な利用権限を持っているとみなしている」のである。 はんこも同様に、「このはんこが押せる時点で権限を持っているとみなす」わけだが、それが適切かどうかは、また別の話である。