たぬきのためふんば

ここにはめたたぬきが糞をしにきます。

パスワードの桁数を公開することにはどの程度の影響があるのか

 2022年6月23日、尼崎市が個人情報の含まれているUSBメモリーを紛失したと報道発表した。

 業務を委託していた会社の従業員がUSBを持ち帰り、飲み食いしてるうちにどっかに行ってしまったというよくある事案である。

 ここまでならよくある大問題である。この件が普通じゃないのが、そのUSBに含まれていた個人情報はなんと全市民のものだったということだ。何人分だろうと個人情報流出個人情報流出で、あってはならないことに違いはない。が、注目度は否応なしに高まる。

 そんな注目の集まる記者会見の場で、記者との質疑応答の際、市の職員がなぜかパスワードの桁数と文字種を明らかにしてしまったのだから大変だ。パスワードに関する情報を述べること自体が情報セキュリティ上の大問題であると、ツイッタラーたちは大いに喜んだ。

 ググって上位に出てくるサイトからテキトーにチョイスしてリンクを張っておくので、詳細はそちらを見てほしい。どこも書いてあることは大して変わらない。

USBメモリ紛失の尼崎市、記者会見でパスワードの桁数暴露 ネット騒然 「悪例として最高の手本」 - ITmedia NEWS

最有力は「amagasaki2022」?尼崎市の紛失USBのパスワードで大喜利合戦(女性自身) - Yahoo!ニュース

尼崎市のUSB紛失問題でパスワード桁数を市が公表 | アゴラ 言論プラットフォーム

 現時点で一番詳しいことが書いてあると思われるのは、やはり一次ソースの市HPだ。

www.city.amagasaki.hyogo.jp

 

 まあはっきり言って私にとってはどうでもいい話である。

 私は尼崎市民ではないし、絶対に個人情報の入ったUSBを持ち出さないし、パスワードが何桁で文字種が何かも絶対に言わないからである。

 しかし、どうしても気になることが一つだけある。

 いったい、パスワードの桁数を公開することにはどの程度の影響があるのだろうか?

 これを数学的に明らかにしていきたい。

 というと大仰に聞こえるが、私は文系なうえに数学の勉強をしなくなって久しい。簡単な計算しかできない。それにコンピューターセキュリティの専門家でもアマチュアでもなんでもないので、難しいことは考えないことをあらかじめ述べておく。

パスワードは何回の試行で確実に突破されるのか?

 パスワードは総当たり攻撃によって解読されるものとする。なお、総当たり攻撃はブルートフォースアタックと呼ぶとクールである。

総当たり攻撃 - Wikipedia

 名前で分かるとおり、パスワードの候補を全て試してセキュリティを突破する手法である。この場合に要となるのは、パスワードの候補数だ。

 USBのパスワードは英数字で構成されているらしい。候補数が少なくなるように、使える文字種は数字0~9の10文字、英字a~zの26文字(大文字はないものとする)の合計36文字として計算をしてみよう(大文字も使えるとした場合、数字はより大きくなるということだ)。

36^n

 候補数を計算していく。

 桁数が定められている場合、桁数をnとすると、パスワードの候補数は36のn乗となる。

 と言われても、ピンと来ない人がいるかもしれない。具体的に見てみよう。

 パスワードが1桁の時は、0~zの36通りである。

 パスワードが2桁の時は、36×36=36^2=1,296通りとなる。2桁目が36通りあって、1桁目が36通りあるからこうなる。

 この時点で人間なら相当根気強くないと諦めてしまいそうだが、コンピューターにとってはこんなもの1秒足らずで突破できるだろう。

 パスワードが3桁の時は、36^3=46,656通り。

 という具合である。

 パスワードが13桁の場合は、36^13通りとなる。これがどのくらいの数字かは後述する。

等比数列の和

 さて、何も情報がない人間が尼崎市のUSBを突破するのに何回試せばよかったかを計算するのには、これだけでは不十分である。

 その者には桁数の情報がないからだ。総当たり攻撃をするなら、まず一桁のパターンを試し、次に二桁のパターンを試し……という具合にやっていくだろう。

 パスワードが13桁なのであれば、1~12桁までやってみなければならない。

 つまり、彼が試さなければならないパターン数は以下のように求めることになる。

36+36^2+36^3+36^4+……+36^13

 なにやら難しそうだが、これは等比数列の和を求めるのと一緒だ。つまり、公式がある。等比数列の和の公式は以下のとおり。

Sn=a(r^n-1)/(r-1)

 aは初項、rは公比、nは項数だ。今回は初項36、公比36、項数13の等比数列なので、

S13=36(36^13-1)/35

となる。

桁数暴露によってどれだけ候補が減ったのか

 さて、36^13だの36(36^13-1)/35だの言われてもまるで分からない。

 これはどれくらい大きな数字なのだろうか? 電卓でもグーグル先生でもこれだけ大きい数字の計算はやってくれないので困りもんである。しかし、ネット上にはちゃんと大きな数字用の計算機を上げてくれている人がいるものである。ありがたく使わせてもらおう。 

大きい数値の計算機 - instant tools

 これによると

36^13=170581728179578208256

となるそうだ。全く分からないので、カンマを付けてみよう。

170,581,728,179,578,208,256

 カンマがあるごとに、サウザンド(千)、ミリオン(百万)、ビリオン(十億)、トリリオン(兆)となるから、これなら一瞬で読めそうだ。

 ……兆の上に二つもカンマがある!! これでは私の英語力では如何ともし難い。

 仕方がないので、日本語対応のカンマを打とう。

1,7058,1728,1795,7820,8256

 これでようやく分かった。36の13乗は、1垓7058京1728兆1795億7820万8256だ。

 では桁数を教えたことで候補から外れたものはどれくらいあるのだろうか。

S12=36(36^12-1)/35

 なので(さっきは13桁までの全てのパターン数を求めたが、ここから13桁を除外するということは、12桁までの全てのパターン数を求めるということである)、

36^12=4738381338321616896

36^12-1=4738381338321616895

36(36^12-1)=170581728179578208220

36(36^11-1)/35=487,3763,6622,7366,3092

 487京3763兆6622億7366万3092だ。

 面倒なので、17058と487で計算すると、合計は17545である。このうちの487がなくなることは、全体の2.8%が失われたに過ぎない

 ちなみに、長々と計算してきたが、S(n-1)/Sn={r^(n-1)-1}/r^n-1で、r^nが十分に大きければ1は無視してもそう大きな影響はでない気がするので、r^(n-1)/r^n=1/rでも近似値は出せそうだ。1/36=0.277……なので、桁数が増えるほど2.77%に近づいていく。上では2.8%に丸めているが、実際は2.7757……%なので、どれだけ桁数が増えようが桁数を確定することで候補から外れるものの割合はほぼ変わらない(はず)。これは文字種が62であれば(=大文字もあるのであれば)、1.6%、文字種が90であれば(=記号ありであれば)、1.1%になる。

どれくらいの時間がかかるのか

 この13桁のセキュリティを突破するのにはどのくらいの時間がかかるのだろうか?

 上にリンクを張ったウィキペディアのページによると、英字(大文字、小文字区別)+数字の場合、以下のとおりのパターン数となる。

8文字:218,340,105,584,896通り

10文字:839,299,365,868,340,224通り

 8文字から10文字で3844倍になっている。

 総当たり攻撃によってどれくらいの時間でパスワードが解析されるのかを、IPAが試験した結果も記載されている。英字(大文字、小文字区別)+数字の場合、次のとおりだ。

8文字:約50年

10文字:約20万年

 8文字から10文字で4000倍になっている。

 3844と4000なのでだいぶ近い。

 というわけで、ここでは仮に、コンピューターは1年で

218,340,105,584,896/50=4,366,802,111,698通り

 を試すことができるものとしよう。どうせ雑な計算にしかならないのだから細かいことは気にしないことにする。

170,581,728,179,578,208,256/4,366,802,111,698=39,063,306

 というわけで、13桁のパスワードをブルートフォースアタックで突破するには、3906万年かかる。

コンピューターの進化について考えてみる

 ところで、ムーアの法則というものがある。

ja.wikipedia.org

集積回路上のトランジスタ数は「2年ごとに倍になる」というもの

という感じのアレらしいのだが、ぶっちゃけ私にはこれが何を意味するのかあまり良くわからない。

 とりあえずコンピューターの進化は速いみたいなので、仮にコンピューターが時間あたりに試せるパターン数は一年で2倍になると仮定してみる。

 2を底とする39,063,306の対数は25.22のようなので、25年たてば13桁のパスワードも1年ぐらいで突破できるようになることになりそうだ(受験生時代から対数は好きじゃなかったので計算に不安があるが……)。上に挙げたIPAの試験は2008年のものなので、14年経っている。2^14倍も性能がアップした今のコンピューターの性能なら13桁でも2000年くらいあれば突き止められるだろうか。

 まあ、コンピューターの性能が一年で倍になるという仮定にどれくらい妥当性があるのかまるで分からないので、この話は全く参考にならない。

 スパコン量子コンピュータなら今でも簡単に計算できるかもしれないが、普通の人は持っていないので考えなくていいだろう。そこまでのコンピューターでなくても、分散コンピューティングやらがなんかどうにかすると凄い力を発揮するっぽいが、詳しくないので何もわからない。まあ、最新の平均的なPCでも頑張ればわりと短期間で突破できる可能性はあるのかもしれないとだけ思っておこう。

運良く短期間で突破できる確率

 パスワード解析には3906万年かかるという設定に戻そう。

 最大でそれくらいかかるとしても、運が良ければ早くに解析できることはありうると考える人もいるかもしれない。

 仮にマックスで3906万年かかるとした時、100年以内にパスワードを発見できる確率はどのくらいなのであろうか。

 これはシンプルに100/39060000と計算すればよかろう。答えは0.00025601638%である。仮にあなたがこの年末ジャンボよりはマシな確率の宝くじに当選して、100年前の尼崎市民の個人情報を入手できたとしよう。しかし、その頃にはあなたは死の淵に立っている。その老体で、この情報を使っていかに稼ぐかを考え、捕まらないよう実行に移さねばならない。普通にマックでバイトした方がはるかに得るものは大きそうだ。

とにもかくにも

 よくわからん話を盛り込んでごちゃごちゃしてしまったので、話を戻そう。

 とにもかくにもパスワードが13桁であることをバラすことは、悪意の人物の労力を2.8%削減したのと同義である

 ところで、令和4年3月31日の尼崎市の人口は459,261人だ*1。令和4年4月1日現在の日本の人口は12519万人である*2から、日本の人口に占める尼崎市民の割合は0.366851186%である。私は先ほど尼崎市民ではないと述べたが、これは住んでいる市区町村が特定されるリスクを高める発言だ。これを尼崎の事例に当てはめると、「私は横浜市民ではない」と言うくらいのことを尼崎市は言ったわけだ(日本の人口の2.8%が約350万人で、横浜市の人口が約370万人なので)。

 2.8%を大きいと思うか小さいと思うかは人によるだろう。

 個人的な感想としては、もしブルートフォースアタックによってこのパスワードが解析されるのであれば、そもそも英数字13桁のパスワード自体が危険なのである。責めるのであれば、桁数を漏らしたことではなく、わずか13桁であることか、記号を用いていないことを責めた方が市のセキュリティ向上にとっては有益ではないだろうか。

言い訳

 ここまで桁数のみに着目して議論を進めてしまったが、よく考えたら何も知らない悪意の人物は、文字種が90を超えるかもしれないという前提のもとに取り組むことになる。

 そこまで考慮すると、尼崎市の発言による絞り込み率はわりと無視できないレベルにまでアップする気がする。62/96≒0.65の13乗分だけ絞り込まれることになるとすると、本来ありえた候補数の約0.369%まで候補数を減らしてしまった?

 ……疲れたのでもう計算し直したくない。いずれにせよ36の文字種&13桁のパスワードでも解析にかなり時間がかかるであろうという結論は変わらないし、妥協することにする。それに文字種は入力する段階で分かるようになってる気もする。タイトルにも「桁数」としか書いてないし。

 とりあえず文字種すら分からない状況下においては、桁数をバラしたことより、文字種をバラしたことの方が大きな意味を持ちそうだ。

注意

 上で展開した計算は、あくまで桁数をバラすことのリスクがどれくらいなのかを計算してみたいという欲望に基づいて行ったものである。

 したがって、尼崎市完全にランダムにパスワードを設定していることを前提に書いている。別にこれは無理のある前提ではない。市民の個人情報が入れられるかもしれない記憶媒体だ。パスワードの安全性には配慮しているに決まっている。そうでなければ会見で桁数を述べたりはしないだろう*3

 しかし、現実には、ランダムにパスワードを設定する人ばかりでないこともたしかだ。そうなるとパスワードの候補数は一気に狭まる。そこに13桁という情報を与えればなおのことだ。(そこまで織り込んだ影響を計算するのは完全に私の能力を越えている。)

 ランダムにパスワードを決定した場合も、それをどう覚えるかという問題がある。USBとパスワードのメモを一緒に管理していたら、パスワードが何桁であろうと意味がない。むしろ桁数を増やし、文字種を増やした分だけ覚えることは困難になり、「メモをわかりやすい場所に置いちゃう」リスクは高まるだろう。二律背反である。

 セキュリティリスクを完全に潰すというのは簡単ではない。『暗号解読』にもたしか、ドイツ軍がランダムなキーワード設定を怠ったことでエニグマ暗号が解読される日もあったと書かれていた(解読機が開発される前に)。戦争中のドイツ軍でさえそのようなヒューマンエラーが起こるのだから、平時の一般人が管理を徹底するのはなおのこと難しい。余計なことは言わないに限る。

 ので、尼崎市がパスワードの桁数をバラしたことが全く問題ないというつもりは毛頭ない。そもそも、BIPROGY(日本ユニシスという名前の方が有名だろう)が個人情報を外に持ち出した時点でアウトなのである。

 よって、あなたが自分のパスワードの桁数を言いふらして問題が起こらないと言うつもりもない

 とはいえ、パスワードの桁数をバラすということがどういう意味を持つのか(=問題の所在)を正しく理解しないで、尼崎市の職員(彼らは人間でありサンドバッグではない)を叩いている人がいたとしたら、それはあまり上品な生き方ではないだろうと思うのである。

 

 ちなみに、問題のUSBはとりあえず発見されたようである。一件落着とはいかないが、とりあえず一つ目の難局は抜けたようだ。

https://www.city.amagasaki.hyogo.jp/_res/projects/default_project/_page_/001/030/781/220624-03.pdf