uNIX/Linuxシステムでのパスワードの最大許容長は何ですか?
システムが暗号化ハッシュを使用してパスワード(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
_に一致する可能性が一致する可能性は非常に低いためです。また、多くのクラッカーがWordリスト、名前リスト、およびこれらのリストの変異を試行して使用するため、適切なパスワードを選択してください(つまり、Wordが「魚」の場合、_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は、使用している暗号化ハッシュのタイプを指定します。 saltはランダムに生成された文字列であり、既知のハッシュの事前計算されたテーブルから保護するために、キー(プレーンテキストパスワード)と連結されます。ハッシュは、saltとキー/パスワードから作成された暗号化ハッシュです。パスワードフィールドが_$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月までの期間はわかりませんが、ほとんどすべてのディストリビューションでハッシュが使用されていると思います。
Ubuntuの現在の12.04および14.04 LTS(長期サポートリリース)は、/ etc/shadowファイル内のハッシュの前に_$6$
_を付加するとわかるように、デフォルトでSHA-512を使用するようです。
_catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
_
ハッシュアルゴリズムで許可されているキーまたはパスワードの長さだけが、許可されているパスワードのサイズを決定する唯一の方法ではありません。もう1つの興味深い項目は、プログラムの記述方法とプログラム自体がサポートする長さです。最近のすべてのpasswdプログラムと、おそらくLinuxのほとんどのcrypt(3)
関数。長いlongの暗号化(少なくともMD5が使用されたため、おそらくその前に)により、実際のキーの文字ポインターが許可されました。これは、受け入れるキーの長さの唯一の制限は、プログラムが使用できるRAMの量に基づいていることを意味しますが、ほとんどの場合、これは誰よりもはるかにはるかに長いパスワードです思い出すことができるでしょう(何百万ものキャラクター?)。
これは、パスワードの長さに関する質問への回答になります。私が助けてくれたことを願っています。
参照:
使用する認証モジュールによって異なります。最近のLinuxシステムでは、パスワードの長さに上限はありません。一部の古いシステムでは、パスワードストレージシステムによって制限が課される場合があります。一般的な最大数は8、40、および255のようです。
パスワードの保存方法、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までポンプで送りたいです...):