トップページに戻る

Category

AllArchives

Checker

Credit

パスワードクラック概論(2)

前回書いたように、「サーバー内のパスワードデータファイル」を抜かずに「パスワードクラック」を行うことは(JOE等一部の例外を除いて)現実的に不可能です。「パスワードクラッカー」が最初にすべきことは「サーバー内の『パスワードデータファイル』を抜く」です。これは前提としておきましょう。
では、パスワードクラック概論(1)で書いたような「パスワード認証」の問題点(脆弱性)は何か。「正しいパスワード」を平文で(=暗号化せずに)サーバー内に保存しているコトです。だから「パスワードデータファイルを抜かれる」が即「全てのアカウントを破られる」に繋がる。
ならば。「正しいパスワード」を暗号化して保存しておけば良い。

ここで「暗号」というモノについて軽く触れておきます。

小学生くらいの頃に親しんだ「暗号」ってのは以下のようなモノですよね。
例えば「と」という文字は「た」行の「お」列。「た」行は「あかさた」で4番目。そして「お」列は「あいうえお」で5番目。従って「と」は「54」。
PCの世界において、「暗号」とは「関数」と同じです。上記や「タヌキで『た』抜き」みたいな「暗号」観から抜け出しましょう。

BASICとかでもいいのですが、何らかのプログラム言語を使ったことがある人ならば次のような話に頭を悩ませたことが一度あると思います。
10+5は15なのか105なのか
つまり、「10」「5」を数字と見れば10+5は「15」で、文字と見れば10+5は「105」。なるほど。では「to+kix」は?「tokix」?それは「to」「kix」を文字として見た場合ですね。「to」「kix」を数字と見たら?

そう、PCにとって文字とはn進数の数字にすぎない。パスワードの場合だったら
パスワードに使用できる文字は英小文字26+英大文字26+数字10で62個
なので62進数(という説明はかなり乱暴ですが今回はそういうことで)。
(我々10進数に慣れた人間には「文字列」としか思えない)パスワードを「数字」として見ることができれば、あらゆる計算・・・例えば足し算なりかけ算なり・・・が可能になる。そうして行うことができる「関数への代入」が「暗号化」であり、「解読」とは「逆関数への代入」です。
※参考: コミレク内「関数
・・・いや、別に読まなくても次を読めば多分意味分かると思いますけど一応。
y=3x+5 ←62進数の数字であるパスワードxを関数に代入しyを得る(暗号化)
x=(y-5)/3 ←62進数の数字であるyを逆関数に代入し元のパスワードxを得る(解読)
「正しいパスワード」を暗号化してサーバー内に保存しておけば、「『パスワードデータファイルを抜かれる』が即『全てのアカウントを破られる』に繋がる」ことはなくなる。
  1. IDとパスワードを入力させる
  2. サーバー内部のデータファイルを参照し「暗号化された正しいパスワード」を解読し「正しいパスワード」を得る
  3. 「入力されたパスワード」と「(2で解読した)正しいパスワード」が一致ならば「ログイン成功」・不一致ならば「ログイン失敗」

しかしそれでも、「パスワードデータファイル」を手に入れたクラッカーには希望がある。「関数」の正体が分かれば「逆関数」を求めることができ、パスワードデータファイル内の「暗号化された正しいパスワード」から元の「正しいパスワード」を知ることができる、という希望。「暗号化された正しいパスワードデータ」を手に入れた上で、その希望を「パスワードクラック」に結びつけるための方法は大まかに二種類。
□1: 関数なり逆関数なりのルーチンを手に入れる
「パスワード設定プログラム」には「関数」が、「パスワード認証プログラム」には「逆関数」が記述されているはずです。サーバー内部で動作しているプログラムのソースを入手することができれば「パスワードクラック」が可能になる。
□2: 「入力」「出力」から関数を推測する
(前略)
yamada,JUhbgfd4E ←ターゲットyamadaのパスワードをある関数に代入した結果
(中略)
test1,edCf1ygh ←自分のアカウント1のパスワード1を同じ関数に代入した結果
test2,Lp8hGvdS ←自分のアカウント2のパスワード2を同じ関数に代入した結果
(後略)
このように、様々な「パスワード」を設定して「暗号化されたパスワードデータファイル」を抜けば良い。そうすれば「暗号(=関数)」の正体を推測することができ、「ターゲットyamadaのパスワードをある関数に代入した結果」である「JUhbgfd4E」の「解読(=逆関数への代入)」を行うことができるかもしれない。f(1)=8でf(2)=11でf(3)=14ならば「f(x)=3x+5」でありf(a)=35の時a=10ではないか?ということです。

「パスワードデータの暗号化」の問題点(=脆弱性)とは、「全てのアカウントに関するパスワードが同じ関数に代入されている」ということです。だから上記test1・test2・・・の「パスワード」と「暗号化されたパスワード」を解析されることで「関数」の正体を推測されてしまう。
  • 関数への入力: 自分が設定したパスワード
  • 関数からの出力: パスワードデータファイル内の文字列
「入力」「出力」が手に入れば「関数」の推測が可能になる、と。

まずもって「パスワードデータファイル」を抜かれなければ「パスワードクラック」に脅える必要はあまりない(JOEとかは例外ですけど)。仮に抜かれたとしても、その「データ」が「生のパスワード」ではなく「暗号化されたパスワード」であれば一応安全である。が、関数(逆関数)を求められたら全てのアカウントを破られる。
これが、「暗号化」という世界です。

SeeAlso

SameSubCategory

Footprint

Navigation

TrackBack

この記事へのトラックバック