Giới thiệu về lệnh
Lệnh hitls mac là một phần của bộ công cụ mật mã openHiTLS, được sử dụng để tính toán Message Authentication Code (MAC). MAC là một kỹ thuật xác nhận tính toàn vẹn và tính chân thực của dữ liệu bằng cách sử dụng một khóa bí mật chung và một thuật toán cụ thể. Điều này giúp đảm bảo dữ liệu không bị giả mạo, thay đổi hoặc xóa trong quá trình truyền tải hoặc lưu trữ.
Cú pháp cơ bản
hitls mac [tùy chọn]
Chú thích: Tùy chọn cần được sắp xếp theo thứ tự "tùy chọn bắt buộc + tùy chọn đọc/ghi (nếu có) + tùy chọn khác (nếu có)", nhưng thứ tự không ảnh hưởng đến việc thực thi lệnh.
Tùy chọn chính
Tùy chọn bắt buộc
--name <tên thuật toán>: Chọn thuật toán MAC để sử dụng. openHiTLS hỗ trợ nhiều thuật toán khác nhau:- HMAC系列 (dựa trên hàm băm, linh hoạt và dễ sử dụng): hmac-md5, hmac-sha1, hmac-sha224, hmac-sha256, hmac-sha384, hmac-sha512, hmac-sha3-224, hmac-sha3-256, hmac-sha3-384, hmac-sha3-512, hmac-sm3 (thuật toán mật mã thương mại Trung Quốc, phù hợp cho các hệ thống tuân thủ).
- CMAC系列 (dựa trên mã hóa khối, an toàn cao): cmac-aes128, cmac-aes192, cmac-aes256 (độ dài khóa phải phù hợp với thuật toán).
- GMAC系列 (dựa trên chế độ GCM, hiệu suất cao): gmac-aes128, gmac-aes192, gmac-aes256 (cần kết hợp với quy trình mã hóa).
- Thuật toán MAC khác: siphash64, siphash128 (phù hợp cho các thông báo ngắn và tránh va chạm băm), sm4-cbc-mac (chế độ CBC-MAC của thuật toán SM4, thường được sử dụng trong các thiết bị Trung Quốc).
--key <chuỗi khóa>: Nhập khóa dưới dạng chuỗi đậm. Chuỗi này được mã hóa bằng UTF-8 và cần đáp ứng yêu cầu về độ dài của thuật toán được chọn.--hexkey <khóa hex>: Nhập khóa dưới dạng hex, có thể đi kèm với前缀 `0x` hoặc không. Các ký tự hex phải xuất hiện thành cặp, nếu không sẽ được coi là không hợp lệ.--in <tap_tin_nhap>: Chỉ định đường dẫn đến file cần tính MAC. Nếu đường dẫn chứa khoảng trắng, cần đặt trong dấu ngoặc kép (ví dụ:--in "tap_tin_của_bạn.txt"). Nếu không chỉ định, dữ liệu sẽ được đọc từ stdin.--out <tap_tin_xuat>: Chỉ định đường dẫn để lưu kết quả MAC. Nếu file đã tồn tại, nó sẽ bị ghi đè. Nếu không chỉ định, kết quả sẽ được hiển thị trên stdout.--binary: Xuất kết quả MAC dưới dạng nhị phân. mặc định là xuất dưới dạng hex (kí tự lowercase). Tùy chọn này phù hợp cho các trường hợp cần xử lý thêm kết quả MAC.--help: Hiển thị thông tin trợ giúp đầy đủ, bao gồm các thuật toán được hỗ trợ và ví dụ sử dụng.--version: Hiển thị phiên bản hiện tại của openHiTLS và thông tin biên dịch của lệnhhitls mac.
Tùy chọn khóa (chọn một trong hai)
Tùy chọn đọc/ghi
Tùy chọn khác
Ví dụ sử dụng
VD1: Tính HMAC-SHA256 cho một file
hitls mac --name hmac-sha256 --key "bi_mat_16_ky_tu" --in document.txt --out mac.txt
Giải thích: Tính HMAC-SHA256 cho file document.txt sử dụng khóa 16 byte và lưu kết quả vào mac.txt dưới dạng hex.
VD2: Sử dụng khóa hex cho file nhị phân
hitls mac --name hmac-sha256 --hexkey 0x4D795365637265744B65793132333435 --in data.bin
Giải thích: Khóa hex 0x4D79...3435 tương ứng với chuỗi "MySecretKey12345", tính MAC cho file data.bin và hiển thị kết quả trên终端.
VD3: Đọc dữ liệu từ stdin
echo -n "Xin chào, Thế giới!" | hitls mac --name hmac-sha256 --key "mat_bi"
Giải thích: Sử dụng echo -n để tránh thêm ký tự newline vào dữ liệu đầu vào, đảm bảo MAC được tính toán chính xác.
VD4: Tạo MAC nhị phân
hitls mac --name cmac-aes128 --key "aes128_bi_mat" --in file.dat --out mac.bin --binary
Giải thích: Tạo MAC AES-128 CMAC cho file file.dat và lưu kết quả dưới dạng nhị phân vào mac.bin. Bạn có thể sử dụng hexdump mac.bin để xem kết quả dưới dạng hex.
VD5: Sử dụng thuật toán国密 SM3
hitls mac --name hmac-sm3 --key "bi_mat_quoc_mi-32_ky_tu" --in tuyen_van_quan_trong.doc --out thongbao.txt
Giải thích: Thuật toán SM3 được khuyên dùng với khóa 32 byte, phù hợp cho các hệ thống chính phủ và tài chính.
VD6: Tính toán SM4-CBC-MAC
hitls mac --name sm4-cbc-mac --key "sm4_bi_mat_16_ky_tu" --in data.bin
Giải thích: Thuật toán SM4 yêu cầu khóa có độ dài cố định 16 byte. Chế độ CBC-MAC yêu cầu dữ liệu đầu vào phải được căn chỉnh theo độ dài khối (16 byte), nếu không sẽ được thêm padding tự động.
VD7: Xử lý file lớn (tự động tối ưu)
hitls mac --name hmac-sha512 --hexkey 0x1234567890ABCDEF1234567890ABCDEF --in tap_tin_lớn.zip --out kiem_tra.txt
Giải thích: Công cụ này sẽ tự động xử lý file lớn theo các khối (mặc định 1MB), giúp chiếm ít bộ nhớ và không lo về việc tràn bộ nhớ.
VD8: Kết hợp các lệnh trong ống dẫn
cat logfile.log | grep "quan_trong" | hitls mac --name hmac-sha256 --key "kiem_tra_log" | tee mac_ket_qua.txt
Giải thích: Lọc các dòng chứa từ khóa "quan_trong" từ file log, tính MAC cho các dòng này và lưu kết quả vào mac_ket_qua.txt cũng như hiển thị trên终端.
VD9: Tích hợp vào kịch bản shell
#!/bin/bash
# Kiem tra tap_tin_tam_bao.txt
KEY="bi_mat_tam_bao_24_ky_tu"
FILE="backup.tar.gz"
MAC_DON_GI=$(cat mac_backup.txt)
MAC_THực_tế=$(hitls mac --name hmac-sha3-256 --key "$KEY" --in "$FILE")
if [ "$MAC_THực_tế" = "$MAC_DON_GI" ];
then echo "Kiem tra thanh cong"
else echo "Tap_tin_bị_sửa!" exit 1 fi
VD10: Sử dụng GMAC cùng với mã hóa
# Mã hóa tap_tin và tính GMAC
hitls enc --name aes-256-gcm --key "bi_mat_aes_32_ky_tu" --in plaintext.txt --out ciphertext.bin
hitls mac --name gmac-aes256 --key "bi_mat_aes_32_ky_tu" --in ciphertext.bin --out gmac.tag
Giải thích thuật toán
HMAC (Hash-based MAC)
- Nguyên lý: Kết hợp khóa và dữ liệu theo các giai đoạn sau đó sử dụng hàm băm để tính toán kết quả.
- Ưu điểm: Dễ dàng thực hiện,patibility tốt, hỗ trợ nhiều hàm băm khác nhau.
- Ứng dụng: Xác nhận API, kiểm tra tính toàn vẹn của file, các giao thức mạng như TLS và IPsec.
- Lưu ý: HMAC dựa vào hàm băm, nên cần tránh sử dụng MD5 hoặc SHA-1 cho các hệ thống mới.
CMAC (Cipher-based MAC)
- Nguyên lý: Dựa trên mã hóa khối như AES, sử dụng các phép toán XOR và mã hóa.
- Ưu điểm: An toàn được chứng minh chặt chẽ, chịu đựng tốt các tấn công giả mạo.
- Ứng dụng: Thiết bị IoT, giao dịch tài chính, module mã hóa phần cứng.
- Lưu ý: Độ dài khóa phải phù hợp với thuật toán mã hóa được chọn.
GMAC (Galois MAC)
- Nguyên lý: Dựa trên trường Galois (GF(2^128)) và thường được sử dụng cùng với chế độ GCM.
- Ưu điểm: Hiệu suất cao, phù hợp cho các luồng dữ liệu lớn và có hỗ trợ từ phần cứng.
- Ứng dụng: VPN, truyền thông thời gian thực, kiểm tra dữ liệu lưu trữ lớn.
- Lưu ý: Phải đảm bảo nonce duy nhất cho mỗi thông báo.
Lưu ý an toàn
Yếu tố then chốt: Bảo mật của MAC phụ thuộc hoàn toàn vào việc giữ kín khóa. Nếu khóa bị rò rỉ, cơ chế xác nhận này sẽ失效.
- Quản lý khóa an toàn: Tránh nhập khóa trực tiếp trên dòng lệnh bằng cách sử dụng biến môi trường hoặc file chứa khóa.
- Thay đổi khóa định kỳ: Đề xuất thay đổi khóa mỗi 90 ngày và sử dụng công cụ ngẫu nhiên hóa mạnh mẽ để tạo khóa.
- Độ dài khóa tối thiểu: Phải đáp ứng yêu cầu tối thiểu của thuật toán được chọn (ví dụ: HMAC-SHA256 yêu cầu khóa ≥16 byte).
- Chọn thuật toán an toàn: Đối với các hệ thống mới, ưu tiên HMAC-SHA256, HMAC-SHA3-256, CMAC-AES256.
- Xử lý MAC an toàn: So sánh MAC bằng các hàm so sánh thời gian cố định để chống tấn công thời gian.
- Phòng chống tấn công replay: Thêm timestamp hoặc nonce ngẫu nhiên vào dữ liệu.
- Phòng chống tấn công length extension: Tránh sử dụng SHA-1 hoặc thêm các thông báo nhận dạng cố định vào cuối dữ liệu.
Trạng thái trả về
| Trạng thái | Nghĩa | Lý do phổ biến |
|---|---|---|
| 0 | Thành công | Tính toán MAC đúng và đọc/ghi file thành công |
| 1 | Lỗi cú pháp hoặc tùy chọn không hợp lệ | Chưa chỉ định --name, cấu trúc khóa không đúng, tên thuật toán lỗi ort |
| 2 | Lỗi đọc/ghi file | File đầu vào không tồn tại, không có quyền đọc, hoặc đường dẫn output không có quyền ghi. |
| 3 | Lỗi toán mật mã | Độ dài khóa không phù hợp, lỗi khởi tạo hàm băm, lỗi mã hóa khối. |
| 4 | Lỗi cấp phát bộ nhớ | Hệ thống không đủ bộ nhớ để xử lý các khối dữ liệu. |
Tips về hiệu suất
- Công cụ xử lý file lớn: openHiTLS xử lý file lớn theo các khối (mặc định 1MB), có thể điều chỉnh bằng biến môi trường
HITLS_MAC_BLOCK_SIZE(ví dụ:export HITLS_MAC_BLOCK_SIZE=4194304để sử dụng 4MB). - Tăng tốc phần cứng: Hỗ trợ các指令 như AES-NI, ARM Cryptography Extensions. Kiểm tra bằng
hitls list --hardware. - Sức mạnh xử lý: Trên CPU Intel i7-12700K:
- HMAC-SHA256: ~1.2GB/s
- CMAC-AES256 (với AES-NI): ~3.5GB/s
- GMAC-AES256 (với AES-NI): ~4.0GB/s
- HMAC-SM3 (với tăng tốc phần cứng): ~0.8GB/s
- Xử lý song song: openHiTLS là công cụ một luồng, nhưng có thể xử lý nhiều file cùng lúc bằng các phương pháp shell như
xargs -P 4.
Câu hỏi thường gặp
- Q1: Tại sao MAC tính được không giống mong đợi?
- A1: Có thể do dữ liệu đầu vào khác nhau, lỗi khóa, tên thuật toán không đúng, hoặc lỗi định dạng đầu ra. Đề xuất kiểm tra bằng cách sử dụng
echo -n "nội_dung_fixed". - Q2: Làm cách nào để truyền khóa an toàn?
- A2: Sử dụng file hoặc biến môi trường để lưu trữ khóa, ví dụ:
export MAC_KEY="bi_mat_16_ky_tu"; hitls mac --name hmac-sha256 --key "$MAC_KEY" --in file.txt. - Q3: Sử dụng GMAC một mình cần chú ý gì?
- A3: Phải đảm bảo mỗi thông báo có một nonce duy nhất (12 byte ngẫu nhiên).
- Q4: openHiTLS có xử lý được file cực lớn (ví dụ 100GB) không?
- A4: Có, công cụ này xử lý file theo luồng và các khối dữ liệu, không phụ thuộc vào kích thước file.
Lệnh liên quan
hitls list --mac-algorithms: Hiển thị tất cả thuật toán MAC được hỗ trợ và thông tin chi tiết.hitls dgst: Tính toán băm (hash) cho dữ liệu, không cần khóa.hitls enc: Mã hóa và giải mã file, có thể kết hợp với lệnhhitls macđể đảm bảo cả tính bảo mật và xác nhận.hitls rand: Tạo các số ngẫu nhiên an toàn, ví dụ:hitls rand --hex 16tạo một khóa 16 byte.
Tải và cài đặt openHiTLS
- Địa chỉ tải: openHiTLS: https://gitcode.com/openhitls; libboundscheck: https://gitee.com/openeuler/libboundscheck.git
- Các bước cài đặt:
mkdir build cd build cmake .. make && make install