Download - Chủ đề 9: Hàm băm mật mã Hash & MAC
Chủ đề 9:
Hàm băm mật mãHash & MAC
Chủ đề 9:
Hàm băm mật mãHash & MAC
ThS. Trần Minh TriếtThS. Trần Minh Triết
Nội dungNội dung
Mở đầuMở đầuĐặt vấn đềĐặt vấn đề
Một số tính chất và yêu cầu an toàn của hàm bămMột số tính chất và yêu cầu an toàn của hàm băm
Phân loạiPhân loại
Kiến trúc hàm bămKiến trúc hàm bămKiến trúc Merkle-DamgårdKiến trúc Merkle-Damgård
Kiến trúc Matyas-Meyer-OseasKiến trúc Matyas-Meyer-Oseas
Kiến trúc Davies-MeyerKiến trúc Davies-Meyer
Kiến trúc Miyaguchi-PreneelKiến trúc Miyaguchi-Preneel
Một số hàm băm cụ thể: MD4, MD5, SHA1Một số hàm băm cụ thể: MD4, MD5, SHA1
MACMAC
Nội dungNội dung
Sử dụng hàm băm mật mã trong chữ ký điện tửSử dụng hàm băm mật mã trong chữ ký điện tửSử dụng tạo chữ ký điện tử (đính kèm)Sử dụng tạo chữ ký điện tử (đính kèm)
Sử dụng tạo chữ ký điện tử (khôi phục được thông tin)Sử dụng tạo chữ ký điện tử (khôi phục được thông tin)
Sử dụng hàm băm mật mã trong mã hóa bất đối xứngSử dụng hàm băm mật mã trong mã hóa bất đối xứngOAEPOAEP
Một số ứng dụng thực tế của hàm bămMột số ứng dụng thực tế của hàm bămChứng nhận thông tinChứng nhận thông tin
Chứng thực người dùngChứng thực người dùng
Liên lạc an toànLiên lạc an toàn
EmailEmail
Các ứng dụng khác…Các ứng dụng khác…
Tính toàn vẹn và tính bí mậtTính toàn vẹn và tính bí mật
Tính toàn vẹnTính toàn vẹn (Integrity): người tấn công không thể (Integrity): người tấn công không thể can thiệp để sửa nội dung thông điệpcan thiệp để sửa nội dung thông điệp
Mã hóaMã hóa chỉ nhằm đảm bảo tính bí mật, không giúp chỉ nhằm đảm bảo tính bí mật, không giúp đảm bảo tính toàn vẹn thông tinđảm bảo tính toàn vẹn thông tin
Người tấn công có thể sửa đổi nội dung thông điệp Người tấn công có thể sửa đổi nội dung thông điệp đã được mã hóa mà không cần biết nội dung thật sự đã được mã hóa mà không cần biết nội dung thật sự của thông điệpcủa thông điệp
Ví dụ: Ví dụ:
Trong đấu giá trực tuyến, có thể thay đổi giá đặt Trong đấu giá trực tuyến, có thể thay đổi giá đặt của đối thủ mà không cần biết nội dung thật sự của của đối thủ mà không cần biết nội dung thật sự của giá đặtgiá đặt
Ý tưởng chính của hàm băm mật mãÝ tưởng chính của hàm băm mật mã
H là hàm nén mất thông tin (lossy compression H là hàm nén mất thông tin (lossy compression function)function)
Hiện tượng đụng độ (Collision): Hiện tượng đụng độ (Collision): HH((xx)=)=HH((xx’) với ’) với xxxx’’
Kết quả của việc băm “nhìn có vẻ ngẫu nhiên”Kết quả của việc băm “nhìn có vẻ ngẫu nhiên”
Thông điệpThông điệp
Thông điệpThông điệprút gọnrút gọn
xx11
xx22
xx33
yy11
yy22
Chuỗi bit có độ dài bất kỳ!Chuỗi bit có độ dài bất kỳ! Chuỗi bit có độ dài cố địnhChuỗi bit có độ dài cố định
Hàm băm mật mã HHàm băm mật mã H
HH có thể áp dụng trên dữ liệu có kích thước bất kỳ có thể áp dụng trên dữ liệu có kích thước bất kỳ
Kết quả của Kết quả của HH là một chuỗi là một chuỗi nn-bit (-bit (nn có định) có định)
Dễ dàng tính giá trị Dễ dàng tính giá trị HH((xx) với ) với xx bất kỳ bất kỳ
HH là hàm một chiều là hàm một chiều
HH an toàn đối với hiện tượng “đụng độ” an toàn đối với hiện tượng “đụng độ”
Tính “một chiều”Tính “một chiều”
Hàm Hàm HH rất khó bị biến đổi ngược rất khó bị biến đổi ngược
Cho trước chuỗi bit ngẫu nhiên Cho trước chuỗi bit ngẫu nhiên yy {0,1}∈{0,1}∈ nn, rất khó , rất khó tìm ra được chuỗi bit tìm ra được chuỗi bit x x sao cho sao cho HH((xx)=)=yy
Ví dụ:Ví dụ:
Brute-force: Với mỗi giá trị Brute-force: Với mỗi giá trị xx, kiểm tra , kiểm tra HH((xx)=)=yy
SHA-1 cho kết quả là chuỗi gồm 160-bitSHA-1 cho kết quả là chuỗi gồm 160-bitGiả sử phần cứng cho phép thực hiện 2Giả sử phần cứng cho phép thực hiện 23434 phép thử trong phép thử trong một giâymột giây
Có thể thực hiện 2Có thể thực hiện 25959 phép thử trong một năm phép thử trong một năm
Cần 2Cần 2101101 (~ 10 (~ 103030) năm để biến đổi ngược SHA-1 với giá ) năm để biến đổi ngược SHA-1 với giá trị ngẫu nhiên trị ngẫu nhiên yy cho trước cho trước
Tính an toàn đối với hiện tượng đụng độTính an toàn đối với hiện tượng đụng độ
Rất khó có thể tìm được Rất khó có thể tìm được xx, , xx’ sao cho ’ sao cho HH((xx)=)=HH((xx’)’)
Tìm kiếm đụng độ bằng Brute-force chỉ cần O(2Tìm kiếm đụng độ bằng Brute-force chỉ cần O(2n/2n/2), ), không phải O(2không phải O(2nn))
Birthday paradoxBirthday paradox
Cho t giá trị Cho t giá trị xxii và giá trị tương ứng và giá trị tương ứng yyii=h(=h(xxii))
Với mỗi cặp Với mỗi cặp xxii,,xxjj, xác suất đụng độ là 1/2, xác suất đụng độ là 1/2nn
Tổng số cặp Tổng số cặp CC22tt==tt((tt-1)/2 O(∼-1)/2 O(∼ tt22))
Nếu Nếu tt xấp xỉ 2 xấp xỉ 2n/2n/2, số lượng cặp xấp xỉ 2, số lượng cặp xấp xỉ 2nn
Với mỗi cặp, xác suất xảy ra đụng độ là 1/2Với mỗi cặp, xác suất xảy ra đụng độ là 1/2nn, do đó, , do đó, xác suất tìm được một cặp giá trị đụng độ rất gần 1xác suất tìm được một cặp giá trị đụng độ rất gần 1
Birthday ParadoxBirthday Paradox
Ví dụ: Ví dụ:
Gọi Gọi pp((nn) là xác suất tìm được 2 người có cùng ngày ) là xác suất tìm được 2 người có cùng ngày sinh trong nhóm sinh trong nhóm nn người người
Gọi là xác suất 2 người bất kỳ trong nhóm Gọi là xác suất 2 người bất kỳ trong nhóm nn người đều có ngày sinh khác nhau.người đều có ngày sinh khác nhau.
pp((nn) + = 1) + = 1
Với n Với n 365, ta có 365, ta có
)(np )(np
)(np )(np
)!365(365
!365
365
11...
365
21
365
111)(
n
nnp
n
)!365(365
!365
365
11...
365
21
365
111)(
n
nnp
n
An toàn với hiện tượng đụng độ “yếu”An toàn với hiện tượng đụng độ “yếu”
Weak Collision ResistanceWeak Collision Resistance
Cho dãy bit Cho dãy bit xx chọn trước ngẫu nhiên, rất khó tìm được chọn trước ngẫu nhiên, rất khó tìm được xx’sao cho ’sao cho HH((xx)=)=HH((xx’)’)
Người tấn công phải tìm được giá trị đụng độ với giá Người tấn công phải tìm được giá trị đụng độ với giá trị trị xx cụ thể cho trước. Điều này khó hơn việc tìm và cụ thể cho trước. Điều này khó hơn việc tìm và chỉ ra một cặp giá trị chỉ ra một cặp giá trị xx và và xx’ đụng độ với nhau.’ đụng độ với nhau.
Tấn công Brute-force: O(2Tấn công Brute-force: O(2nn))
Nhận xét: Nhận xét: An toàn với hiện tượng đụng độ “yếu” An toàn với hiện tượng đụng độ “yếu” không đảm bảo an toàn với hiện tượng đụng độkhông đảm bảo an toàn với hiện tượng đụng độ
Tính chất của hàm bămTính chất của hàm băm
An toàn đối với tấn công “tiền ảnh”An toàn đối với tấn công “tiền ảnh”
Preimage resistancePreimage resistance
cho trước cho trước yy, rất khó tìm được giá trị x sao cho , rất khó tìm được giá trị x sao cho HH((xx)=)=yy
An toàn đối với tấn công “tiền ảnh thứ 2” An toàn đối với tấn công “tiền ảnh thứ 2”
22ndnd preimage resistance preimage resistance
cho trước cho trước xx và và yy==HH((xx), rất khó tìm được giá trị ), rất khó tìm được giá trị x’x’x sao cho x sao cho HH((xx’)=’)=HH((xx))
An toàn đối với hiện tượng đụng độ: An toàn đối với hiện tượng đụng độ:
rất khó tìm được hai giá trị phân biệt rất khó tìm được hai giá trị phân biệt xx và và xx’ sao ’ sao cho cho HH((xx’)=’)=HH((xx) )
Phân loại hàm băm mật mãPhân loại hàm băm mật mã
Collision Resistant Collision Resistant Hash Functions Hash Functions
(CRHF)(CRHF)
Collision Resistant Collision Resistant Hash Functions Hash Functions
(CRHF)(CRHF)
One-Way One-Way Hash Functions Hash Functions
(OWHF)(OWHF)
One-Way One-Way Hash Functions Hash Functions
(OWHF)(OWHF)
Manipulation Manipulation Detection CodesDetection Codes
(MDC)(MDC)
Manipulation Manipulation Detection CodesDetection Codes
(MDC)(MDC)
Message Message Authentication CodesAuthentication Codes
(MAC) (MAC)
Message Message Authentication CodesAuthentication Codes
(MAC) (MAC)
CryptographicCryptographicHash FunctionsHash FunctionsCryptographicCryptographic
Hash FunctionsHash Functions
Sử Sử dụng dụng khóakhóa
Sử Sử dụng dụng khóakhóa
Không Không sử dụng sử dụng
khóakhóa
Không Không sử dụng sử dụng
khóakhóa
Universal Universal One-Way One-Way
Hash Functions Hash Functions (UOWHF)(UOWHF)
Universal Universal One-Way One-Way
Hash Functions Hash Functions (UOWHF)(UOWHF)
Kiến trúc Merkle-Damgård Kiến trúc Merkle-Damgård
Khối Khối 11
Khối Khối 11
ffff
LengthLengthpaddingpaddingLengthLengthpaddingpadding
ffff Finali-Finali-sationsation
Finali-Finali-sationsationIVIVIVIV HashHashHashHash
Khối Khối 22
Khối Khối 22
ffff
Khối Khối nn
Khối Khối nn
ffff
Tác giả: Ralph Merkle, Ivan Damgård Tác giả: Ralph Merkle, Ivan Damgård
Hầu hết các hàm băm đều sử dụng cấu trúc nàyHầu hết các hàm băm đều sử dụng cấu trúc này
Ví dụ: SHA-1, MD5Ví dụ: SHA-1, MD5
Kiến trúc Matyas-Meyer-OseasKiến trúc Matyas-Meyer-Oseas
EEEEgggg
HHi i – 1– 1
HHi i
mmiimmii
HHii = = EEg g ((H H ) ) ((mmii) ) mmiiii -1 -1
Kiến trúc “đối ngẫu” với Kiến trúc “đối ngẫu” với kiến trúc kiến trúc Davies-MayerDavies-Mayer
Ở khối đầu tiên, cần sử Ở khối đầu tiên, cần sử dụng giá trị khởi đầu dụng giá trị khởi đầu HH00
Nếu hàm Nếu hàm EE sử dụng sử dụng khóa và khối kích thước khóa và khối kích thước khác nhau, hàm khác nhau, hàm gg cần cần biến đổi biến đổi HHi i -1-1 thành khóa thành khóa phù hợp cho hàm phù hợp cho hàm EE
Kiến trúc Davies-MeyerKiến trúc Davies-Meyer
EEEE
HHi i – 1– 1
HHi i
mm iimm ii
HHii = = EE ((HHi i –1–1)) HHi i –1–1mmii
Kiến trúc “đối ngẫu” với Kiến trúc “đối ngẫu” với kiến trúc kiến trúc Matyas-Matyas-Meyer-OseasMeyer-Oseas
Ở khối đầu tiên, cần sử Ở khối đầu tiên, cần sử dụng giá trị khởi đầu dụng giá trị khởi đầu HH00
Nếu hàm Nếu hàm EE không an không an toàn thì có thể áp dụng toàn thì có thể áp dụng phương pháp fixed point phương pháp fixed point attack đế tấn công hàm attack đế tấn công hàm băm tương ứngbăm tương ứng
Kiến trúc Miyaguchi-PreneelKiến trúc Miyaguchi-Preneel
EEEEgggg
HHi i – 1– 1
HHi i
mmiimmii
HHii = = EEg g ((H H ) ) ((mmii))HHii-1-1mmiiii -1 -1
Mở rộng của kiến trúc Mở rộng của kiến trúc Matyas-Meyer-OseasMatyas-Meyer-Oseas
Ở khối đầu tiên, cần sử Ở khối đầu tiên, cần sử dụng giá trị khởi đầu dụng giá trị khởi đầu HH00
Nếu hàm Nếu hàm EE sử dụng sử dụng khóa và khối kích thước khóa và khối kích thước khác nhau, hàm khác nhau, hàm gg cần cần biến đổi biến đổi HHi i -1-1 thành khóa thành khóa phù hợp cho hàm phù hợp cho hàm EE
MD5MD5
Hàm băm MD4 (Message Digest 4) được Giáo sư Hàm băm MD4 (Message Digest 4) được Giáo sư Rivest đề nghị vào năm 1990. Rivest đề nghị vào năm 1990.
Vào năm sau, phiên bản cải tiến MD5 của thuật toán Vào năm sau, phiên bản cải tiến MD5 của thuật toán này ra đời. này ra đời.
MD5MD5
Khởi gán các biến:Khởi gán các biến: h0 := 0x67452301 h0 := 0x67452301 h1 := 0xEFCDAB89 h1 := 0xEFCDAB89 h2 := 0x98BADCFE h2 := 0x98BADCFE h3 := 0x10325476 h3 := 0x10325476
MD5MD5
Hệ số quay trái Hệ số quay trái RR[[ii]của mỗi chu kỳ:]của mỗi chu kỳ:
RR[ 0..15] := { [ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
7, 12, 17, 22, 7, 12, 17, 22} 7, 12, 17, 22, 7, 12, 17, 22}
RR[16..31] := {[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
5, 9, 14, 20, 5, 9, 14, 20} 5, 9, 14, 20, 5, 9, 14, 20}
RR[32..47] := {[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
4, 11, 16, 23, 4, 11, 16, 23} 4, 11, 16, 23, 4, 11, 16, 23}
RR[48..63] := {[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21,6, 10, 15, 21, 6, 10, 15, 21,
6, 10, 15, 21, 6, 10, 15, 21}6, 10, 15, 21, 6, 10, 15, 21}
Hằng số K[Hằng số K[ii]]
forfor ii fromfrom 0 0 toto 63 63
KK[[ii] := floor(abs(sin(] := floor(abs(sin(ii + 1)) × (2 + 1)) × (2 powpow 32)) 32))
MD5MD5
Tiền xử lý:Tiền xử lý:
Thêm bit 1 vào cuối thông điệpThêm bit 1 vào cuối thông điệp
Thêm vào k bit 0 sao cho độ dài thông điệp nhận Thêm vào k bit 0 sao cho độ dài thông điệp nhận được đồng du 448 (mod 512)được đồng du 448 (mod 512)
Thêm 64 bit biểu diễn độ dài dài của thông điệp Thêm 64 bit biểu diễn độ dài dài của thông điệp gốc (giá trị lưu dạng little-endian)gốc (giá trị lưu dạng little-endian)
MMMM 1111 0…00…00…00…0
1 bit1 bit k bitk bitmm bit bit
mmmm
64 bit64 bit
Bội số của 512Bội số của 512
MD5MD5
Chia thông điệp (đã padding) thành các khối 512 bitChia thông điệp (đã padding) thành các khối 512 bit
Với mỗi khối 512-bit:Với mỗi khối 512-bit:
Chia thành 16 word (32 bit, little-endian) w[0..15]Chia thành 16 word (32 bit, little-endian) w[0..15]
A= h0, B= h1, C= h2, D= h3A= h0, B= h1, C= h2, D= h3
64 chu kỳ xử lý64 chu kỳ xử lý
h0+=A, h1+=B, h2+=C, h3+=D, h4+=Eh0+=A, h1+=B, h2+=C, h3+=D, h4+=E
Kết quả:= h0 | h1 | h2 | h3Kết quả:= h0 | h1 | h2 | h3
Chu kỳ xử lý trong MD5Chu kỳ xử lý trong MD5
A, B, C, D là 4 word (32 A, B, C, D là 4 word (32 bit) của trạng tháibit) của trạng thái
FF là hàm phi tuyến (thay là hàm phi tuyến (thay đổi tùy theo chu kỳ) đổi tùy theo chu kỳ)
<<< n<<< n là phép quay trái là phép quay trái nn vị trívị trí
⊞ ⊞ phép cphép cộngộng modulo 2 modulo 23232. .
KKtt là hằng số là hằng số
Chu kỳ xử lý trong MD5Chu kỳ xử lý trong MD5
forfor ii fromfrom 0 to 63 0 to 63
f f = = FF[[ii] (B, C, D) ] (B, C, D)
gg = G[ = G[ii] (] (ii) )
temp = Dtemp = D
D = CD = C
C = BC = B
B = ((A + B = ((A + ff + + KK[[ii] + w[] + w[gg]) ])
<<<<<< R[ R[ii]) + B ]) + B
A = temp A = temp
Chu kỳ xử lý trong MD5Chu kỳ xử lý trong MD5
0 ≤ 0 ≤ ii ≤ 15 ≤ 15
ff := (B := (B C) C) (( (( B) B) D) D)
gg := := ii
16 ≤ 16 ≤ ii ≤ 31 ≤ 31
ff := (D := (D B) B) (( (( D) D) C) C)
gg := (5× := (5×ii + 1) + 1) modmod 16 16
32 ≤ 32 ≤ ii ≤ 47 ≤ 47
ff := B := B C C D D
gg := (3× := (3×ii + 5) + 5) modmod 16 16
48 ≤ 48 ≤ ii ≤ 63 ≤ 63
ff := C := C (B (B ( ( D)) D))
gg := (7× := (7×ii) ) modmod 16 16
SHA1SHA1
Phương pháp Secure Hash Standard (SHS hay SHA1) Phương pháp Secure Hash Standard (SHS hay SHA1) do NIST và NSA xây dựng được công bố trên Federal do NIST và NSA xây dựng được công bố trên Federal Register vào ngày 31 tháng 1 năm 1992 và sau đó Register vào ngày 31 tháng 1 năm 1992 và sau đó chính thức trở thành phương pháp chuẩn từ ngày 13 chính thức trở thành phương pháp chuẩn từ ngày 13 tháng 5 năm 1993. tháng 5 năm 1993.
Thông điệp được xử lý theo từng khối 512-bitThông điệp được xử lý theo từng khối 512-bit
Thông điệp rút gọn độ dài 160-bitThông điệp rút gọn độ dài 160-bit
SHA1SHA1
Khởi gán các biến:Khởi gán các biến: h0 := 0x67452301 h0 := 0x67452301 h1 := 0xEFCDAB89 h1 := 0xEFCDAB89 h2 := 0x98BADCFE h2 := 0x98BADCFE h3 := 0x10325476 h3 := 0x10325476 h4 := 0xC3D2E1F0 h4 := 0xC3D2E1F0
SHA1SHA1
Tiền xử lý:Tiền xử lý:
Thêm bit 1 vào cuối thông điệpThêm bit 1 vào cuối thông điệp
Thêm vào k bit 0 sao cho độ dài thông điệp nhận Thêm vào k bit 0 sao cho độ dài thông điệp nhận được đồng du 448 (mod 512)được đồng du 448 (mod 512)
Thêm 64 bit biểu diễn độ dài dài của thông điệp Thêm 64 bit biểu diễn độ dài dài của thông điệp gốc (giá trị lưu dạng big-endian)gốc (giá trị lưu dạng big-endian)
MMMM 1111 0…00…00…00…0
1 bit1 bit k bitk bitmm bit bit
mmmm
64 bit64 bit
Bội số của 512Bội số của 512
SHA1SHA1
Chia thông điệp (đã padding) thành các khối 512 bitChia thông điệp (đã padding) thành các khối 512 bit
Với mỗi khối 512-bit:Với mỗi khối 512-bit:
Chia thành 16 word (32 bit, big-endian) w[0..15]Chia thành 16 word (32 bit, big-endian) w[0..15]
Mở rộng 16 word (32 bit) thành 80 word (32 bit)Mở rộng 16 word (32 bit) thành 80 word (32 bit)
w[i]=(w[i-3]w[i]=(w[i-3] w[i-8] w[i-8] w[i-14] w[i-14] w[i-16]) w[i-16]) <<<<<< 1 1 với 16 với 16 i < 80 i < 80
A= h0, B= h1, C= h2, D= h3, E= h4A= h0, B= h1, C= h2, D= h3, E= h4
80 chu kỳ xử lý80 chu kỳ xử lý
h0+=A, h1+=B, h2+=C, h3+=D, h4+=Eh0+=A, h1+=B, h2+=C, h3+=D, h4+=E
Kết quả:= h0 | h1 | h2 | h3 | h4Kết quả:= h0 | h1 | h2 | h3 | h4
Chu kỳ xử lý trong SHA1Chu kỳ xử lý trong SHA1
tt là số thứ tự của chu kỳ là số thứ tự của chu kỳ
A, B, C, D, E là 5 word A, B, C, D, E là 5 word (32 bit) của trạng thái(32 bit) của trạng thái
FF là hàm phi tuyến (thay là hàm phi tuyến (thay đổi tùy theo chu kỳ) đổi tùy theo chu kỳ)
<<< n<<< n là phép quay trái là phép quay trái nn vị trí vị trí
⊞ ⊞ phép cphép cộngộng modulo 2 modulo 23232. .
KKtt là hằng số là hằng số
Chu kỳ xử lý trong SHA1Chu kỳ xử lý trong SHA1
forfor ii fromfrom 0 to 79 0 to 79
f f = = FF[[tt] (B, C, D) ] (B, C, D)
temp = (A temp = (A <<<<<< 5) + 5) + ff + E + E
+ + KKtt + w[ + w[ii] ]
E = DE = D
D = CD = C
C = B C = B <<< <<< 30 30
B = AB = A
A = temp A = temp
Chu kỳ xử lý trong SHA1Chu kỳ xử lý trong SHA1
7960 ,
5940 ,
3920 ,
190 ,
,,
tZYX
tZYZXYX
tZYX
tZXYX
ZYXtF
7960 ,
5940 ,
3920 ,
190 ,
,,
tZYX
tZYZXYX
tZYX
tZXYX
ZYXtF
7960,
5940,
3920,
190,
t
t
t
t
K t
0xca62c1d6
0x8f1bbcdc
0x6ed9eba1
0x5a827999
7960,
5940,
3920,
190,
t
t
t
t
K t
0xca62c1d6
0x8f1bbcdc
0x6ed9eba1
0x5a827999
Chu kỳ xử lý trong SHA1Chu kỳ xử lý trong SHA1
Công thức của hàm F[t] có thể được viết lại như sau:Công thức của hàm F[t] có thể được viết lại như sau:
7960 ,
5940 ,
3920 ,
190 ,
,,
tYXZYX
tYXZYX
tYXZYX
tZYXZ
ZYXtF
7960 ,
5940 ,
3920 ,
190 ,
,,
tYXZYX
tYXZYX
tYXZYX
tZYXZ
ZYXtF
Nhóm hàm băm SHANhóm hàm băm SHA
011010011101
SHA-1SHA-1
SHA-384SHA-384SHA-256SHA-256
SHA-224SHA-224SHA-512SHA-512
Secure Hash Standard
1994 2004
20022002
2002
Các thuật toán SHACác thuật toán SHA
Thuật Thuật toántoán
Kết Kết quảquả(bit)(bit)
Trạng Trạng thái thái (bit)(bit)
Khối Khối (bit)(bit)
Thông Thông điệp điệp
tối đa tối đa (bit)(bit)
Word Word (bit)(bit)
# # chu chu kỳkỳ
Thao tácThao tác Đụng Đụng độđộ
SHA-0SHA-0 160160 160160 512512 226464 − 1 − 1 3232 8080 +,and,or,+,and,or,xor,rotlxor,rotl
CóCó
SHA-1SHA-1 160160 160160 512512 226464 − 1 − 1 3232 8080 +,and,or,+,and,or,xor,rotlxor,rotl
226363 thao thao táctác
SHA-SHA-256/224256/224
256/256/224224
256256 512512 226464 − 1 − 1 3232 6464 +,and,+,and,or,xor, or,xor, shr,rotrshr,rotr
ChưaChưa
SHA-SHA-512/384512/384
512/512/384384
512512 10241024 22128128 − 1 − 1 6464 8080 +,and,+,and,or,xor,or,xor,shr,rotrshr,rotr
ChưaChưa
Sử dụng SHASử dụng SHA
Loại ƯDLoại ƯD Sử dụng thông thườngSử dụng thông thường Suite BSuite B
Thuật toánThuật toán Đến 2010Đến 2010 Sau 2010Sau 2010 SecretSecret Top SecretTop Secret
SHA-1SHA-1
SHA-224SHA-224
SHA-256SHA-256
SHA-384SHA-384 SHA-512SHA-512
Nguồn: NIST Cryptographic Standards Status Report April 4, 2006
Bill BurrManager, Security Technology Group
Message authentication code (MAC)Message authentication code (MAC)
Mục đích: xác định nguồn gốc của thông tinMục đích: xác định nguồn gốc của thông tin
MAC và chữ ký điện tửMAC và chữ ký điện tử
Phát sinh MAC và kiểm tra MAC sử dụng chung khóa Phát sinh MAC và kiểm tra MAC sử dụng chung khóa bí mật (secret key)bí mật (secret key)
Người gửi và người nhận phải thỏa thuận trước khóa Người gửi và người nhận phải thỏa thuận trước khóa bí mật (giống mã hóa đối xứng)bí mật (giống mã hóa đối xứng)
Không hỗ trợ việc chống từ chối trách nhiệm (non-Không hỗ trợ việc chống từ chối trách nhiệm (non-repudiation)repudiation)
Message authentication code (MAC)Message authentication code (MAC)
MAC có thể được tạo ra từ hàm băm mật mã MAC có thể được tạo ra từ hàm băm mật mã (HMAC) hay từ giải thuật mã hóa theo khối (OMAC, (HMAC) hay từ giải thuật mã hóa theo khối (OMAC, CBC-MAC, PMAC)CBC-MAC, PMAC)
Keyed-hash message authentication code Keyed-hash message authentication code
Mihir Bellare, Ran Canetti, Hugo Krawczyk (1996 )Mihir Bellare, Ran Canetti, Hugo Krawczyk (1996 )
Sử dụng hàm băm mật mã trong chữ ký điện tửSử dụng hàm băm mật mã trong chữ ký điện tử
Trích từ slide trình bày“RSA Digital Signature Standards”của Burt Kaliski, RSA Laboratoriestại RSA Conference 2000
http://www.rsa.com/rsalabs/staff/bios/bkaliski/http://www.rsa.com/rsalabs/staff/bios/bkaliski/publications/other/kaliski-rsa-signatures-rsa-2000.ppt publications/other/kaliski-rsa-signatures-rsa-2000.ppt
Sử dụng tạo chữ ký điện tử (đính kèm)Sử dụng tạo chữ ký điện tử (đính kèm)
Giải pháp cơ bảnGiải pháp cơ bản
ANSI X9.31ANSI X9.31
PKCS #1 v1.5PKCS #1 v1.5
Bellare-Rogaway FDHBellare-Rogaway FDH
Bellare-Rogaway PSSBellare-Rogaway PSS
Giải pháp cơ bảnGiải pháp cơ bản
MM: thông điệp cần ký: thông điệp cần ký
((MM) = ) = HashHash((MM) )
Ký trực tiếp trên Ký trực tiếp trên ((MM))
Với cùng 1 thông điệp Với cùng 1 thông điệp MM, chữ ký (của cùng 1 người) , chữ ký (của cùng 1 người) luôn luôn giống nhau luôn luôn giống nhau An toàn? An toàn?
Mang tính minh họa trong giảng dạyMang tính minh họa trong giảng dạy
Không nên dùng trong thực tếKhông nên dùng trong thực tế
ANSI X9.31(Digital Signatures Using Reversible Public-Key Cryptography for the Financial Services Industry, 1998)
ANSI X9.31(Digital Signatures Using Reversible Public-Key Cryptography for the Financial Services Industry, 1998)
((MM) = 6b bb … bb ba || ) = 6b bb … bb ba || HashHash((MM) || 3) || 3xx cc cc
với với xx = 3 nếu dùng for SHA-1, = 3 nếu dùng for SHA-1,
xx = 1 nếu dùng RIPEMD-160 = 1 nếu dùng RIPEMD-160
Được hỗ trợ trong nhiều chuẩnĐược hỗ trợ trong nhiều chuẩn
IEEE P1363, ISO/IEC 14888-3IEEE P1363, ISO/IEC 14888-3
US NIST FIPS 186-1US NIST FIPS 186-1
Định danh Định danh thuật toán thuật toán
HashHash
PKCS #1 v1.5(RSA Encryption Standard, 1991)PKCS #1 v1.5(RSA Encryption Standard, 1991)
((MM) = 00 01 ff … ff 00 || HashAlgID || ) = 00 01 ff … ff 00 || HashAlgID || HashHash((MM))
Được sử dụng rộng rãiĐược sử dụng rộng rãi
SSL certificateSSL certificate
S/MIMES/MIME
Được đưa vào chuẩn IEEE P1363a; còn tiếp tục dùng Được đưa vào chuẩn IEEE P1363a; còn tiếp tục dùng trong PKCS #1 v2.0trong PKCS #1 v2.0
Bellare-Rogaway FDH(Full Domain Hashing, ACM CCCS ’93)Bellare-Rogaway FDH(Full Domain Hashing, ACM CCCS ’93)
((MM) = 00 || Full-Length-Hash() = 00 || Full-Length-Hash(mm))
Được đưa vào chuẩn IEEE P1363aĐược đưa vào chuẩn IEEE P1363a
Bellare-Rogaway PSS(Probabilistic Signature Scheme, Eurocrypt ’96)Bellare-Rogaway PSS(Probabilistic Signature Scheme, Eurocrypt ’96)
((MM) = 00 || ) = 00 || HH || || GG((HH) ) [ [saltsalt || 00 … 00] || 00 … 00]
với với
HH = Hash( = Hash(saltsalt, , MM), ),
saltsalt là chuỗi giá trị ngẫu nhiên, là chuỗi giá trị ngẫu nhiên,
GG là hàm biến đổi H thành chuỗi bit có độ dài phù là hàm biến đổi H thành chuỗi bit có độ dài phù hợp để XOR với [hợp để XOR với [saltsalt || 00 … 00] || 00 … 00]
Được đưa vào chuẩn IEEE P1363a; ANSI X9.31Được đưa vào chuẩn IEEE P1363a; ANSI X9.31
Sử dụng tạo chữ ký điện tử (khôi phục được nội dung)Sử dụng tạo chữ ký điện tử (khôi phục được nội dung)
Giải pháp cơ bảnGiải pháp cơ bản
ISO/IEC 9796-1ISO/IEC 9796-1
ISO/IEC 9796-2ISO/IEC 9796-2
Bellare-Rogaway PSS-RBellare-Rogaway PSS-R
Giải pháp cơ bảnGiải pháp cơ bản
((MM) = ) = MM
Minh họa trong giảng dạyMinh họa trong giảng dạy
Không an toàn trong thực tếKhông an toàn trong thực tế
ISO/IEC 9796-1(Digital Signature Scheme Giving Message Recovery, 1991)ISO/IEC 9796-1(Digital Signature Scheme Giving Message Recovery, 1991)
((MM) = ) = ss*(*(mmll-1-1) ) ss’(’(mmll-2-2) ) mmll-1-1 mmll-2-2
ss((mmll-3-3) ) ss((mmll-4-4) ) mmll-3-3 mmll-4-4 ... ...
ss((mm33) ) ss((mm22) ) mm33 mm22
ss((mm11) ) ss((mm00) ) mm00
với với mmii là 4 bit thứ là 4 bit thứ ii của của MM
ss*, *, ss’ và ’ và ss là các hoán vị (cố định) là các hoán vị (cố định)
Không an toàn đối với tấn công bằng phép nhân Không an toàn đối với tấn công bằng phép nhân ((multiplicative forgery [CHJ99], [Grieu 1999])multiplicative forgery [CHJ99], [Grieu 1999])
Có thể dùng nếu Có thể dùng nếu MM là giá trị hash là giá trị hash
ISO/IEC 9796-2(Digital Signature Scheme Giving Message Recovery — Mechanisms Using a Hash Function, 1997)
ISO/IEC 9796-2(Digital Signature Scheme Giving Message Recovery — Mechanisms Using a Hash Function, 1997)
((MM) = 4b bb bb … bb ba || ) = 4b bb bb … bb ba || MM || Hash( || Hash(MM) || bc) || bc
Không an toàn với phương pháp tấn công bằng phép Không an toàn với phương pháp tấn công bằng phép nhân (multiplicative forgery) nếu giá trị hash gồm từ nhân (multiplicative forgery) nếu giá trị hash gồm từ 64 bit trở xuống [CNS99]64 bit trở xuống [CNS99]
Vẫn có thể sử dụng an toàn với các giá trị hash có Vẫn có thể sử dụng an toàn với các giá trị hash có nhiều hơn 64 bitnhiều hơn 64 bit
Bellare-Rogaway PSS-R(Probabilistic Signature Scheme with Recovery, 1996)Bellare-Rogaway PSS-R(Probabilistic Signature Scheme with Recovery, 1996)
((MM) = 00 || ) = 00 || HH || || GG((HH) ) [ [saltsalt || 00 … 01 || || 00 … 01 || MM]]
HH = Hash( = Hash(saltsalt, , MM), ),
saltsalt là chuỗi giá trị ngẫu nhiên, là chuỗi giá trị ngẫu nhiên,
GG là hàm biến đổi H thành chuỗi bit có độ dài phù là hàm biến đổi H thành chuỗi bit có độ dài phù hợp để XOR với [hợp để XOR với [saltsalt || 00 … 01 || || 00 … 01 || MM] ]
Được đưa vào chuẩn IEEE P1363a; ISO/IEC 9796-2Được đưa vào chuẩn IEEE P1363a; ISO/IEC 9796-2
Optimal Asymmetric Encryption PaddingOptimal Asymmetric Encryption Padding
Tác giả: Tác giả:
Bellare và Rogaway Bellare và Rogaway (1994)(1994)
Khi mã hóa:Khi mã hóa:
X = m00..0 ⊕ X = m00..0 ⊕ G(r)G(r)
Y = r ⊕ H(X) Y = r ⊕ H(X) Khi giải mã:Khi giải mã:
r = Y ⊕ H(X) r = Y ⊕ H(X)
m00..0 = X ⊕ m00..0 = X ⊕ G(r) G(r)
Optimal Asymmetric Encryption PaddingOptimal Asymmetric Encryption Padding
Trong .Net, OAEP sử dụng SHA1 với độ dài của giá Trong .Net, OAEP sử dụng SHA1 với độ dài của giá trị băm là 160 bit = 20 bytetrị băm là 160 bit = 20 byte
Do đó, khi mã hóa bất đối xứng dùng RSA với Do đó, khi mã hóa bất đối xứng dùng RSA với OAEP, độ dài của chuỗi dữ liệu cần mã hóa (tính OAEP, độ dài của chuỗi dữ liệu cần mã hóa (tính bắng byte) tối đa là:bắng byte) tối đa là:
nn – 2 * 20 byte – 2= – 2 * 20 byte – 2= nn – 42 byte – 42 byte
với n là độ dài (tính bằng byte) của modulus (ví dụ với n là độ dài (tính bằng byte) của modulus (ví dụ 512 bit = 32 byte)512 bit = 32 byte)
Optimal Asymmetric Encryption PaddingOptimal Asymmetric Encryption Padding
Trong .Net, OAEP sử dụng SHA1 với độ dài của giá Trong .Net, OAEP sử dụng SHA1 với độ dài của giá trị băm là 160 bit = 20 bytetrị băm là 160 bit = 20 byte
Do đó, khi mã hóa bất đối xứng dùng RSA với Do đó, khi mã hóa bất đối xứng dùng RSA với OAEP, độ dài của chuỗi dữ liệu cần mã hóa (tính OAEP, độ dài của chuỗi dữ liệu cần mã hóa (tính bắng byte) tối đa là:bắng byte) tối đa là:
nn – 2 * 20 byte – 2= – 2 * 20 byte – 2= nn – 42 byte – 42 byte
với n là độ dài (tính bằng byte) của modulus (ví dụ với n là độ dài (tính bằng byte) của modulus (ví dụ 512 bit = 32 byte)512 bit = 32 byte)
Một số ứng dụng thực tế của hàm bămMột số ứng dụng thực tế của hàm băm
Trích từ slide“Classification of Hash Functions Suitable for Real-life Systems”của các tác giả: Yasumasa Hirai, Takashi Kurokawa, Shin’ichiro Matsuo, Hidema Tanaka, Akihiro Yamamura
tại 2nd Hash Workshop, 08/2006
http://csrc.nist.gov/groups/ST/hash/documents/MATSUO_2nd_HASH_0822.pdf
Sử dụng trong chứng nhận (certification)Sử dụng trong chứng nhận (certification)
Chữ ký điện tửChữ ký điện tử
Sử dụng hàm băm:Sử dụng hàm băm:Nén thông tinNén thông tin
Kết hợp thông tin ngẫu nhiênKết hợp thông tin ngẫu nhiên
Yêu cầu về bảo mật:Yêu cầu về bảo mật:An toàn đối với tấn công second pre-imageAn toàn đối với tấn công second pre-image
Phải hợp lệ trong ít nhất 5 năm (theo SOX), hoặc 7 năm Phải hợp lệ trong ít nhất 5 năm (theo SOX), hoặc 7 năm (theo HIPPA)(theo HIPPA)
Một số ví dụ khác:Một số ví dụ khác:
PKIPKI
Time-stamping (nhãn thời gian)Time-stamping (nhãn thời gian)
Sử dụng trong định danhchứng thực người dùng (authentication)Sử dụng trong định danhchứng thực người dùng (authentication)
KerberosKerberos
Sử dụng hàm băm:Sử dụng hàm băm:Tính khóa bí mật của người dùngTính khóa bí mật của người dùng
Kiểm soát tính toàn vẹn của thông điệp trong protocolKiểm soát tính toàn vẹn của thông điệp trong protocol
Yêu cầu về bảo mật:Yêu cầu về bảo mật:An toàn đối với tấn công second pre-imageAn toàn đối với tấn công second pre-image
Phải hợp lệ trong 1 phiên làm việcPhải hợp lệ trong 1 phiên làm việc
Một số ví dụ khác:Một số ví dụ khác:
IEEE 802.1X-EAPIEEE 802.1X-EAP
APOPAPOP
Sử dụng trong liên lạc an toànSử dụng trong liên lạc an toàn
IPSecIPSec
Sử dụng hàm băm:Sử dụng hàm băm:Chứng thực (authentication) trong quá trình trao đổi Chứng thực (authentication) trong quá trình trao đổi khóakhóa
Kiểm soát tính toàn vẹn của thông điệp trong protocolKiểm soát tính toàn vẹn của thông điệp trong protocol
Yêu cầu về bảo mật:Yêu cầu về bảo mật:An toàn đối với tấn công second pre-imageAn toàn đối với tấn công second pre-image
Phải hợp lệ trong 1 phiên làm việcPhải hợp lệ trong 1 phiên làm việc
Một số ví dụ khác:Một số ví dụ khác:
SSL/TLSSSL/TLS
SSHSSH
Sử dụng trong emailSử dụng trong email
S/MIMES/MIME
Sử dụng hàm băm:Sử dụng hàm băm:Dùng trong chữ ký điện tửDùng trong chữ ký điện tử
Yêu cầu về bảo mật:Yêu cầu về bảo mật:An toàn đối với tấn công second pre-imageAn toàn đối với tấn công second pre-image
Phải hợp lệ trong thời gian dài nếu cần dùng làm bằng Phải hợp lệ trong thời gian dài nếu cần dùng làm bằng chứngchứng
Một số ví dụ khác:Một số ví dụ khác:
PGP (pretty good privacy)PGP (pretty good privacy)
Một số ứng dụng khác Một số ứng dụng khác
Kiểm tra tính toàn vẹn của phần mềm/dữ liệu khi Kiểm tra tính toàn vẹn của phần mềm/dữ liệu khi download.download.
Đối sánh CSDL (Database matching)Đối sánh CSDL (Database matching)
……
Mật khẩu người dùngMật khẩu người dùng
Lưu trong CSDL: username + passwordLưu trong CSDL: username + password
Kiểm tra: so sánh password của người dùng nhập Kiểm tra: so sánh password của người dùng nhập vào và password đã lưu trong CSDLvào và password đã lưu trong CSDL
An toàn? Admin biết password của người dùng!An toàn? Admin biết password của người dùng!
Lưu trong CSDL: username + hash (password)Lưu trong CSDL: username + hash (password)
Kiểm tra: so sánh Kiểm tra: so sánh
hash (password người dùng nhập) hash (password người dùng nhập)
= hash (password đã lưu)?= hash (password đã lưu)?
An toàn hơnAn toàn hơn
Còn vấn đề gì đáng lo ngại hay không?Còn vấn đề gì đáng lo ngại hay không?