Skip to content

Sha3

0. FileVault context

  • Dùng trong FileVault làm hàm băm mật cho integrity, fingerprinting, và derivation (SHA3-256, SHA3-512).
  • Lựa chọn làm phương án dự phòng song song với SHA-2/KECCAK.

1. Khái niệm, mục tiêu bảo vệ

  • SHA‑3 (Keccak) là chuẩn hàm băm dựa trên sponge construction.
  • Giải quyết: tạo digest cố định từ dữ liệu biến độ dài, kháng collision, preimage, second‑preimage; khác cấu trúc với Merkle–Damgård (không bị length‑extension).
  • Bảo vệ: tính toàn vẹn dữ liệu, nhận dạng duy nhất, cơ sở cho MAC/KDF (khi kết hợp đúng).

2. Toán học, công thức (math markdown)

alt text

3. Cách hoạt động (tóm tắt)

  • Hai giai đoạn: Absorb (hấp thu) và Squeeze (vắt).
  • Absorb: chia input thành block kích thước \(r\), XOR vào phần rate của state, rồi áp dụng permutation Keccak‑f. Lặp cho tất cả block.
  • Squeeze: xuất từng khối \(r\) từ state, nếu cần thêm output thì tiếp tục áp dụng permutation rồi xuất thêm.

4. Cấu trúc dữ liệu

  • State: ma trận 5×5 lanes (mỗi lane \(w\) bit).
  • Permutation Keccak‑f[b]: hàng các bước (θ, ρ, π, χ, ι) thực hiện trên state; sử dụng constants vòng (round constants).
  • Padding: pad10*1 (gồm bit domain‑separation cho SHA‑3).

5. So sánh với các thuật toán khác

  • VS SHA‑2: khác cấu trúc (sponge vs Merkle–Damgård), không dễ bị length‑extension; SHA‑3 không thay thế trực tiếp SHA‑2 nhưng là lựa chọn bổ sung.
  • VS Keccak‑x (original): SHA‑3 có domain separation/padding khác so với Keccak submitter.

6. Luồng hoạt động (flow)

  • Input -> Padding (pad10*1 + domain) -> Split vào blocks r-bit
  • For each block: state.rate ^= block; state = Keccak‑f(state)
  • Output: lấy ra từ state.rate; lặp khi cần.

Mermaid (sơ đồ đơn giản):

flowchart TD
    In[Input] --> Pad[Padding pad10*1]
    Pad --> Split[Split vào block r-bit]
    Split --> Absorb[Absorb: XOR vào state.rate]
    Absorb --> Perm[Keccak-f permutation]
    Perm --> Check{Còn block?}
    Check -- Yes --> Absorb
    Check -- No --> Squeeze[Squeeze: xuất từ state.rate]
    Squeeze --> Out[Digest/Stream]
Hold "Alt" / "Option" to enable pan & zoom

7. Các sai lầm triển khai phổ biến

  • Không dùng đúng padding hoặc domain‑separation (dẫn tới colliding với biến thể khác).
  • Endianness/bit ordering sai khi đọc/ghi lanes.
  • Không xóa state nhạy cảm khỏi bộ nhớ.
  • Không thực hiện các phép toán ở thời gian cố định khi dùng trong KDF/MAC có khóa (side‑channel).
  • Dùng SHA3 thay cho SHAKE khi cần output biến độ dài (hoặc ngược lại) sai mục đích.

8. Threat Model

  • Tấn công cryptanalytic: tìm collision, preimage.
  • Tấn công implementation: side‑channel (timing, cache), fault injection.
  • Tấn công phân phối/thoán đổi padding hoặc domain separation.
  • Mối nguy từ reuse state hoặc re‑initialization sai.

9. Biện pháp giảm thiểu

  • Sử dụng thư viện đã review và chuẩn (ví dụ OpenSSL/libkeccak/libcrypto) thay vì tự triển khai.
  • Kiểm tra padding và domain‑separation.
  • Xóa state khi không còn dùng.
  • Thiết kế constant‑time cho phần nhạy cảm (Mở khoá, KDF).
  • Giới hạn thông tin lỗi và logging.

10. Test Vectors (cách sinh kiểm tra)

  • Sinh bằng openssl / program để đảm bảo kết quả trong môi trường:
    • echo -n "" | openssl dgst -sha3-256
    • echo -n "abc" | openssl dgst -sha3-256
    • echo -n "" | openssl dgst -sha3-512
  • So sánh với NIST/Keccak team official vectors (tham khảo phía dưới).

11. Code (ví dụ ngắn Python)

Python
1
2
3
import hashlib
d = hashlib.sha3_256(b"abc").hexdigest()
print(d)

- Ghi chú: Python 3.6+ hỗ trợ sha3_* trong hashlib.

12. Checklist bảo mật (nhỏ gọn)

  • Dùng implementation được audit.
  • Kiểm tra đúng padding và domain bits.
  • Xử lý endianness khi thao tác lanes.
  • Xóa state sau dùng/xuất.
  • Đảm bảo constant‑time ở phần nhạy cảm.
  • Kiểm tra test vectors tự động trong CI.
  • Không dùng SHA3 làm MAC thay cho HMAC trừ khi biết rõ cơ chế (dùng KMAC nếu cần).

Nguồn tham khảo
- Keccak team: https://keccak.team
- NIST FIPS 202 (SHA‑3): https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf
- OpenSSL docs / hashlib docs

Tài liệu bổ sung: xem NIST vectors chính thức và Keccak specs để đối chiếu test vectors chính xác.