chủ đề 9: hàm băm mật mã hash & mac

65
Chủ đề 9: Hàm băm mật mã Hash & MAC ThS. Trần Minh Triết ThS. Trần Minh Triết

Upload: jerry-mccormick

Post on 30-Dec-2015

104 views

Category:

Documents


6 download

DESCRIPTION

Chủ đề 9: Hàm băm mật mã Hash & MAC. ThS. Trần Minh Triết. Nội dung. Mở đầu Đặt vấn đề Một số tính chất và yêu cầu an toàn của hàm băm Phân loại Kiến trúc hàm băm Kiến trúc Merkle-Damgård Kiến trúc Matyas-Meyer-Oseas Kiến trúc Davies-Meyer Kiến trúc Miyaguchi-Preneel - PowerPoint PPT Presentation

TRANSCRIPT

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…

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 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

[email protected]

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

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ứng

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?

Mật khẩu người dùngMật khẩu người dùng

Lưu trong CSDL: Lưu trong CSDL:

username + salt + H với H = hash (password, username + salt + H với H = hash (password, salt)salt)

Kiểm tra: so sánh Kiểm tra: so sánh

hash (password người dùng nhập, salt) = H ?hash (password người dùng nhập, salt) = H ?