Bài viết mới nhất

Tổng 2300 bài
Bảo mật 22/09/2026 6 phút

mTLS: khi server cũng đòi client trình chứng chỉ — xác thực hai chiều tận tầng TLS

HTTPS thường chỉ có client xác minh server. mTLS lật thêm một nửa: server cũng bắt client trình chứng chỉ hợp lệ. Bài này tự dựng một CA nội bộ bằng openssl, ký cert cho server và client, rồi đo output thật ba tình huống: client hợp lệ bắt tay thành công, client không cert bị từ chối, và client giả cùng tên nhưng CA khác cũng bị chặn — vì danh tính đến từ chữ ký CA, không phải cái tên.

Bảo mật 22/09/2026 6 phút

Xoay khoá mà không mã hoá lại cả kho: bao khoá (envelope encryption) và key-id

Đổi khoá mã hoá thì phải giải mã rồi mã hoá lại hàng triệu bản ghi? Không. Bài này dựng demo thật bằng python: mô hình bao khoá KEK bọc DEK, mỗi bản ghi lưu kèm kek_id. Xoay khoá chỉ cần re-wrap DEK vài chục byte, dữ liệu giữ nguyên; dữ liệu cũ vẫn giải được; và chỉ thu hồi khoá cũ sau khi mọi bản ghi đã chuyển.

Bảo mật 22/09/2026 6 phút

So sánh hằng thời gian: vì sao dùng == để so token là lỗ hổng đo được

So sánh chuỗi bí mật bằng == trông vô hại, nhưng nó thoát sớm ở byte sai đầu tiên — và thời gian chạy rò rỉ số byte đúng. Bài này đo THẬT bằng Go: hàm so thoát sớm tăng đều từ 1,2 ns (0 byte đúng) tới 8,6 ns (31 byte đúng), một timing oracle rõ rệt; còn ConstantTimeCompare phẳng lì ~9,2 ns bất kể khớp bao nhiêu.

Bảo mật 22/09/2026 7 phút

Argon2: vì sao băm mật khẩu phải CHẬM và tốn bộ nhớ có chủ đích

Dùng SHA-256 để băm mật khẩu là một sai lầm bảo mật kinh điển — vì nó quá nhanh. Bài này đo THẬT bằng Go: SHA-256 chạy 31 triệu lần/giây mỗi lõi, trong khi Argon2id chậm hơn ~559.000 lần có chủ đích. Đo cách tăng bộ nhớ (8→128 MiB) kéo thời gian băm từ 3,7 ms lên 324 ms, và vì sao tính bộ-nhớ-cứng của Argon2 vô hiệu hoá GPU dò mật khẩu.

Công cụ 22/09/2026 5 phút

grep và regex: vì sao "ERROR|WARN" không chạy, và ba phương ngữ BRE/ERE/PCRE

Ai cũng dùng grep, nhưng ít người biết grep có tới ba phương ngữ regex — và dùng nhầm là nguyên nhân của cái bẫy kinh điển: grep "ERROR|WARN" không tìm "ERROR hoặc WARN". Bài này chạy grep thật trên log mẫu: đếm và đảo, BRE vs ERE, trích IP bằng -o, lấy giá trị sau user= bằng PCRE \K, và tìm từ lặp bằng backreference.

Công cụ 22/09/2026 6 phút

sed thực chiến: thay thế, địa chỉ, nhóm bắt — và bẫy sed -i giết script khi đổi máy

sed là con dao đa năng để biến đổi văn bản theo dòng, nhưng cú pháp cô đọng khiến nhiều người chỉ dùng mỗi s/a/b/. Bài này chạy sed thật: cờ g/N/I, chọn dòng theo địa chỉ và mẫu, xoá dòng, nhóm bắt \1 \2, in chọn lọc thay grep — và cái bẫy sed -i khác nhau giữa Linux (GNU) và macOS (BSD) khiến script hỏng khi chuyển máy.