暗号 2021年06月19日 00:51 編集
Web上で使用するパスワードはほとんど半角英数字と記号を使うので、全角の日本語は使えないと思っていたが、必ずしもそういうわけではないようだ。この用語集作成スクリプトterm.phpや掲示板スクリプトbbs.phpでも、管理者認証などのためパスワードを設定することになっているが、試しに日本語のパスワードを設定したところ、問題なく使えた。
しかし、一般的には日本語のパスワードは使えないということになっている。たぶんパスワードの入力に のようなpasswordフィールドを使っているからだと思う。このpasswordフィールドは、入力した文字が伏せ字になるだけでなくIMEが無効になっているので、日本語が入力できないのだ。直接入力するのではなくコピーアンドペーストすれば入力できないことはないが、半角文字が使われていないとかいわれて受け付けられない場合もあるだろう。
パスワードの入力にpasswordフィールドを使っているのは、入力画面を盗み見るショルダーハッキング対策だと思うが、入力した本人にも見えないので、正しく入力できているのか確認しにくいという問題もある。(特に新しいパスワードを登録する場合)
しかし、一般的には日本語のパスワードは使えないということになっている。たぶんパスワードの入力に のようなpasswordフィールドを使っているからだと思う。このpasswordフィールドは、入力した文字が伏せ字になるだけでなくIMEが無効になっているので、日本語が入力できないのだ。直接入力するのではなくコピーアンドペーストすれば入力できないことはないが、半角文字が使われていないとかいわれて受け付けられない場合もあるだろう。
パスワードの入力にpasswordフィールドを使っているのは、入力画面を盗み見るショルダーハッキング対策だと思うが、入力した本人にも見えないので、正しく入力できているのか確認しにくいという問題もある。(特に新しいパスワードを登録する場合)
counter:19,170
CGI 暗号 2016年08月22日 12:22 編集
パスワードを保存する必要のあるCGIでは、生のパスワードのまま保存するより、ハッシュ化したほうが安心ということでこれまですべてcrypt関数でハッシュ化した上で保存していました。
このcrypt関数は手軽に使えて便利なのですが、有効なパスワードの文字数が8文字までという制限があります。
たとえば、「password123」というパスワードをcryptでハッシュ化して保存すると、9文字以降は無視されるため、「password」でも、「password012」でも正しいパスワードと認識されてしまいます。
このcrypt関数は手軽に使えて便利なのですが、有効なパスワードの文字数が8文字までという制限があります。
たとえば、「password123」というパスワードをcryptでハッシュ化して保存すると、9文字以降は無視されるため、「password」でも、「password012」でも正しいパスワードと認識されてしまいます。
Digest::MD5モジュールを使う
これは、やはりマズイので、何とかできないか調べてみました。counter:17,664
PHP 暗号 2016年08月22日 12:20 編集
パスワードをハッシュ化する場合、perlでは、crypt関数を使うと有効な文字列が8文字までという制限が有るため、MD5モジュールを使ってハッシュ化していたが、PHPの場合は逆にcryptを使った方が強度は高いようだ。
ハッシュ化の目的は、サーバー上に保存したパスワードが万一漏洩しても、元のパスワードが知られないようにするためで、この場合復号する必要は無い。ハッシュ化されたパスワードと元のパスワードを照合して、ハッシュ化されたものが元のパスワードから生成されたものであることがわかりさえすればいい。
PHPでmd5()関数を使うと、ハッシュ値と呼ばれる32桁の16進数に変換される。
「abcd」とハッシュ化された文字列は1対1の対応で、「abcd」を何度md5でハッシュ化しても「e2fc714c4727ee9395f324cd2e7f331f」になる。
このハッシュ値から元の文字列を得る方法はない。つまり「e2fc714c4727ee9395f324cd2e7f331f」から元の「abcd」を得ることはできないということが、秘匿性を守る根拠になっている。
ところが、ハッシュ値のデータベースから元の値を得るモジュールなるものが存在するらしい。
ハッシュ化の目的は、サーバー上に保存したパスワードが万一漏洩しても、元のパスワードが知られないようにするためで、この場合復号する必要は無い。ハッシュ化されたパスワードと元のパスワードを照合して、ハッシュ化されたものが元のパスワードから生成されたものであることがわかりさえすればいい。
PHPでmd5()関数を使うと、ハッシュ値と呼ばれる32桁の16進数に変換される。
$str = 'abcd';実行結果
$md5 = md5($str);
echo $md5;
e2fc714c4727ee9395f324cd2e7f331fたとえば上記のように「abcd」という文字列をmd5でハッシュ化すると、「e2fc714c4727ee9395f324cd2e7f331f」という文字列が得られる。
「abcd」とハッシュ化された文字列は1対1の対応で、「abcd」を何度md5でハッシュ化しても「e2fc714c4727ee9395f324cd2e7f331f」になる。
このハッシュ値から元の文字列を得る方法はない。つまり「e2fc714c4727ee9395f324cd2e7f331f」から元の「abcd」を得ることはできないということが、秘匿性を守る根拠になっている。
ところが、ハッシュ値のデータベースから元の値を得るモジュールなるものが存在するらしい。
counter:12,688