我可以在 preseed 的 passwd/user-password-crypted 條目中使用哪些雜湊算法?
當涉及到
passwd/user-password-crypted
preseed 文件中的語句時,大多數範例使用 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]
一些消息來源表明也可以使用 SHA-512:
嘗試使用這樣的雜湊密碼:
$ mkpasswd -m sha-512
$$ … $$ 然後在你的預置文件中:
d-i passwd/user-password-crypted password $6$ONf5M3F1u$bpljc9f1SPy1w4J2br[...]
來自Can’tautomated user creation with preseeding on AskUbuntu。
這比 MD5 略好,但仍然不能很好地抵抗暴力和彩虹表。
我還可以使用哪些其他算法?例如,是否支持 PBKDF2,或者我是否受到 MD5、Blowfish、SHA-256 和 SHA-512 中使用的算法
/etc/shadow
的限制?
您可以使用 /etc/shadow 文件中支持的任何內容。預種子文件中給出的字元串只是放入 /etc/shadow 中。要創建加鹽密碼以使其更加困難,只需將 mkpasswd 與加鹽選項 (-S) 一起使用:
mkpasswd -m sha-512 -S $(pwgen -ns 16 1) mypassword $6$bLyz7jpb8S8gOpkV$FkQSm9YZt6SaMQM7LPhjJw6DFF7uXW.3HDQO.H/HxB83AnFuOCBRhgCK9EkdjtG0AWduRcnc0fI/39BjmL8Ee1
在上面的命令中,鹽是由pwgen生成的。
查看debian-installer 原始碼的適當部分,我們可以看到它只是
usermod USER --password=CRYPTED-PASSWORD
在目標 chroot 內部呼叫。進一步
usermod
的手冊頁暗示該--password
選項接受“加密密碼,由 crypt(3) 返回”。並且“密碼將寫入本地 /etc/passwd 或 /etc/shadow 文件中。”。這表明我們只能使用crypt(3)
手冊頁中描述的加密密碼格式。然而,所有的希望都沒有失去。從前面提到的手冊頁中,我們了解到
crypt
實際上在加密的密碼字元串中包含了一個 salt 欄位,格式為. 所以至少在原則上它應該能抵抗彩虹表。$**hash_id**$**salt**$**hash**
除了彩虹表攻擊,我們還必須考慮暴力攻擊。如果我們查看glibc 的實現,
crypt
我們會發現它實際上使用多輪 SHA-512 來實現密碼拉伸,這並不完全不同,但不幸的是,它沒有使用諸如 PBKDF2 之類的標準方法。此外,我們看到我們實際上可以通過
crypt
使用加密密碼 ($rounds=$
) 中的附加欄位來控制應用的雜湊輪數。查看手冊頁,我們發現這是作為選項mkpasswd(1)
公開的 。-R
使用此功能,我們可以顯著提高預設輪數 5000(請參閱ROUNDS_DEFAULT
原始碼),在我的機器上,這需要不到幾毫秒的時間來計算,比如說,1000 萬輪需要幾秒鐘:> mkpasswd -R 10000000 -m sha-512 mypassword $6$rounds=10000000$Rq30Hdd.0LzWq3x$XRXHvd5MnIi5MD2H8Jtn5W0cjvq4siGtUgWUaETc4QZyvuR4iY0Af.DoNfj1E6SvoHaVotAEjIiOPS3GvwJjM0