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

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

暗証番号はなぜ……

話を元に戻しましょう。

暗証番号というしくみ自体が、かなりサービス提供者側の都合で作られているので、その先に位置する「じゃあ、なんで暗証番号は4ケタなの?」という疑問についても、あまり合理的な理由は期待できそうにないなあ、と思いませんか? 実際、合理的な理由はありません。

パスワードの構造的な欠陥の1つに「推測できる」という点があります。

パスワードは本人が考えて秘密にしておけば他人にはもれないはずですが、パスワードを考える本人も完全にランダムなパスワードを作れるわけではありません。

あんまりめちゃくちゃなものは自分も忘れてしまうからです。

かといって、紙に書いて持ち歩いたりしたら盗まれるかもしれません。

かくして、自分の名前や生年月日、電話番号をパスワードにする人が大量発生するわけです。

悪意のある人は、ここに付け込みます。

パスワードは秘密でも、名前や生年月日、電話番号は公開情報です。

昔のように無制限に電話帳に載るようなことはないにしても、かなりの人がこれらの情報を公開しています。

すると、パスワードは分からなくても生年月日を手に入れて、試しにそれをパスワードとして使ってみる、というやり方ができます。

たまたまその人が生年月日をパスワードにしていたら、もうその認証システムは破られてしまったことになります。

その人がとても慎重で、絶対に推測できないようなパスワードを考えていたとしても(覚えておくのにすら苦労するでしょうけど)、パスワードを見破る方法はあります。

また、有名なのが「総当たり」というやり方です。

パスワードには、一般的に使える文字種や字数の制限があります。

文字種はキーボードの制約があるにしろ、字数というのはなんでしょうか? パスワードもサービス提供者にとっては1つのデータですから、業務で使うにはデータベースに格納する必要があります。

データベースというのは、データの格納効率を考えると、なるべく入れるデータのサイズが決まっている方がありがたいのです。

少なくとも最大データサイズは決まっていないととても作りにくくなります。

なので、サービス提供者は「パスワードは何文字まで」と決めるわけです。

あまり大きくすると余分な格納領域をとってしまってコストがかかりますから、「8文字まで」なんてところも多いですね。

利用者も、「128文字まで」なんて言われでも、そんなに長いパスワードは覚え切れませんから、「まあそんなもんかな」と納得してしまいます。

言ってみれば、サービス提供者にも利用者にも優しい形態なのですが、これは犯罪者にとっても優しいしくみになります。

例えば、「パスワードにはアルファベットの小文字しか使えなくて、3文字まで」なんて決まっていたらどうでしょう?アルファベットは26類しかなくて、その組み合わせが3文字分ですから、aaaから始めてzzzまであらゆる組み合わせを試してみても、1万7576通りです。

昼休みの暇つぶしにやるにはちょっと尻込みしますが、当たりを引けばお金が手に入ると分かっていれば、そんなに大変な作業でもありません。

しかも、1万7576通りを試すというのは、とっても運の悪い最悪のケースで、確率的には8788通りも試せば、「当たり」のパスワードにぶち当たってしまいます。

「パスワードとして考えられるすべての可能性を試していけば、いつか正しいパスワードが分かってしまう」というのは、あきれるほど単純な真理ですが、パスワードを運用する上では絶対に理解しておく必要があります。

これもパスワードが持つ構造的な欠陥です。

「パスワードはなるべく長くしろ」とか「大文字や小文字、数字や記号も組み合わせて作れ」というのは、総当たりをしにくくするための警句なんですね。

それでは、暗証番号はどうでしょうか? 実はこれほど総当たりに対して弱いパスワードは類を見ません。

なんせ使える文字種は0~9まで、10種類の数字だけなのです。

しかも、最大ケタ数は4 ケタです。

これはどういうことを意味するでしょうか? パスワードとして考えられる最大の組み合わせは、0000~9999までの1万通りしかないということです! 期待値としては、犯罪者は5000回も試しに暗証番号を打ち込んでみれば、「当たり」の番号を引き当ててしまう可能性が高いのです。

これは、大事なお金を管理するためのシステムとしては、恐るべき脆弱性と言えるでしょう。

また「少なくとも4ケタというのは理論的に決まった数値じゃないの?」とか「コンピュータにとってキリのいいケタ数だから4ケタにしたんでしょ?」と言う方もいます。

しかし実際のところ、これにはさしたる根拠はありません。

暗証番号は「暗唱」番号ってなもので、「4ケタくらいだったら、お年寄りでも暗唱できるよね」くらいの思考が働いた結果のケタ数です。

なぜかシンプルにならないシステム。

さて、システムは単純な方がいいというのはお分かりいただけたでしょうか。

今までの講義を集約すると、3つの利点があります。

1、作りやすい。

2、直しやすい。

3、設計した人が辞めたり死んだりしても、他の人が後を継げる。

「言われなくても分かってるわい」という方が多いと思います。

アムロだってガンダムに乗る前からこの原則を口にしていましたよね。

でも、どういうわけかシステムというのはシンプルにならないものなのです。

典型的なストーリーは2つあります。

多くの人がよってたかつて作り上げるシステムでは「シンプルに、簡単に」という「簡単なはずのこと」を実現するのが非常に難しいのです。

最近流行のプロジェクトマネジメントなどは、換言すれば、「目標を達成するしくみをどれだけシンプルにできるの?」という試みに他なりません。

上司に「キスしよう」と言われたら逃げますか?

「作り方」の話題が出たところで、システム設計の基本について、少しだけ触れておきましょう。

暗証番号のしくみに限らず、システム設計の基本的な考え方は、「とにかくシンプルに」です。

日本人の多くは、「エレガントで精績なシステムが流れるように」動いてくれるのが好きだというメンタリテイを持っているように感じます。

実際、私自身もアクロバティックなしかけを織り込んだプログラムが動くとあやしい興奮を覚えます。

しかし、趣味の範囲を超えて実用的なシステムを構築するのであれば、その「しくみ」は簡単で誰にでも理解できるようになっていなければなりません。

同じ仕事がこなせるAとB のしくみがあるとき、複雑で高性能なAとシンプルでやや性能の劣るBという比較では、B を選択するのがシステム設計のセオリーです。

例えば、太平洋戦争で使われた戦闘機で対照的なのが日本の零戦とアメリカのF6Fです。

零戦は優美な曲線で構成された芸術品のようなシルエットを持っています。

それに対して、零戦に対抗するために作られたF6 Fは、板金をそのまま貼り合わせたようなカクカクした機体でとっても無骨です。

この2機種の性能比較はマニアックな話になってしまうので、ここでは互角と仮定して「さて、あなたが指揮官だったらどちらを選びますか?」というお題です。

私だったら、(個人的には零戦が好きなんですけど) F6Fを選びます。

零戦の機体は素人目にもいかにもデリケートです。

工場で作るときも熟練の職人さんが仕上げるんだろうなぁとか、前線で故障したら修理するのが大変そうだなあとか、苦労する様が容易に自に浮かびます。

よくも悪くも職人さんお手製の一品ものなのです。

それに対してF6Fは、見た目全然かっこよくないんですけど、見るからに大量生産に向いていて、故障しても直すのがものすごく楽そうです。

工学部の学生でもちょろっと動員すれば作れそうな感じです。

機械というのは動いてナンボですから、「できるだけ簡単に」作っておきたいわけです。

この思想を端的に言い表しているのが「KISS principle」です。

軍隊でよく使われるスローガンですね。

KISSとは「Keep It Simple,Stupid」の略語で(単純にやれって言っただろ、この野郎!) くらいのニュアンスでしょうか。

むくつけきマッチヨな軍人たちが「次の作戦はキスの原則で!!」「きみはキスがうまくできないから負けるんだ」なんて言ってるかと思うとちょっと冷たい汗が滴り落ちますが、特殊な意味はありませんので安心してください。

MBA本にかぶれた上司が「次のプロジェクトではぜひキスを……」などと言い出してもあわてる必要はありません。

パスワードは管理者にとって都合がいい。

パスワードが認証方法として完壁か?というと、全然そんなことはありません。

パスワードによる認証は、「知っている=本人、知らない=他人」という単純な公式に則って行われます。

この公式が不変の事実ならよいのですが、パスワードというのは「知識」ですから、いくらでももれるものです。

「知識」という無体物によって認証を行うというのは、ある意味で鍵や通行証などの有体物で認証を行うよりもやっかいな側面を持っています。

鍵や通行証は悪用しようと思ったら、少なくとも盗んだり複製したりしなくてはなりません。

悪意のある犯罪者にとっても努力が要求されるわけです。

しかし、知識には形がありませんから、利用者の何気ない一言から他人にもれてしまうことが多々あります。

また、その伝播速度もたいへん速いのです。

これはパスワード方式の認証が持つ構造的な欠陥と言ってよいでしょう。

現在主流のパスワード・暗証番号はこのように、非常に脆弱な構造をもった認証方式なのです。

詳細は後述しますが、構造的な欠陥をなんとか回避するために、「パスワードは長大で複雑怪奇にしなければならない」やら「一度決めたパスワードは定期的に変更しないとダメだ」「いくつかパスワードを使う場合は、全部違うものにしなきゃ」「メモに書いたりしちゃダメで、全部暗記しないとね」「それができない場合は、銀行は知りませんよ。

責任は利用者にあるんだからね」という各種の制約ができてしまったのです。

つまり、皺寄せはみんな利用者に集中するしくみなのです。

では、なぜこんな方法が金融機関をはじめ各種のネットワークシステムなどで使われているのでしょうか? これはひとえに作成者側の都合によるものです。

認証のためのしくみは、利用者の利便性や安全性を慎重に考慮すると、たいへん高価なものになります。

サービスの提供者としてはコスト上昇は避けたいので、コンピュータと相性のいい、つまり何か特別な機械などを必要とせず、ソフトウェアをちょろちょろっと変更するだけで実現できる認証システムをいろいろ考えたわけです。

そこで、一番手聞がかからずコストが低かったのがパスワードということです。

暗証番号はそのパスワードの中でも、「合い言葉に数字しか使えない」というさらに制約の多いしくみですから、ものすごく銀行本意の作られ方をしていることがお分かりいただけると思います。

なぜ暗証番号が選ばれたか?

なぜ暗証番号が選ばれたか?

「認証」ができればなんでもいいはずなのに、なぜこぞってすべての銀行が暗証番号を使っているのでしょう? その前にパスワードと暗証番号の違いを明らかにしてしまいましょう。

古来から使われている認証のしくみ、「符牒」や「合い言葉」とすなおに結びつくのは、「パスワード」です。

これは直訳ですね。

ただ、現在のセキュリティ用語でいう「パスワード」は、その言葉を音声として発するわけではありません。

キーボードから入力するのが前提になっていますから、キーボードにないような文字は使えません。

これは人間と機械の聞を取り持つインタフェースによる制約です。

暗証番号もパスワードと本質は同じなのですが、使える文字種がさらに制限されています。

なぜかというと、初期のATM端末ではフルキーボードを備えることが、技術的・コスト的に難しかったからです。

パソコンに装備されているようなフルキーボードを各ATMに設置するのと、数字だけのキーボード(テンキーと言います) を各ATMに備えるのとでは、コストが確実に1ケタ違ってきます。

ですから、「暗証番号は数字しか使えないパスワードのことなんだなあ。

でもって、その制約は銀行側の都合でそうなってるんだぞ」と考えていただいて結構です。

「暗証番号とパスワードの違い」を踏まえた上で、認証に話を戻しましょう。

本来、このステップで銀行がしなければならないことは、「この人が本人だよな」と硲認する「認証」です。

パスワードは認証の1つのやり方ですが、他にもいろいろ方法があります。

例えば、車ではキーを使って認証をしていました。

これも、「キー は本人しか持っていないはず」→「持ってるんだから、本人だよなあ」ということで、一応認証にはなっています。

しかし、盗まれた場合には無力ですし、またAT Mというのはキーのような物理的なしくみを使うのには適していない装置です。

車は自分の専用品なので問題ありませんが、AT Mはみんなが使いますよね。

ですので、キーの形状で1人1 人を認証しようとしたら、潜在的な利用者すべての鍵穴を作っておく必要があります。

そうすると銀行で使われるAT Mのデザインは、鍵穴だらけの蜂の巣状になるでしょう。

そんなAT Mちょっと嫌ですよね。

だったら、まだホテルの磁気カーキーように、キャッシュカードそのものをキーに見立てた方がいいです。

キーというハード(物理的なもの) ではなく、キャッシュカードに格納された磁気情報で認証を行いますから、少なくとも鍵穴だらけのATMは作らなくてすみそうです。

しかし、先ほど述べたように、キャッシュカード=キーにしてしまうと、識別と認証を1つのステップで行うことになり、キャッシュカードを落としたりした際に一気にお金を持っていかれるはめになりそうです。

これは嫌なので、認証のしくみとしてパスワードを導入し、識別とやり方を分けたんです。

少なくとも、識別= 認証のしくみよりは安全そうです。

暗証番号は何がしたいのか?

暗証番号は何がしたいのか?

まず、サービスを提供する側(銀行)は暗証番号で何がしたいのでしょうか? 利用者からすれば、あんなものはないに越したことはありません。

めんどくさいですから。

「岡嶋です。

お金をおろさせてください」「ああ、岡嶋さんですね。

いつもありがとうございます。

いくらでも持ってってください」とやってくれれば、スムーズで気分がいい気がします。

銀行だって民間企業ですし、利用者の満足度を(あやしいもんですけど)高めようとしていますから、いじわるであんなことをしているわけではありません。

ちゃんと理由があるはずです。

ここでは、その理由を考察してみましょう。

先ほどのようなサービスの仕方では何がいけないのでしょうか? これはちょっと考えれば自明ですよね。

「○○ですけど、お金おろしていいですよね?」「もちろんです。

がんがん持っていってください」「(いひひ、ほんとは俺、後藤だもんねごなんてケースが出てきてしまいます。

こうした不正行為を防ぐために、銀行がしなければならないことは3つあります。

1、まず、ATMにやってきた人が、ちゃんとその銀行に口座を持ってお金を預けている人か確かめること。

2、口座を持っている人と、今、引き出しにきている人が、ほんとに同じ人か確認すること。

3、いくらまで引き出していいかコントロールすること。

ATMで行われていることは、この3つを軸に回っています。

1と2について詳しく見ていきましょう。

1、まず誰がやってきたのか見分けるATMの最初の仕事ですが、まずは誰がやってきたのか見分けなければなりません。

中には口座も持っていないのに「金を出せ」なんて言い出す図々しい人がいるかもしれませんから、「こいつは誰だ?」とチェックを入れるのがファーストステップです。

窓口だったら、預金通帳を差し出すところですし、小さなブランチ(支店)だったら係員が顧客の顔を見ただけで「○○さんだ」と気がつくかもしれません。

ATMはまだ顔相を見分けられるほど賢くないので、磁気ストライプやICチップに記載された口座番号で「○○さんだな」と見分けています。

つまり、預金通帳やキャッシュカードに織り込まれた口座番号で、人の区別をしているわけですね。

この作業をセキュリティの世界では「識別」といいます。

2、次にその人がにせものでないのか確かめるさて、「識別」ができたらそれでお金を渡していいでしょうか?不思議なことかもしれませんが、ここで「いい」としてしまうこともできます。

ええっ、と思いますか? そうですよね。

ひょっとしたら、そのキャッシュカードは落としたり盗まれたりしたもので、持ってきた人=口座にお金を預けている人とは限らないですものね。

でも、例えば車のキーはどうでしょう? あるいは家の鍵でも構いません。

想像してみてください。

あれは、識別の機能を持っています。

「持っている」という事実が、家のメンバであるということを示しています。

家族でなければ鍵を渡したりしませんから、これはいいですよね。

問題なのは、鍵があれば家の中に入れてしまうことです。

「持っている=家人」なんだからいいでしょ、と思うところですが、先の例にもあるように、鍵は盗まれたり置き忘れたりします。

「最初に鍵を渡された=家人」は成立しても、必ずしも「今鍵を持っている人=家人」とは言い切れません。

車のキーや家の鍵は、この2つの要素を合わせてしまっているので、=「セキュリティシステムの崩壊」になってしまうのです。

銀行はお金の出し入れが本業ですから、この点に関してもうちょっと慎重です。

すなわち、「キャッシュカードを持ってきたからといって、本人とは限らないよね」という疑りの姿勢が業務に組み込まれています。

大事なお金を低金利で預けてるんですから、そのくらいはやって欲しいところですが、銀行側の視点に立つと「どうやって本人だと見分ければいいんだ?」という大問題が発生します。

「顔で見分けよう」なんて方法もありますね。

これは先ほどの「識別」とセットで行えます。

これも非常によい方法ですが、村民加入の郵便局。

みたいな環境でないと難しいかもしれません。

そ・こ・で、出てくるのが「暗証番号」なのです。

「顔を覚えきれないんだったら、本人にしか分からない秘密のことばを設定してもらおう。

お金を引き出すときはそれを答えてもらえばいい。

本人しか知らないんだから、本人だということが確認できるぞ。

なんでいいアイデアだ!」なんて言ったかどうかは分かりませんが、そう考えた人がいたわけです。

ただし、これは特別独創的なアイデアというわけではありません。

「山と言えば川」に代表される、符牒やら合い言葉は昔からありました。

これを応用したのが、現代の暗証番号と言えます。

「今、お金を引き出そうとしているこいつは、ほんものだと思っていいのか?」を確認するステップなんですね。

セキュリティ用語では、「認証」と言います。

ポイントになるのは、銀行や利用者がやりたい(やって欲しい) のは認証という行為であって、暗証番号の確認はその手段でしかないということです。

「認証」ができればその手段は本当はなんでもいいのです。

「認証がしたい」→「暗証番号を使ってみょうか」という流れであって、「暗証番号ありき」→「認証ができたぞ」ではないことは、是非把握しておきましょう。

順序が違うとだいぶ結果が違ってしまいます。

暗証番号の起源は?

暗証番号の起源は?

暗証番号という言葉には特別な響きがあります。

現在、日常生活のいろいろな場面に普及していますが、そもそもの普及のきっかけが銀行のATMシステムで用いられたからということもあり、なんだか暗証=お金にリンクしている、というイメージがありますよね。

訓読すると暗い証ですし、ちょっとおどろおどろしい印象です。

また、似たような言葉でパスワードというのがありますが、これは暗証番号ではないのでしょうか?「違いを明確にせよ」などと突っ込まれたら意外と正確に答えられないですよね。

このように、「暗証番号」や「パスワード」は現代人の生活に深く関わっているにもかかわらず、あまり理解されていない側面があります。

もちろん、ATMシステムなどに関わるメーカ(IT業界はスタイリッシュさを滑稽なほど追求するので、メーカというとメーカの人は怒ります。

ベンダと呼んであげましょう)に悪意があるわけではありませんが、ちょっと利用者を下に見ているかもしれません。

「難しいことすると、利用者は逃げちゃうからなぁ。

極力、中身は見せないようにしよう」という姿勢です。

もちろん、使いやすいものを作っていただくのは結構なことですが、「分かりやすく、使いやすいこと」と「問題の本質を隠蔽すること」は別のお話です。

そして、本質を理解せずに技術を用いるというのは実は大変危険なことなのです。

例えば、「電子レンジで濡れた猫を乾かそうとして殺しちゃった老婆」という都市伝説があります。

これは実話ではないそうですが、欧米の電子レンジメーカが「ペットを入れないでね」と注意書きしているのは事実です。

なんでもかんでも訴訟に持ち込んでしまうお国柄ということもありますが、これは問題の本質的な解決ではありません。

この手法を展開していくと、「濡れた子供を乾かしてはいけません」「ご主人を懲らしめる機械として適切ではありません」など注意書きばかりが無数に増えていくことになります(実際、最近の家電製品のマニュアルは、半分くらいこんなことが書いてあります)。

それよりも、「マイクロウエーブで加熱をするので、強力な電磁波に弱いものは入れないで」と書いた方がよいと思います。

この注意書きは難しいでしょうか? 確かに「猫を入れないで」よりは難しいです。

しかし、裸足で逃げ出すほどではありません。

利用者は馬鹿ではありませんから。

むしろ、「ペットは……」「子供は……」など100箇条も書かれてしまうより、よほど分かりやすいと言えます。

「ははぁ。

じゃあ、野菜は大丈夫なはずだけど、抗酸化物質が壊されちゃうからレンジはやめとくか」とか、利用者なりの判断をすることもできます。

重要なのは、問題の本質を知り、生活の様々な局面で応用を利かせられる能力を身につけることです。

これこそ、多くのセキュリティ事故を未然に防ぐ力になるからです。

「カーブに70km/h以上で進入しちゃダメだよ」→「怒られるから」と理解している人と、「カーブに70km/h以上で進入しちゃダメだよ」→「慣性モーメントがでかいから脱線するぞ」→「そういうしくみなら特に満員で重心が高くなっているときには脱線しやすいはず」→「よけい慎重にしないと」と理解している人とでは、安全性に格段の差が出てきます。

銀行口座などの事実上の「鍵」になっている暗証番号の本質を知ることで、安全に生活する力を向上させていきましょう。