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

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

ハトと人間が話せたら。

コンピュータはなんだかすごい!と、多くの人が思っています。

確かにいろいろすごいのですが、エンジニアが「すごい!」と考えていることと、利用者が「すごい!」と思っていることの聞にはけっこうな隔たりがあります。

こ少しだけ、コンピュータの構造のお話をしましょう。

講義などをしていて、受講者の方が一般的にコンピュータに対して抱いているイメージは「とにかく間違えない!」「速い!」というものです。

ここにすでに誤解があります。

コンピュータはけっこう間違えるのです。

「えっ、でもそれってバグがあるからじゃないの? バグさえなければ、コンピュータは間違えないでしょ?」とおっしゃる方もいます。

バグというのは、ハードウェア(機械) やソフトウェア(機械を動かすための情報)を設計・開発するときのミスのことで、確かにバグがあると正しく動作してくれません。

しかし、ここで触れておきたいのはもう少し本質的な、構造上の問題です。

例えば、そうですねコンピュータは2進数しか扱えなかったですよね。

数字を10個使って世界を認識している人間と、数字を2個しか使わずに世界を認識しているコンピュータでは、見ている風景が違います。

ハトと人間が話せたらどうでしょう?(ドリトル先生みたいですが)けっこう話がはずむでしょうか? 私は難しいんじゃないかなあ、と思います。

ハトは赤外線を視覚情報として感知することができます。

可視光線しか見えない人間とは、同じものを見ていても、脳裏に浮かんでいるイメージが違うのです。

人間には雲しか見えなくても、透過率の高い赤外線を認識できるハトは、雲の先を見通しているかもしれません。

このように、「見えているものの違う2種類の存在」の間ではコミュニケーションが難しいのです。

なんだか、別れかけの恋人同士みたいです。

ハトは話が合わなければほうっておけばいいのですが、コンピュータはそうもいきません。

そもそも「人の役に立てよう!」と考えて作られた機械なのですから、コミュニケーションしないわけにいきません。

そうすると、2人の聞で「翻訳」が行われるわけです。

「翻訳」はどこの世界でも普通に行われていますが、TVなど見ていると同時通訳の人がとっても苦労している場面に出くわします。

例えば、エスキモーは(雪の中で暮らしてますから)「白」という色を100種類くらいに細分化しているそうですが、他の多くの人にとって白は白で、せいぜいいくつかのバリエーションを思いつく程度です。

「絶対に翻訳できない言葉」というのが出てきちゃうわけです。

コンピュータと人間の聞に立ちはだかる「2進数と叩進数のカベ」も同様です。

2進数と10進数はほんらい違うものですから、「基数変換」という翻訳を行う際、必ずしも正確な翻訳にならない可能性があります。

試しに、もしお持ちの方がいたら、Excel(有名な表計算ソフト)に「=(1.1-10.1)」ごと打ち込んで計算をさせてみましょう。

小学生でも解ける問題ですよね。

Excel はちゃんと0にしてくれましたか? 他にもこんな例があります。

1÷3=0.3333333……循環小数というやつですね。

したがって、0.3333333……×3=0.99999999……が成り立ちます。

すると、1÷3×3=0.9999999……???これは、先にも述べたようにコンピュータが「2進数でしかものを考えられない」ため、10進数と2進数を行ったり来たりすることで生じる誤差です。

専門のプログラマはこういう誤差があることを常に念頭において仕事をすることが求められます。

でも、念頭に置いたからこそ起こってしまったインシデントもあるのです。

サラミ法という詐欺の手法をご存じでしょうか? 銀行のプログラムなどに不正介入して、「1人の口座から1 円」といったようにちまちま搾取するやり方です。

サラミソーセージのように「薄く、薄く」というわけです。

1人の被害はちょっとですが、100 万人から搾取すればクラッカには大金が入ります。

この犯罪が行われたとき、利用者よりもコンピュータの専門家の方が気づくのが遅れました。

専門家には「1円くらいの誤差はシステムの仕様によっては生じるな」という先入観があったのです。

不具合について。

業界用語というのはどんな業界のものでも分かりにくいものです。

航空業界の友達がよく「機材」というのですが、なんとなく小さいツールを予想させる語感のわりに飛行機のことを指していたりして、残尿感にも似た違和感を覚えます。

翻ってI T業界も分かりにくい用語では人後に落ちません。

アルファベットの3文字略語はもう諦めるとして、「不具合」 というのが非常に分かりにくい、というか確信犯的な用語です。

あいさつの「どうも」と同じで、取り敢えず何かトラブったときに、どんなシチュエーションでも使える便利な言葉です。

お客さんZ 「きみ、このハンバーガーにはレタスがはさまっていないよ」カウンターT 「あっ、ほんとですね。

何か不具合が生じているのかもしれません」お客さんZ 「不具合って、こういうのは欠陥品って言うのではないのかね」カウンターT 「いえいえ、決して欠陥品などでは……こうした不具合は相性でよくあることで… …」お客さんZ 「なに! 私とハンバーガーの相性が悪いというのかね。

私の責任にするつもりか」カウンタ- T 「いえ、お客様の責任ではなく、ひょっとしたらこういうハンバーガーの仕様なのかもしれません」お客さんZ 「仕様だと? この前食べたハンバーガーにはちゃんとレタスがはさまっていたぞ。

さっさとレタスを持ってこい!」カウンタ-T 「そう申されましでもお客様、これからレタスを追加インストールすると、オプション料金が発生いたします。

それでもよろしいですか? 」……まともな街角のまともなショップだったら殴り合いになりそうな状況がIT業界では日常的に現出し、みんなもそれを受け入れています。

第3章コンピュータはなぜ計算を間違えるのか?――計算のしくみとそれに付け込む人間の知恵

かくして破られるしくみは使い続けられる。

暗証番号やパスワードのもとになっている考え方を見てきましたが、いかがでしたでしょうか。

利用者はどうしても「銀行=お金を預かっているところ=安全にはうるさいはず=そこが使っているしくみ=暗証番号は安全」と、とっても好意的な等式を作りがちなのですが、「案外いいかげんっぽいな」と肌で感じていただければOKです。

「安全なはず」の暗証番号が、実は「構造的にいつか破られるもの」だったり、それを回避するための手段は「こまめに番号を変更する」「推測されやすい番号にしない」など、ユーザに責任があるかのようです。

実際、「生年月日を暗証番号にしているようでは、利用者に落ち度があったのだから賠償は」なんてセリフも出てきてしまうわけです。

暗証番号が4ケタなのも、パスワードの有効期限が決まっているのも、何か数学的な根拠があって「これなら十分に安全だから」と自信を持って決められた数値ではありません。

そんなしくみを用意されたにもかかわらず、責任だけ負わされたらたまらないですよね。

サービスを提供する側の責任をもっと重くするガイドライン作りなどが進められていますが、差し当たっては自衛が必要です。

暗証番号を作るときは、反射的に電話番号の下4ケタにしないで、この内容を思い出してみて下さい。

辞書に載ってる言葉はダメだよ攻撃。

「たくさんの種類の文字を使い」「できるだけ長く」「使う期間は短く」「変更するときは、前と似ても似つかないものに」……よいパスワードへの道のりはなかなか厳しいですね。

最初のうちは「仕事の気分が乗らないときに暇つぶしできていいかな」くらいに思っていても、しばらく続くとうんざりしてきます。

そこで大抵の人が思いついてしまうのです……。

新入社員B 「(あーあ、また憂欝な一週間の始まりだ。

仕事前にパスワード考えとかなきゃ。

でも、もういいかげんネタがないよ。

長くてうそみたいに種類のあるパスワードを誰か考えてくれないかな……って、おおおっ! いいものがっ!)」管理者R「おい、B」新入社員B「なんですかRさん! びっくりしましたよっ」管理者R 「見てしまったな、触れてしまったな、禁断の果実に」新入社員B「いや、ぼ、僕は何も……」管理者R「雰囲気で分かる。

匂いで分かる。

気配で分かる! しかしB、あれはやめておけ。

手を出してはダメだ」新入社員B「なぜ、なぜなんですRさん!このおばあちゃんにもらった黒革の英和辞典が僕に福音を……福音を……」常に大量の「変わった文字列」を思いつかなければならない状況に陥ると、かなりの人が「そうだ! 辞書に行こう」と思いつきます。

パスワードはその性質上、漢字変換が難しいので英和辞典がよく使われます。

載っている単語を適当に誕生日とでも組み合わせれば、一瞬で「いいパスワード」が作れてしまいます。

言葉なんて日々生み出されていますから、ストックも無尽蔵にあるわけです。

「なんでみんな使わないの!?」と快哉を叫びたくなります。

実際、英単語からパスワードを作っている人は多くいます。

意味のある単語と意味のない文字列、コンピュータにとって両方の情報は等価ですが、人間にとっては格段に意味のある単語の方が覚えやすいのです。

したがって、「パスワード作りに辞書は必携」な人が増えるわけです。

しかし、そんなことはクラッカは百も承知です。

そこで、総当たりをするにしても、「aaaaa 違うか」「aaaab これも違うな」(ルパン三世の原作にこんなシーンがありました)なんて無機質にやるのではなくて、「まず辞書に載ってる単語から試していこう」となるわけです。

本当に何かの単語をパスワードにしていた場合、「aaaaa」から順に試されるよりずっと速く解読されてしまいますよね。

これを「辞書攻撃」と呼びます。

最終的には総当たり法と同じことになるのですが、意味のある単語から始めていくことで「解読までの平均時間」を大きく短縮できるわけです。

また、ここでいう辞書は、コンサイスとかジーニアスとかだけではなくて、「クラッカお手製」も合みます。

どういうことかというと、「その人がなんなく記憶できて」かつ「他人はあまり知らないもの」は、パスワードと結びつきやすいのです。

そこで使われるのが、おなじみの生年月日や電話番号です。

ほんとうにこれらを「他人はあまり知らな」ければいいのですが、電話番号なんてちょっと調べれば分かる「準・公開情報」ですし、生年月日も同様です。

こうした個人情報を専門に闇取引する業者も存在して、クラッカはせっせと自分の辞書に「個人情報」を蓄積していきます。

あなたの誕生日は百科事典に載っていなくても、クラッカの辞書には載っている、というわけです。

「暗証番号に生年月日を使わないでください」と言われるのはこのためなのですね。

以前は電話番号がもれでもあまり広範囲には広まりませんでしたし(検索も大変でした)、せいぜいいたずら電話がかかってくるくらいでしたが、ネットワークの普及により情報の伝播速度は異様に速くなりました。

一度もれてしまった情報はネットのどこかに永遠に保存され続けると言っても過言ではありません。

暗証番号という「鍵」に電話番号を設定してしまった時点で、電話番号は単純な「電話の番号」ではなくなり、あなたの資産への扉、という属性を持ってしまうのです。

公開情報にそんな属性を持たせるのはおっかないですよね。

家の鍵を人前に放置する人がいないのと同じです。

安全に暮らすためのコツは、「1 つのモノには1つの意味しか持たせない」ことです。

ダブルミーニング好きの日本人としては寂しいですし、万葉歌人が聞いたら怒りそうですが、電話番号には「電話の住所」としてだけの意味を、生年月日は「僕の生まれた記念日」としてだけの意味を持たせましょう。

電話番号が「電話の住所」でもあり「お金を引き出す鍵」でもあると、電話番号を知られることのリスクが大きくなります。

セキュリティ分野では二重の意味づけにろくなことはありません。

余談ですが、自分のパスワードに好きな女の子の名前を使う新入社員がけっこういます。

「パスワードは誰にももらさない」わけですから別にいいんですが、2つの意味でやめた方がいいと思います。

1つはもちろん「パスワードは意味があってはならない」という原則に反するため、もう1つは、会社というのはなかなか原則通りに動かないもので……。

Oさん(電話口)「おーい、Bくん風邪だって?」新入社員B「はい、すみません。

ご迷惑かけまして」Oさん(電話口)「それはいいんだけど、パスワード教えてくれない?」新入社員B「え? パスワードは死神が自分の額に手を触れるまで教えちゃダメだって新人研修のときに言ったじゃないですか」Oさん(電話口) 「あれは理想論だよ。

現実はお客の形をして窓口に現れているんだ。

B くんのパスワードがないと、あのお客の対応ができないんだよ」新入社員B「……」Oさん(電話口)「えっ!? 聞こえにくいな。

どうしたの?」新入社員B 「*****です」Oさん(電話口)「……」その名前が共通の知人だったりするとこちらも気恥ずかしいわけです。

長いだけが複雑なパスワードではない。

いくら安全になるからと言っても、無限にパスワードを長くするわけにはいきません。

パスワードには当然、「正規のユーザ」がいるわけで、「このパスワードは314 億1592万6535 ケタあるから絶対に破られない!」って力んでも、そんなもの誰も使いません。

この「複雑にしなければならない」と「あんまり長くできない」のバランスを取るためにひねり出されたのが、「パスワードは要求する複雑さを満たす」や「パスワードの履歴を記録する」といった設定項目です。

ちょっと分かりにくいのですが、「パスワードは要求する複雑さを満たす」は、この場合「英大文字・英小文字・数字・記号の4種類の文字種から3種類以上が使われている」ことを示しています。

同じ3文字のパスワードでも、「英小文字だけしか使っていないパスワード」より「英小文字も英大文字も数字も記号も入っているパスワード」の方が、総当たりするのに時間がかかります。

パスワードとして考えられるバリエーションが増えるためです。

Windowsでパスワードを変更しようとして、「入力したパスワードは要件を満たしていません!」と怒られるのはこれが原因です。

また、「パスワードの履歴を記録する」は、「複雑にすること」とは直接結びつかないかもしれませんが、クラッカの安直な推理を防ぐための手段です。

例えば、「7日間でパスワードを変更する」ことがルールになっている場合、パスワードがもれてしまっても最悪7日後にはパスワードが変更され、クラッカをふたたびパスワードが分からない状態にすることができます。

しかし、せっかく変更したパスワードが前のものと似ていれば、クラッカは総当たりより楽に新しいパスワードを見つけてしまうかもしれません。

クラッカはコンピュータと違って知性のある人間ですので、文脈を読むのが上手です。

例えば、Pさんの使っている「xyz」というパスワードがあったとします。

クラッカはこれをひょんなことから入手しましたが、Pさんはルールにしたがって7日後にパスワードを「xyx」に変更しました。

このときクラッカはどんな行動を取るでしょうか? 「パスワードを変更されてしまった。

もう一度総当たり法で新しいパスワードを手に入れよう」「aaa 」「aab 」「aac」……とするでしょう。

でもクラッカは違います。

「パスワードを変更されてしまったな。

でも待てよ? 新しいパスワードを作ったり覚えたりするのがめんどうで、似たやつを使っているかもしれないぞ。

前のパスワードを起点に探してみよう」「xyy」「xyx」!ビンゴ!このように人間はあらゆる情報を使ってパスワードを推測するので、「以前に使ったのと似たパスワード」や「以前のパスワードの使い回し」を用いることは非常に危険です。

Windowsの「パスワードの履歴を記録する」は、パスワードの変更履歴を指定回数だけ記録しておいて、同じパスワードには変更できないようにする機能なのです。

さらに厳しく、「前のパスワードと×××文字以上同じ文字が合まれていたらダメ」なんて決めているソフトウェアもあります。

いずれにしろ、限られた条件の中でできるだけ複雑な要素を取り込み、クラッカをまどわせる努力が払われているのです。

こうしたパスワード作成者とクラッカの知恵比べは(クラッキングはしちゃいけないんですけど)、はたから見ている分には知的ゲームとして面白いです。

古くから推理小説のプロットとしても使われています。

有名どころでは、ドイルの「踊る人形」(『シャーロックホームズの帰還』所収)やポーの「黄金虫」が秀逸なので、未読の方は是非どうぞ。

複雑なパスワードで逃げ切りを図る。

同じパスワードを使い続けるのは、まずそうでしたね。

では、ご自分のWindowsの他の設定項目はどうでしょうか。

「パスワードの長さ」という項目があります。

ここでは、「14文字以上」と異様に厳しく設定されていて、このパソコンを使う人に同情しますが、最近では6文字以上、8文字以上といったところを要求してくる会社やサイトも多くなりました。

この背景には、「パスワードは長ければ長いほど強力」という原則があります。

パスワードは知識による認証方法ですが、知識がもれなければ安全かというとそうではありません。

知識は推理・推測することができます。

「パスワードは2 5 6文字だよ」と言われたら、うんざりして推理するのがいやになりますが、「1文字だけだよ」と言われれば、「ちょっと試してみょうかな」という気になります。

パスワードになり得る可能性のある語をすべて試す、パスワード破りの方法を「総当たり法」と言いましたね。

これを英訳すると「ブルートフォースアタック」になります。

ブルート(野獣)フォース(力)ですから、力ずくで無理矢理な感じがよく出ています。

パスワードをできるだけ長くする、というのは総当たり法に対する有効な対策です。

長ければ長いほど、「パスワードになり得る諮問」のバリエーションが飛躍的に増大しますから、クラッカは総当たり法を試すのがめんどうになるのです。

破られるのが前提!? パスワードの有効期限。

さて、すったもんだのあげくに決まったパスワード、長く使いたいですよね。

ところが最近のコンピュータは「長くパスワードを使おう」なんて悠長なことは許してくれません。

以前は物持ちの悪い人はおじいちゃんに怒られたりしましたが、セキュリティの世界では物持ちのよさはちっとも自慢にならないのです。

パスワードは使い回しもいけないので、なんだかエコロジーな思想に反する気がします。

1個のパスワードをどのくらい使わせてもらえるのでしょうか? 私のパソコンの設定を確かめてみます。

パスワードについていろいろ取り決められていますが、まず「パスワードの有効期限」に注目してください。

「14日」になっていますね。

これは、「そのパスワードにしてからは日が経過したら、新しいパスワードを入れないと無効になっちゃうよ」ということです。

これは絶対に14日と定まっているわけではなくて、自分で取り決めを作ることができます(ちなみに0日にすると無期限を意味します)。

14日はさすがに短いですが、30日くらいにしている企業はたくさんあります。

毎月、月末になると「そろそろパスワードの有効期限が切れます」という表示がパソコンの電源を入れるたびに現れて、憂鬱になった経験はありませんか? なぜ、あんなめんどくさいことをしているかというと、「パスワードは運用していく中で強くなる」ものだからです。

「運用しないと弱くなる」でもいいですけど。

資産運用と一緒で、ただ貯めておいても税金は高くなるし、年金は目減りするしでジリ貧です。

運用しないと幸せは来ないよ、と覚えましょう。

これは、パスワードが知識による認証方式であることと密接に絡んでいます。

前述のように、パスワードは知識という「実体のないもの」ですから、とってももれやすいのです。

ケーススタディを見てみましょう。

【ケース1】A子さん「J係長代理補佐はいつも若々しくて、とても定年間際とは思えません」Jさん「そうじゃろ、そうじゃろ。

気も体も若くて、まだまだ九九も鶴亀算もばっちりじゃ」A子さん「ほんとお元気でうらやましいです」Jさん「しかし、記憶力だけは自信がなくなってきてのう。

でも、そこはそれ、年の功というやうつ。

転ばぬ先の杖じゃ。

ちゃーんと大事なパスワードは、付箋に書いて貼ってあるのじゃ」A子さん「…………。

」【ケース2】管理者R「もしもし、システム管理部です」見知らぬ電話「あー、もしもし。

私はF常務だ。

今、取引先で商談をしているんだがね」管理者R「それはご苦労様です」見知らぬ電話「もう少しででかい案件を落札できそうなんだ。

ついては、最終交渉額を確定させるため社内システムにアクセスしたいのだが、パスワードを忘れた。

教えてくれ」管理者R「えっ、それは規定でできないことになっていますが」見知らぬ電話「なんだと。

それじゃ、君の杓子定規な対応でこの取引が不発に終わった場合、君が責任を取ってくれるんだな?」管理者R「ひいいっ! それだけはご勘弁をF常務のパスワード○○○○です」【ケース3】Yさん「あれっ、またパスワードを間違えた。

いやだなあ。

Kさんはいつもいつもよくパスワードを正確に覚えていられますね」Kさん「俺はその月の誕生石をそのままパスワードにしているからな。

忘れるわけないよ。

頭を使うんだよ、頭を!」通りすがりの犯罪者「(なるほど、しめしめ)」いかがでしょうか。

どのケースの登場人物も、「とんでもない大失敗」はしていないと思います。

日常の何気ない行動、会話です(ケース2は怪しいですけどね)。

でも、周りにちょっとピンとくる人がいれば、これだけでパスワードはもれてしまうのです。

これは「知識を使う」パスワードという方式の構造的な問題と言えます。

また、パスワードは組み合わせられる数に限りがありますから、全部の組み合わせを試せばどこかで「当たり」を必ず引くことになります。

そ・こ・で、パスワードの有効期限が定められているのです。

パスワードというしくみを強力にする施策ではありません。

むしろ、パスワードの弱さを認めた上で、「いやあ、パスワードって元々弱いものだからすぐ見破られちゃうけど、見破られちゃう前にころころ変えればいいんだよね?」という開き直りにも似たやり方です。

借金取りから夜逃げして、ねぐらを転々とする生活に似た悲壮感が漂います。