-PR-
解決
済み

Linux での暗号化の方法

  • 困ってます
  • 質問No.79796
  • 閲覧数1014
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 75% (9/12)

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

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

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

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

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

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

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

よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル8

ベストアンサー率 46% (18/39)

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

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

普通は、
$val = crypt $password, $password;
という使い方をすると思います
お礼コメント
posha

お礼率 75% (9/12)

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

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

実際に

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

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

ほんとうにありがとうございました。
投稿日時 - 2001-05-23 06:08:37
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.3
レベル12

ベストアンサー率 41% (324/772)

MD5には1方向性関数が使用されており、 この1方向性関数は数学的に逆演算が 出来ないことが証明されていたはずです。 そのため、「考えられる組み合わせの総当たりで 確かめる」しか方法がないのです。 MD5にはもう1つ入力データ長に関らず、固定長の データを出力すると言うという特徴があるので、 いろんな長さの文字列を変換して、常に一定長に なるようであればMD5でしょう。 一方、c ...続きを読む
MD5には1方向性関数が使用されており、
この1方向性関数は数学的に逆演算が
出来ないことが証明されていたはずです。
そのため、「考えられる組み合わせの総当たりで
確かめる」しか方法がないのです。

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

一方、cryptの方ですが、これはOSの暗号化機能を
使う場合があるのでMD5とは限りません。
お礼コメント
posha

お礼率 75% (9/12)

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

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

という部分から、perl の crypt コマンドによるエンコードも
おそらく MD5 であろうと推測できました。
投稿日時 - 2001-05-23 08:44:35


  • 回答No.2
レベル12

ベストアンサー率 41% (324/772)

メインのperlの方は分からないので他の方に お任せします。 phpであればcrypt()、md5等のphp関数がありますので 多分perlにもあるでしょう。 UNIXの/etx/passwdファイルは、最近ではセキュリティ の観点から、このファイルにはパスワードは含まれていません。 その代わり誰でも開けます。 んで、パスワードの本体はOSによって異なりますが、 FreeBSD ...続きを読む
メインの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$」で始まらないので簡単に区別できます。
お礼コメント
posha

お礼率 75% (9/12)

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

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

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

そこだけ確認させてください。よろしくお願いします。
投稿日時 - 2001-05-23 06:21:16
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ