プロが教える店舗&オフィスのセキュリティ対策術

ホームページにおいて、特定のユーザーしかアクセスできないようなページを作るために、パスワードによる認証を行おうと考えています。

perl による cgi を使う予定なのですが、プログラム中に

if ($passwd ne "Test") {~~}

などと書いたら、プログラムを見れる立場にある人間がみたら一目瞭然でパスワードを知られてしまいます。

そこでお聞きしたいのですが

unix の /etc/passwd は暗号化されていて、ユーザーがそれを見ても簡単には解読できないと思います。perl の cgi から、同レベルに暗号化および認証することは可能ですか? 可能だとしたら、そのための方法などを教えてください(たとえば、それを行う便利なシステムコマンドや、フリーウェアがあるなど)。

ついでに、向学のためのウンチクとして、unix のパスワードの仕組みなどもお聞きできるとうれしいです(たしか、/etc/passwd からは絶対にデコードできないと聞いたことがあるのですが)。

よろしくお願いします。

A 回答 (3件)

UNIXのと同レベルかどうかは、判りませんが、


Perlのコマンドにcrypt(Unixのコマンドにも同様のがあります)というのが
あります。
詳しくはリファレンスを見てほしいのですが、
$val = crypt $password, $salt;
$val <- 暗号化された文字列
$password <- 暗号化する文字列
$salt <- 暗号化に使うキー(英数字2文字)

cryptで暗号化された文字列は複合化する方法が基本的にありません。
cryptに渡す$passwordと$saltが同じ物なら、当然同じ結果を返します。
なので、認証を行うときは、
すでにcryptされたデータと、入力されたデータのcryptした結果を
比較することになります。

普通は、
$val = crypt $password, $password;
という使い方をすると思います
    • good
    • 0
この回答へのお礼

ありがとうございます! ほんとにありがとうございます!

crypt なんていう便利なコマンドがあるって、はじめて知りました。

実際に

print (crypt ("test", "test")."\n");

などと実行してみると、みごとに暗号化された文字列が吐き出されました。これからテストを繰り返すことになると思いますが、十分にいけそうです。

ほんとうにありがとうございました。

お礼日時:2001/05/23 06:08

MD5には1方向性関数が使用されており、


この1方向性関数は数学的に逆演算が
出来ないことが証明されていたはずです。
そのため、「考えられる組み合わせの総当たりで
確かめる」しか方法がないのです。

MD5にはもう1つ入力データ長に関らず、固定長の
データを出力すると言うという特徴があるので、
いろんな長さの文字列を変換して、常に一定長に
なるようであればMD5でしょう。

一方、cryptの方ですが、これはOSの暗号化機能を
使う場合があるのでMD5とは限りません。
    • good
    • 0
この回答へのお礼

ありがとうございました。

「常に一定長になれば・・・」

という部分から、perl の crypt コマンドによるエンコードも
おそらく MD5 であろうと推測できました。

お礼日時:2001/05/23 08:44

メインのperlの方は分からないので他の方に


お任せします。

phpであればcrypt()、md5等のphp関数がありますので
多分perlにもあるでしょう。

UNIXの/etx/passwdファイルは、最近ではセキュリティ
の観点から、このファイルにはパスワードは含まれていません。
その代わり誰でも開けます。

んで、パスワードの本体はOSによって異なりますが、
FreeBSDであれば/etc/master.passwd
Linuxなら、/etc/shadow
ファイルに含まれています。
当然暗号化された状態でですが、、、

FreeBSD/Linuxのパスワードの暗号化にはMD5という
技術が使用されており、このMD5は基本的には
逆方向の演算はできない仕組みになっています。
したがって、解析には総当たりのチェックを
することになります。
つまり、パスワードとして使用可能な8文字の
組み合わせ全部を試すことになります。


MD5が使用されている場合、パスワードフィールドが
「$1$」で始まっています。
MD5以外ではDESが使われている場合もあります。
DESの場合は「$1$」で始まらないので簡単に区別できます。
    • good
    • 0
この回答へのお礼

selenity さん、ご回答ありがとうございます。

質問しておいてなんですが、僕の頭脳では理解できないということがわかりました。(^-^;

しかしながら、もっとも重要な「MD5は逆方向の演算ができない」という点をお聞きできたので、安心できました。ちなみに、crypt 関数にも、当然のごとく MD5 という技術が用いられてるわけですよね? 平たく言うと「crypt による暗号も不可逆」と考えて大丈夫ですね?

そこだけ確認させてください。よろしくお願いします。

お礼日時:2001/05/23 06:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!