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
Các tính chất của hàm băm mật mãCác tính chất của hàm băm mật mã
Phân loại hàm băm mật mãPhân loại hàm băm mật mã
Một số kiến trúc hàm băm phổ biếnMột số kiến trúc hàm băm phổ biến
Hàm băm MD5Hàm băm MD5
Các hàm băm SHACác hàm băm SHA
MAC và HMACMAC và HMAC
Mở đầuMở đầu
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
Birthday ParadoxBirthday Paradox
pp((nn))
nn
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 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) )
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))
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
Cấu trúc Merkle-Damgård Cấu 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.
trivialtrivial
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+=Dh0+=A, h1+=B, h2+=C, h3+=D
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 )
Keyed-hash message authentication codeKeyed-hash message authentication code
functionfunction hmac (key, message) hmac (key, message) opad = [0x5c * blocksize] opad = [0x5c * blocksize] ipad = [0x36 * blocksize] ipad = [0x36 * blocksize] ifif (length(key) > blocksize) (length(key) > blocksize) thenthen
key = hash(key)key = hash(key)end ifend if forfor i i fromfrom 0 0 toto length(key) length(key) stepstep 1 1
ipad[i] ^= key[i] ipad[i] ^= key[i] opad[i] ^= key[i] opad[i] ^= key[i]
end forend for returnreturn hash(opad || hash(ipad || message)) hash(opad || hash(ipad || message))
CBC-MACCBC-MAC
Cách tấn công?Cách tấn công?Tham khảo: CMACTham khảo: CMAC