web-dev-qa-db-ja.com

MySQLの 'encrypt' / crypt()を使用してパスワードを保存していますか?

ユーザーログインを保存するために、MySQLバックエンドを使用してFTPインスタンスをデプロイする必要があります。

オンラインで調べたところ、Pure-FTPDが見つかりました。ただし、ドキュメントには、パスワードに対してこれらのハッシュ/暗号化オプションのみが許可されていると記載されています。

#MYSQLCrypt md5, cleartext, crypt() or password()

MD5とクリアテキストが要件を超えている場合、crypt()を残すpassword()は明らかに回避する必要があります(MySQLのドキュメントによると)。

Crypt()を使用してデータベースに値を挿入するには、「encrypt」を使用します。これは、crypt()システムコールです。参照: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

つまり、この暗号化方式は実際に機密データを保存するのにどれほど安全かという質問です。ウィキペディアはcrypt()と述べています-

「暗号化された値とキーからパスワードを復元できるキーでパスワードを暗号化するのではなく、パスワード自体をキーとして使用し、パスワードデータベースにはこのキーでパスワードを暗号化した結果が含まれていました。 」

これは素晴らしいようですが、この「パスワード」データベースで情報が見つからないようです。正しくリコールすると、挿入された値も最大16ビットに削除されます。これは本当に安全ではないようです。

これについてのご意見をお待ちしております。

3
Johndoes

documentation を読んだ場合:SHA1、MD5およびMySQL password()はレガシーな理由でのみサポートされており、 scrypt または crypt(3) が推奨されます。しかし、それでは実際にはあなたの質問には答えられないので、どちらを選択するかを強調しておきます。

crypt(3)これはUnixのパスワードハッシュ(暗号化とも呼ばれます)関数です。これは変更されたDESユーザーごとの多様化のためにシステムクロックに基づく12ビットソルトを使用する暗号です。この関数の本当にマイナス面は、8つしか必要としないことですASCII文字(56ビットに等しい)をキーとして使用します。そのキーを使用して、64ビットの0ストリングと変更されたDES暗号が暗号化されます。出力は再び暗号化されます。キーを使用してこの手順が25回繰り返されます。この繰り返しは、辞書攻撃を遅くするために選択されました。ただし、crypt(3)パスワードハッシュのクラックはそれほど重要ではなく、ユーザーのパスワードの強度に大きく依存します。 、このソリューションは1970年代にさかのぼり、すべての最新のUnix/Linuxシステムは、SHA-256やSHA-512などの最新のハッシュアルゴリズムを使用します。

scryptこのメソッドはColin Percivalによって開発され、パスワードのハッシュは主にCPUハードであり、メモリハードではないことを確認しました。パスワードハッシュアルゴリズムがCPUのみに限定されている場合の問題は、CPUの数が多いほど、ブルートフォースをすばやく実行できることです。制限要因はメモリとCPU能力です。したがって、scryptは、CPUハードアプローチをメモリハードアプローチで拡張する一連の関数で構成されています。

結論どちらのパスワード保護方法も選択できる場合は、crypt(3)ではなくscryptを使用します。その理由は、crypt(3)は実際にはすでに非推奨であり、scryptはブルートフォース攻撃に対する保護を強化するためです。ただし、ソリューションを提供する必要があるユーザーの数にも依存します。当然、CPU-、メモリ-ハード機能は、ブルートフォース時だけでなく、通常の認証時にも、これを提供しない機能と比較してより多くのリソースを使用します。

1
Zonk