opensslを使ってハッシュ化されたパスワードの生成方法、不可逆

ITで知っておくべき知識

WordPress等ユーザー管理を行うデータベースのユーザーテーブルでは、ユーザー名とパスワードが保存されています。

このパスワードは当然、ハッシュ化されており解読は出来ません。

では、どうやってパスワードを生成しているのでしょうか?

スポンサーリンク

openssl passwd コマンドでハッシュ化

最も簡単な方法は、openssl passwdコマンドを使ってパスワードを生成する方法です。

 

openssl passwdのオプションは次の通りです。

https://www.openssl.org/docs/man1.1.1/man1/openssl-passwd.html

 

openssl passwdコマンドのオプションで大事なのは以下のオプションです。

-1:MD5アルゴリズムで暗号化。生成したパスワードは$1$で始まる。

-5:SHA256アルゴリズムで暗号化。生成したパスワードは$5$で始まる。

-6:SHA512アルゴリズムで暗号化。生成したパスワードは$6$で始まる。

 

実際にaaaという文字列をハッシュ化してみます。

 

 

$1$で始まるか$5$で始まるか$6$で始まるかで、どのハッシュ化アルゴリズムでハッシュ化されたかは判別可能です。

PHPのcrypt関数

同様なことは、PHPのcryp関数で行うことも可能です。

 

crypt関数がサポートしているハッシュアルゴリズムのは次の通りです。

https://www.php.net/manual/ja/function.crypt.php

アルゴリズム 説明
CRYPT_SHA256 SHA-256のハッシュ関数を使用。
$5$ で始まりコストパラメータと 16 文字の salt よりハッシュ値を生成。
CRYPT_SHA512 SHA-512のハッシュ関数を使用。
$6$ で始まりコストパラメータと 16 文字の salt よりハッシュ値を生成。
CRYPT_BLOWFISH Blowfish暗号を使用。
$2a$、$2x$、$2y$のいずれかで始まりコストパラメータと 22 文字のsaltよりハッシュ値を生成。
CRYPT_MD5 MD5のハッシュ関数を使用。
$1$ で始まり 8 文字の salt を使いハッシュ値を生成。
CRYPT_STD_DES 標準の DES暗号を使用。
2 文字の salt を使いハッシュ値を生成。
CRYPT_EXT_DES 拡張した DES 暗号を使用。
アンダースコアから始まる9文字の salt を使いハッシュ値を生成。

 

パスワードをハッシュ化する理由

パスワードをハッシュ化する理由として、第三者が不正にパスワードへアクセスしたとしても、ランダムな文字列に変換されていることで悪用されるのを防げるからです。

ハッシュ化されたパスワードは不可逆で戻せない

ハッシュ化されたパスワードは不可逆です。

ハッシュ値はハッシュ化の際に元データの情報を欠落させてしまう処理などがあり、元データに戻すことはできません。

 

一方で暗号化は、元データの暗号化や復号化に用いる鍵(キー)を入手できれば、元データへ戻すこと(復号化)が可能です。

 

ITで知っておくべき知識
スポンサーリンク
スポンサーリンク
うらしたをフォローする
スポンサーリンク
urashita.com 浦下.com (ウラシタドットコム)

コメント

タイトルとURLをコピーしました