トップページ | 利用規定
  DES/MD5について

(株)友林堂
(株)友林堂



DES

crypt('平文','SALT'); # SALTは2バイト(半角2文字)の任意の文字

DES方式の暗号はIBM社によって開発された秘密鍵暗号化アルゴリズムです。 暗号強度は低いため、昨今は個人サイトや高度なセキュリティを必要としない処理などに利用されることが多いでしょう。 UNIX(Perl)のcrypt()で暗号化するとこの処理により暗号化される場合が多い(サーバの実装状態により異なる)。 平文(非暗号)は最大8文字まで取扱可能で、9文字目以降は無視されます。 生成された暗号は13文字です。

平文 123456
SALT hY
crypt('平文','hY')
生成された暗号の例 hY7s.O/sy5e.T

復号化する方法はないとされていますが、総当り式などの方法で暗号から平文を探すことが容易な場合があります。 どの方式の暗号でもそうですが、あらゆる文字を試していく総当り式では、平文の文字数が少ないより多い方が、 また、英字や数字だけよりも、記号を含めてランダムに使われている方が、解読される確率は低くなります。 秘密鍵暗号の場合、平文が存在する以上、解読できない暗号はありません。ただし、 解析にどれだけ時間がかかるか、事実上それに天文学的な時間がかかるような暗号は「時間量的に安全」と言えます。 これを逆手にとった、誰にでもできる安全対策が、よく言われる「パスワードは任意に変更する」ことの理由です。 仮にやっと解読できたとしても変更されてしまっては…ということです。

SALTは暗号化する際に使う補助的な情報で、この値が同じものは暗号(暗号処理後の文字列の意)が同じ結果になってしまいます。 そこで、このSALTを変えることにより、同じ平文でも異なった暗号を生成することが出来ます。暗号中にはSALT値が含まれます。 暗号の頭2文字が、暗号化の際に使用したSALT値です。平文にそのSALT値(暗号するときと同じ値)を使って暗号化すれば、 前回と同じ暗号文が生成されますので、一致するかどうかを確認することで、平文が合っているという判断をします。 なお、わざわざ2文字を暗号から抽出する必要はありません。

if ( crypt('平文',暗号) eq 暗号 ) { 合っている!; } # MD5でも方法は同じ


MD5

crypt('平文','SALT'); # SALTは'$1$〜$'書式で指定され、〜部分には0〜8文字の任意の文字。

MD5はハッシュ関数であり、その性質(一方向関数)を利用した暗号アルゴリズムです。 DESと比べて暗号強度は高く、これを実装しているサーバも多い。SALTに指定の書式で値を与えることにより生成できます。暗号の頭には$1$が付き、 次の$までの間の0〜8文字が、暗号する時に使ったSALT値がそのまま入っています。平文にそのSALT値(暗号するときと同じ値)を使って暗号化すれば、 前回と同じ暗号文が生成されますので、一致するかどうかを確認することで、平文が合っているという判断をします。 なお、SALT値を暗号から抽出する必要はありません。

平文 123456
SALT zI1SKWpI
crypt('平文','$1$zI1SKWpI$')
生成された暗号の例 $1$zI1SKWpI$/fza6JeStuB6QDWJYf5q31



実装の実情

まず、ご利用になるサーバに crypt() が実装されてない場合はそもそも何も使えません。 また、サーバの実装状態により、DESを使おうとしてDES暗号になる場合、MD5を使おうとしてMD5暗号になる場合、 それぞれどちらか一方しか使えない場合、また、DESを使おうとしたのにMD5暗号になる場合、MD5を使おうとしたのにDES暗号になる場合、 いろいろあります。処理をする前に確認しておくといいでしょう。

平文をDESとMD5で暗号化してみる (SALT値はランダムに生成します)


Powered by CGI RESCUE(R)