- PR -

MD5を使いたい。

1
投稿者投稿内容
numao
常連さん
会議室デビュー日: 2007/01/28
投稿数: 28
お住まい・勤務地: 東京
投稿日時: 2007-02-03 21:11
お世話になっております。
Frdora Core5でいろいろやっております。
最近までcryptを使って、シェルやPerlでパスワードの暗号化を行ってきましたが、何やら最近では簡単にパスワードが破られてしまうという噂を聞きました。
そこで、MD5とかいう新しい方式のモジュールがあると噂で聞いたのですが、具体的に(そのシステムや使い方)は全くわからない始末です。。。
Fedoraに標準でインストールされているのかもわかりません。

 もしわかる方がいらしたら、その概要などを教えて頂けないでしょうか?
 また、そのことに関する詳しいサイトなど知っていたらおしえてください。
よろしくお願いします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-03 23:52
インストールされているどころか相当前から標準です。

/etc/shadowのパスワードフィールドが$1$で始まっているなら、
そのパスワードはMD5を応用した方式でハッシュされています。

perl等で使いたいなら、cryptのsaltに$1$で始まる形式で指定しましょう。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html
numao
常連さん
会議室デビュー日: 2007/01/28
投稿数: 28
お住まい・勤務地: 東京
投稿日時: 2007-02-04 01:38
例えば、
$passwd = crypt('12345','$1$abcde$');
というだけでよいのでしょうか?
$1$〜SALT〜$ と、いう風に挟むらしいです。

ただのcryptと、MD5は基本的に何が違うのでしょうか?
また、Perlで使う際には、OSからMD5が呼び出されているのでしょうか?あるいは、Perlそのものにすでにこのアルゴリズムがあって、別個で処理しているんでしょうか?
初心者質問ばかりですみません。


blunder
ベテラン
会議室デビュー日: 2003/09/11
投稿数: 65
投稿日時: 2007-02-04 12:43
こんにちは。

パスワードを自分で暗号化するよりuseraddコマンドやpasswdコマンド、あるいはGUIベ
ースのツール(system-config-usersなど)を使ったほうがよいのでは?
そのほうが簡単ですし、暗号化の方式も意識しなくてすみます。
自分で直接ファイルをいじっていると、ファイルを壊してしまったり、ファイルの
パーミッションやSELinuxのセキュリティコンテキストをうっかり変えてしまう恐れとか
もありますので、OS標準のツールに任せたほうがいい気がします。

たしか旧cryptはパスワードの最初の8文字だけが有効で、MD5はその制限がない点が大きな
違いのような気がします。
システムのデフォルトが旧cryptならMD5に変えたほうがよいでしょうが、始めからMD5なの
であまり心配いらないような気がします。
numao
常連さん
会議室デビュー日: 2007/01/28
投稿数: 28
お住まい・勤務地: 東京
投稿日時: 2007-02-04 13:22
ありがとうございます!
いろいと教えて頂いて、調べてみました結果、やはりFedoraでは標準でMD5でした。
僕は(へんてこりんですが…)Perlをよく使うのですが、Perlでは、cryptを使うとかなり昔の暗号化が行われているようです。
Perlでは、その都度モジュールを呼び出さないといけないようです。

ご指摘の通り、とりえずは安心しましたので、あんまりいじらないでおこうと思います。
いろいろとありがとうございます。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-04 23:58
こんばんは。
引用:
numaoさんの書き込み (2007-02-04 13:22) より:
僕は(へんてこりんですが…)Perlをよく使うのですが、Perlでは、cryptを使うとかなり昔の暗号化が行われているようです。
Perlでは、その都度モジュールを呼び出さないといけないようです。


一応ツッコミを。
Perl の crypt は、libc で提供されている crypt と同等の機能を持っています。恐らく、内部では libc の crypt を呼び出しているのでしょう。
Fedora に入っている GNU libc ( glibc ) は、MD5 を使用した方式を crypt でサポートしている ( GNU拡張 ) ため、perl でも同じように MD5 を使用した方式が使えるのだと考えています。
これは、第二引数 salt に、$1$ で始まる文字列を指定した場合の話であり、あしゅさんの説明の通りです。
GNU拡張のない素の crypt は、内部で DES を用いており、暗号強度が大分弱い方式になります。
※ libc のない Windows - Active Perl の場合は、crypt が MD5 を用いた方式になると聞いた事がありますが…

で、それとは別に、MD5アルゴリズムを使った処理を独自に作りたい場合は、確かに MD5 のもジュールが必要です。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-05 10:28
余談ながら、Solarisではどうなっているか調べてみたら、結構興味深い作りになっていたので、掲載します。

Solaris9 の初期のバージョンまでは、crypt(3c) は DES を使う方式 ( UNIX標準 ) だったようなのですが、Solaris9 の途中から ( 少なくとも Solaris9 9/04 では )、salt の指定によって、使うアルゴリズムが変わるようになっています。
$1$ で始まる場合は BSD/Linux系と同じ MD5 の方式なのですが、それ以外の方式もプラグインとして追加していくことができ、$ の次に来る文字列によって制御します。
設定は crypt.conf(4) で行い、処理を行うライブラリを指定することができます。
※例えば、$1$ で始まる場合は crypt_bsdmd5.so.1 が使われる、等

Solarisに収録されている Perl の crypt も、この crypt(3c) と同じ挙動になりました。
コード:
$ perl -e 'print crypt("aaa","\\$aaa"),"\n";'
$aaa$vkmoLsId57amXzWQgY3nk1  ← BSD/Linux系の MD5-crypt と同じ
$ perl -e 'print crypt("aaa","\$md5\$aaa"),"\n";'
$md5$Zqhyq6mNikdyrEtf2NV801  ← Sun独自アルゴリズム ( MD5使用 )



また、FreeBSD では、/etc/auth.conf や crypt_set_format(3) で制御するそうです。
http://www.jp.freebsd.org/QandA/HTML/1944.html を参照のこと。
色々あるものですね。
numao
常連さん
会議室デビュー日: 2007/01/28
投稿数: 28
お住まい・勤務地: 東京
投稿日時: 2007-02-05 23:37
貴重な情報ありがとうございます。
あるいは、貴重な突っ込みありがとうございます。いろいろと勉強になります。

 $1$で暗号化してみたところPerlでもモジュールを使う必要が泣くMD5で暗号化できました。$1$をつけないでcryptを使用すると、なんとも不安な短い暗号化された文字列になりました。
 いろいろと勉強させていただいております。
 皆様ありがとうございました。これからもよろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)