Nhật ký tự học BE: Ngày 4 - HS256 và RS256
HCM, ngày 23/3/2025
Tiếp tục với Authentication, như mình có trình bày ở bài trước, JWT có 2 cách mã hoá phổ biến là HS256 và RS256. Vậy chính xác thì 2 thứ này là gì?
HS256 (HMAC SHA-256)
- HS256 là thuật toán mã hoá dựa trên HMAC (Hash-based Message Authentication Code) kết hợp với hàm băm SHA-256.
- Sử dụng chung 1 secret key để vừa ký (sign) và xác thực (verify).
Ưu điểm:
- Đơn giản hơn RS256: Chỉ cần 1 secret key để sign & verify.
- Nhanh: HS256 có hiệu suất tốt, phù hợp với hệ thống nhỏ hoặc đơn giản
Nhược điểm:
- Ít bảo mật hơn RS256: Vì dùng chung secret key, nếu bị lộ thì hacker có thể tạo token giả mạo.
- Không phù hợp với hệ thống phân tán: Nếu nhiều server dùng chung secret key, việc chia sẻ key an toàn là một thách thức.
RS256 (RSA SHA-256)
- RS256 là thuật toán mã hoá dựa trên RSA (đặt theo tên bởi 3 nhà phát minh là Ron Rivest, Adi Shamir và Leonard Adleman) kết hợp với hàm băm SHA-256.
- Sử dụng cặp khoá private key để ký và public key để xác thực.
Ưu điểm:
- Bảo mật hơn & phù hợp với hệ thống phân tán: Vì private key chỉ được lưu ở server ký token, còn public key có thể chia sẻ công khai mà không ảnh hưởng tới bảo mật.
Nhược điểm:
- Phức tạp hơn: Cần tạo & quản lý cặp khoá public/private key
- Chậm hơn.
Băm (hash) là gì? Tại sao thường được dùng trong DSA?
Hash là một quá trình chuyển đổi input đầu vào thành một output đầu ra có độ dài cố định. Output này thường được gọi là hash value, còn quá trình chuyển đổi sẽ sử dụng những hàm băm (hash function). Hash được sử dụng cực kỳ phổ biến, đặc biệt trong các trường hợp như là xác thực dữ liệu hay bảo mật.
Một số đặc điểm:
- Output có độ dài cố định.
- Hiệu suất cao với độ phức tạp thời gian thường là O(1).
- Một chiều (one-way): Từ output không thể truy ngược lại input. Đây là lý do hash thường được dùng để lưu mật khẩu hash value.
Một số hàm băm phổ biến:
- MD5
- SHA-1
- SHA-256
- SHA-3
- Bcrypt
All rights reserved