システムが暗号化ハッシュを使用してパスワードを保存する場合 (MD5、SHA1 など)、これらのハッシュは任意の量のデータで作成できるため、パスワードの長さ自体に制限はありません。 MD5 または SHA1 ハッシュは、ハード ドライブ全体に対して作成できます。これは一般的に法医学目的で行われます。1 ビットでもわずかに変更された場合、非常に異なるハッシュが作成され、データが変更されたことを確認できるからです。これは、これらのまったく同じアルゴリズムを使用して、データが改ざんされているかどうかをテストできることを意味します。 Linux (少なくとも現在の Linux) は、これらと同じハッシュ関数を使用します。パスワードを要求すると、指定したパスワードの暗号化ハッシュを作成し、このハッシュが保存されているパスワードと一致するかどうかを確認します。これはまた、パスワードがプレーンテキストで保存されていないことを意味し、失われたパスワードを回復する唯一の方法は、現在のハッシュと一致するものが見つかるまで、パスワード ハッシュの後にパスワード ハッシュを生成するブルート フォース テストを実行することです。パスワード。
これらのハッシュを使用することには、ハッシュのサイズが有限であるというわずかな欠点があります。たとえば、MD5 ハッシュは 128 ビットです。これは、MD5 ハッシュには 2^128
しかないことを意味します または 340,282,366,920,938,463,463,374,607,431,768,211,456
可能な組み合わせ。これは大きな数字ですが、これが意味することは、同じハッシュを生成する 2 つの異なるアイテムまたはキーがある場合、いわゆるハッシュ衝突が発生する可能性があるということです。理論的には、鍵のサイズが大きいほど、衝突の可能性が低くなり、パスワードのブルート フォースにかかる時間が長くなりますが、それはエントロピーとそれが できる 時間を厳密に評価することです しかし、たとえそれがハッシュの衝突であっても、彼らが試みる最初のエントリが一致するものになる可能性もあります。一般的に言えば、より大きなキー サイズを持つハッシュを使用する方が実際には安全です。これが MD5 であると仮定すると、最初のパスワードが 340,282,366,920,938,463,463,374,607,431,768,211,456
から一致する可能性があるからです。 一致する可能性は非常に低いです。また、多くのクラッカーが単語リスト、名前リスト、およびこれらのリストの突然変異を使用しようとするため、適切なパスワードを選択してください (つまり、単語が「魚」の場合、fish1234
を試します)。 、 [email protected]#$
など) 総当たり攻撃に頼る前に。
システムが暗号化ハッシュを使用してパスワードを保存しているかどうかを確認する方法は、/etc/shadow
を見てください。 ファイル (root アクセス権があると仮定)。すべての行は user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved
のようにフォーマットされています .パスワード フィールドは $num$
で始まる場合があります (つまり、パスワード フィールドの md5 ハッシュは $1$01234567$b5lh2mHyD2PdJjFfALlEz1
のようになります $1$
で始まる場所 )。これで始まる場合は、システムが暗号化ハッシュを使用していることを意味します。最近のすべてのシステムのパスワード フィールドの形式は $id$salt$hash
です。 . id は、使用している暗号化ハッシュのタイプを指定します。ソルトは、既知のハッシュの事前計算されたテーブルから保護するために、キー (プレーン テキストのパスワード) と連結されるランダムに生成された文字列です。ハッシュは、ソルトとキー/パスワードから作成された暗号化ハッシュです。パスワード フィールドが $num$
で始まる場合 次に、暗号化ハッシュを使用しています。
数字の意味は次のとおりです。
$1$
MD5 を使用していることを意味します$2$
または$2a$
フグを使用していることを意味します$5$
SHA-256 を使用していることを意味します$6$
SHA-512 を使用していることを意味します
SHA-512 は、glibc が提供する使用可能な最適なハッシュです。フグがどれほど強力かはわかりませんが、glibc の一部ではないため、追加された特定のディストリビューションでのみ利用できます。 SHA-512 は、衝突が予想される前に 512 ビット キーまたは 2^512 の可能な組み合わせを生成し、十分に複雑なパスワードを使用すると、コンピューターのクラスターが実際のパスワードまたはハッシュ内の衝突を見つけるのに非常に長い時間がかかります。 .
また、$num$
で始まらないハッシュがある場合 次に、DES を使用しており、8 文字の長さに制限されています。 DES を使用する古いシステム、または少なくともその一部は、任意のサイズのパスワードを使用しますが、最初の 8 文字のみを使用すると思います。これは、パスワードを mybigbigapple
に設定した場合を意味します 誰かがパスワード mybigbigcity
を使用しています DES は mybigbig
のみを使用するため、許可されます。 それ以降のものは破棄されます。
2008 年 4 月にリリースされた 8.04 の Ubuntu では、MD5 ハッシュが使用されていました。 2008 年 10 月にリリースされた 8.10 以降の Ubuntu と、それ以降のすべてのバージョンで SHA-512 ハッシュが使用されています。 2008 年 4 月よりずっと前のことはわかりませんが、少なくとも数年間は、ほとんどすべてのディストリビューションでハッシュが使用されていたと思います。
$6$
でわかるように、Ubuntu の現在の 12.04 および 14.04 LTS (長期サポート リリース) はデフォルトで SHA-512 を使用しているようです。 /etc/shadow ファイルのハッシュの先頭に追加:
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
現在、ハッシュ アルゴリズムに許可されているキーまたはパスワードの長さだけが、許可されているパスワードのサイズを決定する唯一のものではありません。もう 1 つの興味深い項目は、プログラムの作成方法と、プログラム自体がサポートする長さです。最新のすべての passwd プログラムと、おそらくほとんどの crypt(3)
Linux で機能します。 crypt は長い間 (少なくとも MD5 が使用されていたため、おそらくそれ以前から) 実際のキーの文字ポインターを許可してきました。これは、受け入れられるキーの長さの唯一の制限は、プログラムが利用できるRAMの量に基づいていることを意味しますが、おそらく、これはおそらく、人が覚えることができるパスワードよりもはるかに長いものです。 (何百万文字?)
これは、パスワードの長さに関する質問に答える必要があります。お役に立てば幸いです。
参照:
-
crypt(3) man ページ (Ubuntu 14.04)
-
SHADOW(5) man ページ (Ubuntu 14.04)
-
en.wikipedia.org/wiki/Crypt_(Unix)
-
en.wikipedia.org/wiki/Password_strength
-
en.wikipedia.org/wiki/Md5
-
en.wikipedia.org/wiki/Blowfish_(暗号)
-
en.wikipedia.org/wiki/SHA-1
使用する認証モジュールによって異なります。最新の Linux システムでは、パスワードの長さに上限はありません。一部の旧式のシステムでは、パスワード ストレージ システムによって制限が課されている場合があります。一般的な最大値は 8、40、および 255 のようです。
パスワードの保存方法にもよりますが、MD5、SHA1、BlowFish など、保存方法自体によって設定されるパスワードに制限はないと思います。
古い実装では、おそらく 8 文字または 255 文字に制限されている可能性があります。
ただし、これは www.serverfault.com に適した質問のように思えます :)