web-dev-qa-db-ja.com

preseedのpasswd / user-password-cryptedエントリでどのハッシュアルゴリズムを使用できますか?

Preseedファイルのpasswd/user-password-cryptedステートメントに関しては、ほとんどの例でMD5ハッシュを使用しています。例:

# Normal user's password, either in clear text
#d-i passwd/user-password password insecure
#d-i passwd/user-password-again password insecure
# or encrypted using an MD5 hash.
#d-i passwd/user-password-crypted password [MD5 hash]

Debianの付録B. preseedingを使用したインストールの自動化 から。

いくつかの情報源は、SHA-512を使用することも可能であることを示しています。

次のようなハッシュ化されたパスワードを使用してみてください。

$ mkpasswd -m sha-512

[...]

そして、あなたのpreseedファイルで:

d-i passwd/user-password-crypted password $6$ONf5M3F1u$bpljc9f1SPy1w4J2br[...]

から AskUbuntuへの事前シードではユーザー作成を自動化できません

これはMD5よりも少し優れていますが、ブルートフォースやレインボーテーブルに対してはあまり抵抗しません。

他にどのようなアルゴリズムを使用できますか?たとえば、PBKDF2はサポートされていますか、それとも/etc/shadowで使用されているアルゴリズム、つまり MD5、Blowfish、SHA-256およびSHA-512 によって制限されていますか?

5

/ etc/shadowファイルでサポートされているものなら何でも使用できると思います。 preseedファイルで指定された文字列は、/ etc/shadowに配置されるだけです。ソルトされたパスワードを作成してより困難にするためには、skオプション(-S)を指定したmkpasswdを使用するだけです。

mkpasswd -m sha-512 -S $(pwgen -yns 16 1) mypassword
$6$bLyz7jpb8S8gOpkV$FkQSm9YZt6SaMQM7LPhjJw6DFF7uXW.3HDQO.H/HxB83AnFuOCBRhgCK9EkdjtG0AWduRcnc0fI/39BjmL8Ee1

上記のコマンドでは、ソルトはpwgenによって生成されます。

2
mrossi

debian-installerソースコード の適切な部分を見ると、ターゲットのchroot内で単に_usermod USER --password=CRYPTED-PASSWORD_を呼び出していることがわかります。

さらにusermodのマンページは、_--password_オプションが「crypt(3)によって返される暗号化されたパスワード」を受け入れることを示唆しています。そして、「パスワードはローカルの/ etc/passwdまたは/ etc/shadowファイルに書き込まれます。」これは、crypt(3) manページで説明されている暗号化されたパスワード形式のみを使用できることを示唆しています。

しかし、すべての希望が失われるわけではありません。前述のmanページから、cryptは実際には暗号化されたパスワード文字列にソルトフィールドを含み、形式は_$hash_id$salt$hash_であることがわかります。したがって、少なくとも原則として、Rainbowテーブルに対して耐性があるはずです。

レインボーテーブル攻撃とは別に、ブルートフォース攻撃を考慮する必要があります。 glibcのcrypt の実装を見ると、SHA-512の複数のラウンドを使用してパスワードストレッチングを実際に実装していることがわかります。 PBKDF2。

さらに、暗号化されたパスワード(_$rounds=$_)の追加フィールドを使用して、cryptによって適用されるハッシュラウンドの数を実際に制御できることがわかります。 mkpasswd(1)のmanページを見ると、これが_-R_オプションとして公開されていることがわかります。この機能を使用すると、デフォルトのラウンド数5000(ソースコードの_ROUNDS_DEFAULT_を参照)を大幅に引き上げることができます。私のマシンでは、計算にかかる時間は数ミリ秒未満であり、たとえば、数百万ドルかかるため、代わりに秒:

_> mkpasswd -R 10000000 -m sha-512 mypassword
$6$rounds=10000000$Rq30Hdd.0LzWq3x$XRXHvd5MnIi5MD2H8Jtn5W0cjvq4siGtUgWUaETc4QZyvuR4iY0Af.DoNfj1E6SvoHaVotAEjIiOPS3GvwJjM0
_
2
Daniel G.

レインボーテーブルとブルートフォースはここでは関係ありません。

Sha-512パスワードはソルトされます。つまり、ハッシュが何であっても、パスワードはソルト値(この場合はONf5M3F1u)で始まります。レインボーテーブルを生成するには、「ONf5M3F1u」で始まるすべての入力可能な文字列のsha-512ハッシュの完全なリストを生成する必要があります。

理論上のハッシュアルゴリズム「CSUM-2」を使用したとします。これは、単純に文字を加算し、最下位ビットから2ビットのハッシュを生成します。 CSUM-2のRainbowテーブルは次のようになります。

0 d
1 a
2 b
3 c

関連するLSBは2つだけなので、実際には4つの塩(d、a、b、c)があることに注意してください。

したがって、ソルトを使用したパスワード「b」の4つのハッシュを想像してみてください。塩が前に付いているので、ハッシュするでしょう。 "db"は "b"だけを取得し、 "ab"は "c"を取得します。

$-1$d$b
$-1$a$c
$-1$b$d
$-1$c$a

Rainbowテーブルを使用してCSUM-2をクラックするには、それぞれ4つのエントリを持つ4つの個別のRainbowテーブルが必要です。

上記のように9文字のソルトでsha-512をクラックするには、62個の完全なRainbowテーブルが必要です。最大9文字の英数字に対応するsha-512 Rainbowテーブルのサイズは864GBです。この種のソルティングでは、62個、つまり52TBのテーブルが必要です。

2 ^ 512は、9文字のパスワードが提供できる以上のものであることに注意してください。 1.3 x 10 ^ 154のハッシュと、1.35 x 10 ^ 19の9文字の英数字のパスワードがあります。パスワードが長いほど、パスワードスペースが大きくなり、エントリが増え、テーブルが大きくなります。これは、塩の数を線形に、塩の長さを指数関数的に乗算します。

誰かがそれらすべてのテーブルを生成して保存する必要があります。

PBKDF2は単に計算を何度も実行します。ただし、PBKDF2出力は常に同じであるため、他のアルゴリズムと同じようにPBKDF2をクラックするRainbowテーブルに戻ります。

PAMはroundsパラメーターを使用してキーストレッチを実行することもできます。デフォルトは5,000、最小は1,000です。 rounds=65536は、ログイン試行ごとにSHA-512を2 ^ 16回実行します。これにより、ブルートフォーシングが遅くなりますが、事前に計算されたRainbowテーブルはまだ関係ありません。レインボーテーブルを構築して保管することは、前述のように困難です。

0
John Moser