回答:
システムが暗号化ハッシュを使用してパスワード(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つの異なるアイテムまたはキーがある場合、ハッシュコリジョンと呼ばれるものを持つことができることを意味します。キーサイズ、衝突の確率が低いと、もはやそれはパスワードをブルートフォースするために取るべきであるが、それは厳密にエントロピーを評価し、どのくらいの時間がされて理論的には、より大きなCANただし、ハッシュの衝突であっても、最初に試行するエントリが一致する可能性があります。一般的に言えば、より大きなキーサイズのハッシュを使用する方が本当に安全です。これは、これがMD5である場合、一致する340,282,366,920,938,463,463,374,607,431,768,211,456
可能性のある最初のパスワードが一致する可能性は極めて低いからです。また、多くのクラッカーは、パスワードのブルートフォースに頼る前に、単語リスト、名前リスト、およびこれらのリストの突然変異(つまり、単語が "魚"の場合は、試行fish1234
するfish!@#$
など)を試みるため、適切なパスワードを選択します。
システムが暗号化ハッシュを使用してパスワードを保存しているかどうかを確認するには、/etc/shadow
ファイルを調べます(ルートアクセス権がある場合)。すべての行はのようにフォーマットされ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
を使用するmybigbig
と、DESのみが使用され、それ以降は破棄されるため、パスワードが許可されることを意味します。
2008年4月にリリースされた8.04のUbuntuでは、MD5ハッシュが使用されていました。2008年10月にリリースされた8.10からのUbuntu、およびそれ以降のすべてのバージョンはSHA-512ハッシュを使用します。私は2008年4月までどれくらい前かわかりませんが、ほとんどのディストリビューションはハッシュを使用していました。
Ubuntuの現在の12.04および14.04 LTS(長期サポートリリース)は、デフォルトでSHA-512を使用しているように見え$6$
ます。これは、/ etc / shadowファイルのハッシュの先頭に追加されていることがわかります。
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
現在、ハッシュアルゴリズムに許可されているキーまたはパスワードの長さは、パスワードのサイズを決定する唯一のものではありません。関心のあるもう1つの項目は、プログラムの作成方法と、プログラム自体がサポートする長さです。すべての最新のpasswdプログラムと、おそらくcrypt(3)
Linuxのほとんどの機能。(少なくともMD5が使用されていて、おそらくその前に)long longのcryptは、実際のキーの文字ポインターを許可しました。これは、受け入れるキーの長さの唯一の制限は、プログラムが利用できるRAMの量に基づいていることを意味しますが、おそらく、これはおそらく誰もが覚えることのできるパスワードよりもはるかに長いです(数百万のキャラクター?)。
これは、パスワードの長さに関する質問に答える必要があります。お役に立てば幸いです。
参照:
パスワードの保存方法に応じて、MD5、SHA1、BlowFishなど、保存方法自体によって設定されるパスワードに制限はないと思います。
古い実装には、おそらく8文字または255文字の制限があります。
これは、www.serverfault.comに適した質問のように見えますが、:)
passwdコマンドには、暗号化のためのmcryptコマンドが含まれています。mcryptのソースコードによると、stdinの最大サイズは512文字(暗号)に制限されています-しかし、これは2年前でした....-(この回答を数時間後に更新します)...はい...ソースコードでディレクトリsrcに2.6.8のmcryptがあり、ファイルgetpass.cがあります-最初は静的なchar値として値512が設定されています。(私はそれを1.4 GBまでポンプアップしたいと思います...):