セキュリティってなんだろう?

企業のセキュリティシステム構築に参加していた元SEが、セキュリティについて考えてみた。

パスワードの初期状態は弱い。

ここで考えたいのは、「パスワードは西洋風と東洋風、どちらの発想に近いだろう」といこうことです。

パスワードってなくらいですから、横文字で西洋風ですか? でも「合い言葉」ともいいますよね。

パスワードは「運用しながら強くしていく(強さを保つ)」ものです。

先の例で言うと、東洋風の感じになります。

ちょっとケーススタディしてみましょう。

管理者R「Bくん、入社おめでとう。

早速だが、新人の君に会社のシステムを使うためのパスワードを教えてあげよう。

しっかり覚えておきたまえ」新入社員B「はいっ! ありがとうございます。

さっそくメモを取ります」管理者R「いかんいかん。

メモなんか取って、それを他人に見られたらどうする。

君も今日から社会人なんだから、ちゃんとビジネスマインドを持ってくれ」新入社員B「申し訳ありません。

暗記します!」管理者R「よろしい。

君のパスワードはhd3_9lwp_Qである。

忘れてはならんぞ」新入社員B「(なんかおっかない人だなあ。

でも、複雑でいいパスワードっぽいし、このまま使おうかな。

プロが作ったんだから、それがいいよな)」このパスワード運用は正しいでしょうか?BくんはRさんに怒られずにすみそうですか?Bくんの発想は、「プロが作ってくれた」→ 「間違いないはず」つまり、換言すると、「最初に用意してもらった状態が一番いいはず」→ 「下手にいじらない方がいいや」という思い込みに基づいています。

しかし、管理者の作ってくれたパスワードはそんなにいいものでしょうか? カンのいい人だったら、あまりIT システムに触れたことがなくても問題点がお分かりですよね。

そうです、この場合「パスワードを作って教えてくれた管理者は、すでにそのパスワードを知って」います。

ハガキで送られてきたものなら、郵便屋さんが見ているかもしれません。

パスワードは「自分が本人であることの証明」ですから、自分しか知っていてはいけないはずの情報です。

たとえ管理者にでもこれを知られているのはまずいのです。

「ええっ、管理者を疑っちゃうの?」と思いますか? でも、管理者による内部犯罪というのは掃いて捨てるほど頻繁に発生しています。

「権力を持った人間は必ず腐敗する」のは歴史上の定理ですが、管理者も(せまい世界ですけど)システム内の権力者ですから、むしろ一般社員より疑うべきかもしれません。

すると、最近よく出てくる次のような現象も舶に落ちるのではないでしょうか。

【ケース1】Pさん「やれやれ、やっと登録がすんだぞ。

グルメサイトが使い始められるな。

とても腹が減ったぞ」画面表示「ユーザIDとパスワードを入力してください」Pさん「よしょし、さっきゲッ卜したやったな。

パスワードっと」画面表示「このパスワードは登録時の仮パスワードです。

システムを使い始める前に必ず変更しなければなりません」Pさん「なんだと! こんなに腹が減っているのにか?嫌がらせのつもりかけ」【ケース2】Pさん「もしもし? パスワードを忘れてしまったので変更したいのですが」オペレータ「本人確認をしなければなりませんので、お客様の氏名、住所、電話番号、生年月日をお答えいただけますか。

なお、これらの個人情報はお客様の本人確認にしか使わないことをお約束いたします」Pさん「めんどくさいなあ。

住所は× × ×です」オペレータ「ありがとうございました。

それでは、新しいパスワードをご登録の住所にご郵送いたしますので、2週間ほどお待ちください」Pさん「2週間!? こんなに腹が減っているのに? この場で教えてくれればいいじゃないか!」オペレータ「残念ながら、私がパスワードを知ることはできません。

お客様の新しいパスワードはコンピュータによって自動生成され、人手を介さずに自動郵送されます」こんな状況に直面すると、つい「民間企業のくせに、お役所みたいな対応だ」とか思ってしまいますが、一応ちゃんとした理由があるわけです。

あまりオペレータさんをいじめるのはやめましょう(それでも殺意を覚えさせられるオペレータは多数存在しますが)。

・初期パスワードはすぐに変えなくちゃ。

・管理者も利用者のパスワードは知らない。

という「?」な現象の背景にはこういう理由があるわけです。

障子の美学。

ちょっと話は変わるのですが、建物の設計思想って西洋と東洋でだいぶ違うそうです(専門でないので、詳しく知りませんが)。

基本的に西洋の建物は、完成した時点での価値がピークで、それ以降はゆっくり価値が逓減していきます。

まあ、一般的な減価償却のモデルですね。

それに比べて、東洋の建物は必ずしも竣工した時点が価値のピークではなく、運用されていく中でさらに価値が高まるしくみがビルトインされているのだそうです。

端的なところでは、障子紙があります。

あれはいかにも繊細な装置ですし、完成したばっかりのまっさらな状態が価値のピークに見えます。

子供でもいたら、張り替えたその日に破られちゃいそうですよね。

(最近はそもそも障子のある家が少なくなりましたが) そこは手先の器用な日本人、家庭にはたいてい障子直しの上手なおばあちゃんがいて、花びら形の和紙なんかでメンテナンスしてくれました。

そうすると、まっさらな状態よりも「きれいになって」「価値が上がる」のだそうです。

これは、「あるしくみは、提供された状態がもっともよい状態」という昨今の考え方に染まっていると、ちょっとしたコロンブス的発想になります。

特にパソコンユlザは「W Indow sが汚れる」ってよく言いますよね。

パソコンは買ってきてすぐの状態のときはさくさく動いてくれますが、しばらくすると「なんか遅くなった」「急にブルースクリーンになって、見ているこっちまで青くなった」とかいろいろ調子の悪い部分が出てきます。

これは、ソフトウェアのインストール(組み込み)やアンインストール(取り外し)を繰り返すことによって、Windows上に余計な情報がたまっていくことなどが原因で起こります。

Windowsが悪いみたいに言われますけど、取り外しのときに、きちんときれいにして去ってくれないソフトウェアが多いんですよね。

そこで、パソコン好きは「今日はちょっと時間が空いたから、window sを再インストールしょうかな」なんて言い出すわけです。

要するに買ったときの状態に戻すわけで、こではすでに「初期状態=最善」という等式が成立しています。

2 進数や1 6進数って?

本筋とは離れますが、ところどころに出てくるので少しだけお話ししておきます。

数を表す際に数字をいくつ使いますか? それは当然10個でしょうか? 日常生活の中ではそれが当たり前ですが、別に10個の数字を使わなくてはならないと、数学的に決まっているわけではありません。

これは純粋に人間の都合によるもので、たぶん人間の指が10本あるので、抽象化するときに馴染みやすかったのでしょう。

どんな数字がキリがいいのか、というのは国によっても違うくらいです。

日本人は10とか5で(五十日なんて言葉もあります)一区切りつけるのが好きです。

硬貨も5 円・10円・50円と続きますよね。

でも、アメリカには25セント硬貨というものがあります。

同様に、コンピュータにとって都合のいい区切りの数というのがあります。

コンピュータは、「ある回路に電流が流れている・流れていない」という2 通りの数え方しかできません。

仮に「流れている=l 」「流れていない= 0 」というように決めると、2 や3 は理解できないのです。

この世界の捉え方を(数字を2 個しか使えないので) 2 進数と呼びます。

2 進数の世界では、まず0 があって、1 がきて、その次はもうケタが上がって10になります。

次は11でその次は100です。

数字が2 種類だけですから、がんがんケタ数が大きくなっていきます。

「ええっ? ふつうにコンピュータに10進数の計算をさせてるけど? 」って思われますか? そうです。

コンピュータは10進数の計算も可能です。

しかしそれは2 進数と10進数を両替して計算しているのです。

人間が10進数を入力すると、コンピュータはまずそれを「2 進数だといくつになるだろう」と直してみて、2 進数として計算します。

その計算結果( 当然2 進数で出てきます) は、人間には分かりづらいですから、10進数に直して表示するのです。

この2 進数←→10進数の変換のことを「基数変換」 といいます。

基数は2 進数、10進数の他にも、3 進数や4 進数など、なんでも考えられます。

でも、2種類あればたくさんだと思いませんか?2 進数→ コンピュータが使いやすい数字10進数→人間が使いやすい数字2 種類あればおなかいっぱいです。

でも、コンピュータを使っていると、よく16進数というのに出くわします。

なんでこんなややこしい3 つめの基数が出てくるのでしょうか。

2 進数というのは、先ほども見たように、ある数値を表すのにとてもケタ数が大きくなってしまう特徴があります。

コンピュータにはよくても、人間にはとっても読みにくい数字なのです。

「だから10進数に直すんでしょ?」 って、その通りなのですが、2 進数と10進数の相性が実はあまりよろしくありません。

例えば、4 ケタの2 進数が表せる数の範囲は、( 10進数でいう) 0~15です。

これが8 ケタになると0~255になります。

別にこれでもいいんですが、ケタが繰り上がる箇所が2 進数と10進数で、ぴったり合ってくれないので、計算がしにくいときがあります。

そこで用いられるのが16進数という、数字を16種類使う基数です。

16は2 × 2 × 2 … … という計算で得られる数なので、2 進数との相性がばっちりです。

なお、アラビア数字には、10種類しか数字のバリエーションがないので、16進数を使うときは足りない6種類をアルファベットのA~Fで補います。

0 ~ 9 までは10進数と同じですが、( 10進数でいう)15 までをl ケタで表さなければならないので、10→A、1 1 →B と読み替えるのです。

するとどうでしょうか? 2 進数4 ケタで表せる数の最大値が、1 6進数l ケタで表せる数の最大値とぴったり重なっていますね。

このように、基数変換において2 進数と1 6進数は相性がよいのです。

「2進数は長すぎて読みにくいなあ」というケースで、10進数の代わりに変換されることがよくあります。

コンピュータのエンジニアでもなければ、暗算で基数変換するような技能を持つ必要はありませんが、「そういう数字もあるんだな」 程度に頭に入れておいてください。

第2章パスワードにはなぜ有効期限があるのか?――破られることを前提とした防護システム

それでも暗証番号を使う管理者の倣慢。

こうした事実や仮説から言えることは、パスワードや暗証番号が使われている背景には以下のシナリオがあるということです。

認証のしくみは必要→それはいろいろある→作る側にとって都合のよいパスワード方式で作っちゃえ!→パスワード方式には欠点がたくさんあるぞ→利用者の努力でカバーしてもらおうこれは問題がありそうですよね。

利用者もセキュリティ事故のニュースなどで学んでいますし、サービス提供者もこのままずっとパスワード方式を使い続けるわけにはいかないでしょう。

しかし、今すぐにパスワード方式がなくなるとはもっと考えられないので、差し当たって利用者の側としては、パスワード方式の本質を踏まえた上で上手に付き合っていくことが求められます。

「暗証」という言葉には、仏典から来た「不立文字の意味を誤解する」「経典の研究をおろそかにする」という意味もあります。

「なんせ大企業や官庁が導入しているシステムだからな! 暗証番号さえ登録しておけば安心だ!」などと思っていると、仏典が示すように、せっかくの努力にもかかわらず財産を失ってしまった、なんてケースも出てきます。

ものの本質が見えにくい世の中ですが、自衛のために最低限の知識を身につけられるといいですね。

6ケタの国もある。

そんなに簡単に決まっていいのか?と疑ってしまうところですが、物事が決まるときって、結構「えいや!」が幅をきかせますよね。

ちょっと昔の話になりますが、MS-DOS(Window sの前身にあたるOSです)でプログラムを開発するSEが「全体のサイズをなんとか640キロバイト以内に収めなくては!」と血のにじむような努力を繰り返したのも、もとはと言えばビル・ゲイツが「記憶容量なんて640キロバイトもあれば十分だよね」と考えたからですし、インターネット上のコンピュータの住所を表す「IPアドレス」が足りなくて大変なことになっているのも、最初に設計した人たちが「43億個も作れるんだよ。

十分十分! インターネットなんて普及するかどうかも分からないのに」って考えたのが苦労の始まりです。

まあ彼らを責められないですけどね、IBMの社長だって「コンピュータというものは売れたとして……世界中で5台くらいかね」なんて予測していた時代があったわけですから。

とにかく、こうした決めごとは一度成立してしまうと、後発のメーカやエンジニアもそれを参考にするので、なんとなく思考が「暗証番号って4ケタなんだよな」と規定されてしまいます。

また、実際に先行して作られたCD機と互換性を持とうと思ったら、後発組も4ケタにしないといけないわけで、「暗証番号=4ケタの数字」という社会通念(IT屋さんだったらデファクトスタンダードというでしょう)が形成されていったと思われます。

ですから、実際のところ暗証番号は4ケタでなければいけないような縛りは何もありません。

後発組の中国や香港の銀行では、キャッシュカードの暗証番号は6ケタで運用されています。

ですから、「暗証番号が4ケタ」という金科玉条にはなんの神話もありません。

キャッシュカードの利用というのは、極めて危ないタイトロープを毎日繰り返しているようなものなのです。

仮説と検証。

イギリスやアメリカはどうやって4ケタって決めたの?という問いにはいくつかの仮説が挙げられています(正解は開発したエンジニアの頭の中にあるんでしょうけど)。

推理して楽しんでみましょう。

1、当時のキャッシュカードは容量が小さく、4ケタしか入れられなかった。

あるいは、4ケタってコンピュータにとってキリのいい数字なんでしょ?違いますね。

キャッシュカードには将来の機能拡張にそなえてパデイング(空き領域として指定)されているエリアがあります。

暗証番号をもっと長いケタ数にしたかったのであれば、パデイングエリアを減らすことで、5ケタでも6ケタでも容易に対応することができました。

また、4ケタというのは確かにコンピュータと相性のよい数字なのですが(コンピュータと相性のよい数字は2のn乗で得られます)、それは2進数や16進数など、コンピュータが本来扱える数字でのお話です。

10進数の4ケタというのは、コンピュータの処理上はまったくキリがよくありません。

2、当時は通信回線が貧弱だったので、4ケタ以上にするとデータのやり取りに時間がかった。

計算してみましょう。

当時の一般的な通信回線の速度はだいたい200bpsでした。

bpsというのは通信回線の速度を表すのに使う単位で「1秒間に200ビット(情報量の単位)の情報を送れる」ことを意味しています。

一方でキャッシュカードでは、1ケタの文字を表すのに128ビットの情報を必要とします。

すると、512ビット(4文字分)÷200bps=2.56秒768ビット(6文字分)÷200bps=3.84秒確かにケタ数を増やすと時間がかかっています。

仮に6ケタにすると、2.56秒から3.84秒になるわけです。

うーん、微妙な数字ですね。

ただ、この仮説には落とし穴があります。

最初に暗証番号が設計されたときのCD機は「オフライン型」だったので、ネットワークを通じたデータのやり取りは発生しないのです。

もちろん、設計者がいずれオンラインになることを見越して待ち時間を少なくするように設計したのかもしれませんが、この仮説もちょっと弱そうです。

3、CD機の処理能力が貧弱だったので、4ケタしか扱えなかった。

これは論外です。

実際、口座番号などではもっと大きいケタ数を扱って演算しています。

この説はいくらなんでも当時のコンピュータをバカにし過ぎです。

ただ、「4ケタなら4ケタで、なんで数字だけにしたんだ。

アルファベットなんかもまぜてくれれば、作れる暗証番号のバリエーションが増えてもっと安全になったのに」という怒りへの回答はここで得られます。

すなわち、「CD機にフルキーボードなんて付けたら大きくなって見苦しく(タッチパネルなんて普及していなかった時代です)、設置コストもかかるから」です。

先ほども述べたように、キャッシュカードの磁気ストライプには、数字の他に文字や記号も記録することができるようになっています。

セキュリティの観点から言えば、当然これらも使えるようにして、より暗証番号を特定しにくいようにするべきです。

しかし、そのためのコスト上昇は避けられないので、当時の感覚とすれば、安全性が下がることにより発生するコスト<フルキーボードのCD機を用意するコストだったのでしょう。

こうした断片を統合していくと、なんとなく「暗証番号4ケタ化」のシナリオが浮かんできます。

技術者A「こんど自動現金支払機のシステムを設計することになったんだ。

画期的で面白いんだが、暗証番号を何ケタにしょうか」営業「システム的な制限は何ケタなの?」技術者A「将来の用途に使えるよう、開けてあるエリアがあるから、その気になれば10ケタでも20ケタでも」営業B「ダメダメ。

そんなに長くしたらお客が怒り出すよ。

8ケタ? いやいや、まだまだ長いな。

人間がぱっと覚えられる数値の上限ってだいたい7ケタだっけ。

電話番号がそうだもんねえ。

でも、CDはお年寄りも使うんだよ。

もっと短くしなきゃ、結局窓口に聞きに来て業務の効率化にならない。

そうだ、4ケタ! 4ケタにしよう」(←ここで4ケタの仕様固まる)技術者A 「ええっ、4ケタ? そりゃ、ちょっと短いんじゃ?まあでもアルファベットも組み合わせればそれなりのバリエーションになるか」営業B 「アルファベットぉ? おいおい、CD機にキーボード付ける気かい? 冗談じゃないよ。

CD機が大きくて高くなる! それを設置する土地代だってあるんだぞ。

許せるのはテンキー、テンキーまでだ」(←ここで数字しか使えない仕様固まる)技術者A「そ、そんな。

数字だけじゃ全部で1万通りしかない!」営業B「いや、4ケタだよ4ケタ! これ以外にない。

4ケタだったら子供だってお年寄そらりだって諳んじられるよ。

そう! 自分の誕生日は4ケタの数字になるじゃないか! みんなこれを使うよ! 分かりゃすい!」(←誕生日の脆弱性織り込まれる)

4ケタに決まった経緯

ちょっと検証してみましょう。

キャッシュディスペンサー (CD=現金自動支払機)の発祥は昭和必年にまで遡ります。

イギリスのバークレイズバンクが6店舗で導入したのを皮切りに、各銀行で実用化の機運が高まります。

当時はちょうど週休2日制の導入が真剣に考えられていたので、「顧客の利便性を下げないための切り札」としてCDはうってつけだったのです。

そして、このCD 発祥の当初から4ケタの暗証番号が使われていたのでした。

国内では住友銀行(現・三井住友銀行) が先鞭をつけて、昭和44年にオフラインCDを導入。

やはり4ケタの暗証番号が使われています(一号機はテンキーではなくダイヤル式)。

オフラインCDというのは、CD 端末が銀行の中央コンピュータと接続されずに単独で動く形態を言います。

システムとしては単純で運用しやすいのですが、預け入れをしている支店でしか使えないので、まもなくオンラインCD (中央コンピュータと接続されており、どの店舗でも同じキャッシュカードが使える) への移行が進みました。

また、昭和52年になると、振込などもできるAT Mが登場してきます。

そうすると、「違う銀行からでもおろしたいぞ」というニーズが生まれてきました。

それまでのオフラインCD、オンラインCDは、各銀行がCD メーカの提案するCD 機を購入する、あるいは共同で開発する、という形で運用されていたので、キャッシュカードに記録されているデータはまちまちでした。

これを統一しないと銀行間でのオンラインCD取引はできないので、各銀行が話し合ってキャッシュカードに記録する磁気データの共通フォーマットを作りました。

これが昭和47年のことです。

この共通フォーマットは現在でも使われているJIS-Ⅱ型というものです。

昭和47年というのは、世界標準の共通フォーマットが作られる前ですので、「ずいぶん先見の明があったなあ」と思います。

もっとも、CD機設置で独走する三菱銀行(現・東京三菱銀行) に待ったをかけたい各銀行の謀略だ、という噂もありましたが(三菱独自のCD機設置が進んでいたので、共通フォーマット用に作り直すとしたら、一番損をするのが三菱銀行になる)。

ちょっと脱線しますが、高度成長期以降の日本には資金も技術もあったので、「世界標準が作られる前に独自の技術で作り始める」ということが、他の技術分野でもありました。

チャレンジングで素晴らしいと思います。

で、せっかく先行したのだから、それをそのまま「世界標準」にするようにロビー活動すればいいのですが(お手製の技術が世界標準になれば莫大な利益が上げられます) 、日本は異様にこのロビー活動が下手なので、たいてい違う形で世界標準規格が定められます。

そうすると「世界の趨勢に合わせなくちゃな」ということで、せっかく先行投資していた機材を作り直すことになります。

一方で、後発の国々は世界標準が決まった段階で参入してくるので、作り直す手間もかかりませんし、無駄な投資もありません。

「日本が先行したはずなのに、いつのまにか列国の後塵を拝している」のはこうしたわけがあります。

話を元に戻しましょう。

この「共通フォーマット」では、1、キャッシュカードの磁気ストライプには、72ケタの文字が入る。

2、ここでいう「文字」には記号や数字、アルファベットが含まれる。

3、8ケタ目から11ケタ目に銀行番号を入れよう。

4、12ケタ目から15ケタ目は支店番号だ。

といったことが定められています。

で、暗証番号については「4ケタ目から7ケタ目に入れよう」と決められました。

このときに「暗証番号4ケタ」が全国的に定まった、と一言えます(その後、直接キャッシュカードに暗証番号を入れちゃ危険だよ、ということになって、昭和63年からは入れなくなりました。

)。

じゃあ、この「共通フォーマット」を作った人が悪いのか?というとそうでもありません。

共通フォーマットは、すでにCD機の設置が進んだ状態で議論されたので、既存のCDシステムの影響を強く受けています。

既存CD機は、研究が先行していたIBMなどに雛形を求めることができるので、「やっぱりお得意のアメリカに右へならえか?」という線が濃厚です。