Trong bài viết này, mình sẽ trình bày về nguyên lý hoạt động về ứng dụng hàm băm cho việc xác thực thông tin và cho chữ ký số, giải thích, cũng như so sánh ưu, khuyết điểm của mỗi loại.
1. Nguyên lý hoạt động về ứng dụng hàm băm cho việc xác thực thông tin
Chú thích:
M
: message – nội dung thông điệp cần mã hóaH(M)
: hash - hàm hash messageM
E(M)
: encrypt - hàm mã hóa messageM
D(M)
: decrypt – hàm giải mã messageM
K
: khóa sử dụng để mã hóa và giải mã (mã hóa đối xứng)
Giải thích nguyên lý hoạt động về ứng dụng hàm băm cho việc xác thực thông tin:
-
Source A: nối thông điệp
M
vàH(M)
lại với nhau, sau đó mang kết quả đó đi mã hóaE(M)
với khóaK
, sử dụng mã hóa đối xứng và gửi cho Destination B. -
Destination B: nhận nội dung gửi từ Source A, giải mã tin nhắn
D(M)
với khóaK
nhận được 2 phần là thông điệpM
vàH(M)
nối với nhau. Tính hash của thông điệpM
ta đượcH
, so sánhH
vớiH(M)
để kiểm tra.
-
Source A: mã hóa
E(H(M))
với khóaK
, sau đó mang kết quảE(H(M))
kết hợp với thông điệpM
làm một và gửi cho Destination B. -
Destination B: nhận nội dung gửi từ Source A là thông điệp
M
vàE(H(M))
kết hợp với nhau. MangE(H(M))
giải mãD(H(M))
với khóaK
để đượcH
, so sánhH
vàH(M)
để kiểm tra.
Bên Source A và Destination B cùng sử dụng một giá trị S
chung (secret key)
-
Source A: kết hợp thông điệp
M
vàS
thành một(M || S)
, sau đó tính hash của(M || S)
đượcH(M || S)
. Kết hợpH(M || S)
vàM
thành một rồi gửi cho Destination B. -
Destination B: nhận nội dung gửi từ Source A là thông điệp
M
vàH(M || S)
kết hợp với nhau. Ghép M nhận được vớiS
, tính hash của(M || S)
đượcH'(M || S)
, sau đó so sánhH'(M || S)
vớiH(M || S)
để kiểm tra.
Bên Source A và Destination B cùng sử dụng một giá trị S
chung (secret key)
-
Source A: kết hợp thông điệp M và S thành một
(M || S)
, sau đó tính hash của(M || S)
đượcH(M || S)
. Kết hợpH(M || S)
vàM
thành một, sau đó mang đi mã hóaE(H(M || S))
với khóaK
rồi gửi cho Destination B. -
Destination B: nhận nội dung gửi từ Source A là mã hóa
E(H(M || S))
. Giải mãD(H(M || S))
với khóaK
nhận được thông điệpM
vàH(M || S)
. Kết hợpM
vớiS
với nhau rồi mang đi hash tạo thànhH'(M || S)
. Sau đó so sánhH'(M || S)
vàH(M || S)
để kiểm tra.
So sánh ưu, khuyết điểm của mỗi dạng:
-
Về tính bảo mật (confidentiality), cả (b) và (c) đều không đảm bảo do không mã hóa thông điệp
M
trước khi gửi đi. -
Về tốc độ tính toán (computation), do (c) không thực hiện mã hóa, nên tốc độ nhanh nhất. Tiếp đến là tốc độ của (b) sẽ nhanh hơn (a) và (d) do (b) chỉ mã hóa
H
còn (a) và (d) mã hóa cả thông điệpM
kết hợp với một nội dung khác. (a) lại nhanh hơn (d) do (a) chỉ thực hiện mã hóa 1 lần trong khi (d) là 2. Vì vậy, (c) > (b) > (a) > (d). -
Về tính toàn vẹn (integrity), do (c) và (d) có sử dụng thêm khóa bí mật
S
chỉ được biết bởi 2 bên nên sẽ đảm bảo toàn vẹn dữ liệu hơn (a) và (b).
2. Nguyên lý hoạt động về ứng dụng hàm băm cho chữ ký số
Chú thích:
M
: message – nội dung thông điệp cần mã hóaH(M)
: hash - hàm hash message ME-asym(M)
: encrypt - hàm mã hóa messageM
(mã hóa kiểu bất đối xứng)E-aym(M)
: encrypt - hàm mã hóa messageM
(mã hóa kiểu đối xứng)D-asym(M)
: decrypt – hàm giải mã messageM
kiểu bất đối xứngD-sym(M)
: decrypt – hàm giải mã messageM
kiểu đối xứngPR
: private key – khóa riêng tư sử dụng để mã hóa bất đối xứngPU
: public key - khóa công khai sử dụng để mã hóa bất đối xứngK
: khóa sử dụng để mã hóa và giải mã (mã hóa đối xứng)
Giải thích nguyên lý hoạt động về ứng dụng hàm băm cho chữ ký số:
-
Source A: mang
H(M)
đi mã hóaE-asym(H(M))
với khóa riêng tưPR
, sau đó mang kết quả kết hợp với thông điệpM
với nhau rồi gửi cho Destination B. -
Destination B: nhận nội dung gửi từ Source A là thông điệp
M
vàE-asym(H(M))
kết hợp với nhau. MangE-asym(H(M))
đi giải mãD-asym(H(M))
bằng khóa công khaiPU
nhận đượcH(M)
. Tính hash của thông điệpM
đượcH'(M)
. Sau đó so sánhH(M)
vớiH'(M)
để kiểm tra.
-
Source A: mang
H(M)
đi mã hóaE-asym(H(M))
với khóa riêng tưPR
, sau đó mang kết quả kết hợp với thông điệpM
với nhau(M || E-asym(H(M)))
rồi mã hóaE-sym(M || E-asym(H(M)))
sau đó gửi cho Destination B. -
Destination B: nhận nội dung gửi từ Source A là mã hóa
E-sym(M || E-asym(H(M)))
. Giải mãD-sym(M || E-asym(H(M)))
với khóaK
được thông điệpM
vàE-asym(H(M))
. Giải mãD-asym(H(M))
với khóa công khaiPU
nhận đượcH(M)
. Tính hash của thông điệpM
đượcH'(M)
. So sánhH(M)
vớiH'(M)
để kiểm tra.
So sánh ưu, khuyết điểm của mỗi dạng:
-
Về tính bảo mật (confidentiality), (a) không đảm bảo do không mã hóa thông điệp
M
trước khi gửi đi -
Về tốc độ tính toán (computation), (a) nhanh hơn (b) do (a) chỉ thực hiện mã hóa 1 lần trong khi (d) là 2.