Băm mật khẩu bằng thuật toán SHA512 có thêm số round để làm gì?

Bài này làm rõ hơn về thuật toán SHA512 để các bạn lớp lập trình thực chiến cho DevOps code thêm chương trình check_root_password.

Cháo thịt bằm và khoa học máy tính

Hệ điều hành Linux chứng thực người dùng, mật khẩu bằng cơ chế PAM. Trong file cấu hình của PAM có thể khai báo thuật toán băm mật khẩu và các giá trị kèm theo của thuật toán đó.

Băm mật khẩu bằng thuật toán SHA512 có 1 giá trị kèm theo là số round. Số round càng lớn thì càng mất thời gian để băm ra được chuỗi băm. SHA512 nếu không có ghi giá trị rounds thì là 5000, tối đa là 999999999.

Khai báo số rounds trong /etc/pam.d/system-auth của PAM như hình dưới

cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authselect is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so try_first_pass nullok
auth        required      pam_deny.so

account     required      pam_unix.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so try_first_pass use_authtok nullok sha512 shadow rounds=10000
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Sau khi đã khai báo rounds là 10000 khác giá trị mặc định là 5000 hãy tạo thêm các user và gán password cho các user bạn sẽ thấy có thêm rounds=10000 trong shadow password file như hình dưới.

User root băm mật khẩu với số rounds mặc định 5000 nên không có ghi ra trong shadow password.

User hieu, utcua băm mật khẩu với rounds 10000 khác mặc định nên có ghi ra trong shadow password.

cat /etc/shadow
root:$6$hxJXi0dqBGB.WHsp$bxxXEGPOLZ0t26ZBlYZszh9geBefivwJFyOM/Kkm3g70Vnnr588Rd/iOaA4pyP2PB6AALYg7XCTRzKp1R.hHv1:19866:0:99999:7:::
bin:*:19469:0:99999:7:::
daemon:*:19469:0:99999:7:::
adm:*:19469:0:99999:7:::
lp:*:19469:0:99999:7:::
sync:*:19469:0:99999:7:::
shutdown:*:19469:0:99999:7:::
halt:*:19469:0:99999:7:::
mail:*:19469:0:99999:7:::
operator:*:19469:0:99999:7:::
games:*:19469:0:99999:7:::
ftp:*:19469:0:99999:7:::
nobody:*:19469:0:99999:7:::
systemd-coredump:!!:19865::::::
dbus:!!:19865::::::
tss:!!:19865::::::
sssd:!!:19865::::::
sshd:!!:19865::::::
chrony:!!:19865::::::
systemd-oom:!*:19865::::::
hieu:$6$rounds=10000$ExzWAhohvAB1Mj2B$FNlZ25PEVjLDDvWWDDdNr6PTD007UuNoCN8VZFJvhBaNYiEZDTVohgWTi9kFG.KT3EUlDE1O5JtMuoUIWeF270:19868:0:99999:7:::
utcua:$6$rounds=10000$uwBKtzltwlWwbsjs$KyK.Y4EdX33lQLKT20/TvVw2F3M9MhiVn9XXcgxd8pVcHPuBnVDa5.QhdNsl4EwsGV3SnE4vCnDisZA37Vw9J.:19868:0:99999:7:::

Chương trình check_root_password lúc này sẽ phải viết phức tạp hơn, phải kiểm tra thêm điều kiện số rounds khác mặc định để băm ra đúng chuỗi băm mật khẩu của SHA512.