Passwords
用於加密 Linux 密碼的算法是什麼?
我在分配過程中註意到,如果我創建一個帶有密碼的使用者(
azerty
例如),然後呼叫命令更改密碼但給他完全相同的密碼:passwd user >> azerty
儲存在
./etc/shadow
更改中的加密字元串(儘管密碼未更改)。這裡使用什麼算法?
這不是加密,而是單向雜湊。
有一些不同的密碼散列通常用於 Linux 系統使用者的密碼,它們列在crypt(3)的手冊頁中
第一個是原始的 crypt 算法,它只支持 8 個字元的密碼(以及其他缺陷),希望你再也見不到它了。
第二種是基於 MD5 的 md5crypt ($$ a $$,$$ b $$),標有
$1$
。它被認為是過時的,主要是因為它不支持更改迭代量,即計算成本。目前更多使用的是基於SHA-256 和 SHA-512 的雜湊、sha256crypt 和 sha512crypt,它們在結構上與 md5crypt 相似,但支持可變數量的迭代。它們分別標有
$5$
和$6$
。正如@SEJPM 很快評論的那樣,sha512crypt ($6$
) 至少是 Ubuntu 和 Debian 目前預設使用的。對於
$1$
,$5$
, 和$6$
, 標識符後面的字元直到下一個$
是鹽,它是在更改密碼時隨機生成的。剩下的選項,不在主線 glibc 中是基於 Blowfish 的bcrypt,標有
$2a$
(或另一個字母)。Bcrypt 也使用鹽。有關密碼散列的更多資訊,以及為什麼使用鹽以及為什麼越慢越好,請參閱 “如何安全地散列密碼?” 在 security.SE 上。