ĐIỀU KIỆN AN TOÀN CHO HÀM HASH

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu mã hóa bản tin và phương pháp xác thực người dùng theo hệ mật mã công khai RSA Luận văn ThS Công nghệ thông tin 1 01 10 (Trang 47 - 57)

CHƯƠNG 2 CƠ SỞ TOÁN HỌC CỦA MÃ XÁC THỰC ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP MÔ PHỎNG SHA TRÊN MÁY TÍNH

2.1 NHỮNG VẤN ĐỀ CHUNG VỀ HÀM HASH VÀ HÀM HASH AN TOÀN

2.1.2 ĐIỀU KIỆN AN TOÀN CHO HÀM HASH

Điều kiện an toàn của hàm Hash chỉ phụ thuộc vào tập Z (tương đương với đầu ra của hàm Hash), được rút ra từ phương pháp tìm kiếm các va chạm của hàm Hash. Các va chạm của hàm Hash được biết tới dưới cái tên “Tấn công ngày sinh nhật ” (Birthday Attacks). Thuật ngữ này nảy sinh từ “ nghịch

f f f

Giá trị ban đầu

Đầu Ra Hash Khối tin 1

Khối tin 1 Khối tin n Chèn bít

lý ngày sinh nhật ” (birthday paradox), trong bài toán: Một nhóm 23 người ngẫu nhiên có ít nhất 2 người có ngày sinh nhật trùng nhau với sác xuất ít nhất là 1/2.

Giả sử rằng h: X->Z là hàm Hash, X và Z là hữu hạn và |X| ≥ 2|Z|. Định nghĩa:

|X| = m và |Z| = n. Không khó khăn nhận thấy rằng: có ít nhất n va chạm và vấn đề đặt ra là cách tìm chúng, biện pháp đơn giản nhất là chọn k phần tử ngẫu nhiên phân biệt x 1 , ... , x k  X, tính z i = h(x i ), 1 ≤ i ≤ k và sau đó xác định xem liệu có xẩy ra va chạm nào không (bằng cách, chẳng hạn nhƣ sắp xếp lại các z i ).

Quá trình này tương tự với việc ném k quả bóng vào n thùng và sau đó kiểm tra xem liệu có thùng nào đó chứa ít nhất 2 quả hay không ( k quả bóng tương ứng với k giá trị x i ngẫu nhiên và n thùng tương ứng với n phần tử có thể trong Z ).

Ta sẽ tính giới hạn dưới của xác xuất tìm thấy một va chạm theo phương pháp này. Do chỉ quan tâm đến giới hạn dưới về xác xuất va chạm nên ta sẽ giả sử rằng |h -1 (z)| 

n

m với mọi z  Z. ( Đây là giả thiết hợp lý: nếu các ảnh đảo không xấp xỉ bằng nhau thì sác xuất tìm thấy một va chạm sẽ tăng lên).

Vì các ảnh đảo đều có kích thước bằng nhau và các x i được chọn một cách ngẫu nhiên nên các z i nhận đƣợc có thể xem nhƣ các phần tử ngẫu nhiên của Z. Song việc tính toán xác xuất để các phần tử ngẫu nhiên z 1 ,….z k . là riêng biệt khá đơn giản. Xét các z i theo thứ tự z 1 ….z k . Phép chọn z 1 đầu tiên là tuỳ ý. Xác xuất để z 2  z 1 Là 1-

n

1 ; xác xuất để z 3 khác biệt với z 1 và z 2 là i -

n

2 vv…

Vì thế, ƣớc lƣợng xác xuất để không có va chạm nào là:

 

 

   n

1 1 

 

   n

1 2 ...  

 

 

   1

1

) 1 1 (

1

k

i n

i n

k

Nếu x là số thực nhỏ thì 1-x  e  x . Ƣớc lƣợng này nhận đƣợc từ hai số hạng đầu tiên của các chuổi khai triển:

e -x = 1- x +

! 2 x 2

- 3 ! x 3

+…+ !

) (

n x n

Khi đó không có xác xuất nào là:   

 

1 

1

1

1

) 1 1 (

) 1 (

k

i

k

i

n k k

n e

n e i

Vậy ƣớc lƣợng sác xuất có ít nhất một va chạm là: 1 - e k k n

) 1 ( 

Nếu ký hiệu xác xuất này là  thì có thể giải phương trình đối với k (nhƣ m hàm của n và  ).

n k k

e

) 1 ( 

  1  

) 1 ) ln(

1

(    

n k k

k 2 -k )

1 ln( 1

 

Nếu bỏ qua số hạng -k thì:

k   

1 ln 1 n

Nếu lấy   0 , 5 thì:

n k  1 , 17

Điều này nói lên rằng, việc Hashing (băm) trên n phần tử ngẫu nhiên của X tạo ra một va chạm với sác xuất 50%. Chú ý rằng, cách chọn  khác sẽ dẫn đến hệ số hằng số khác song k vẫn tỷ lệ với n .

Nếu X là tập người, Y là tập gồm 365 ngày trong năm (không tính năm nhuận) còn h(x) là ngày sinh nhật của x, khi đó ta sẽ giải quyết nghịch lý ngày sinh nhật. Lấy n= 365 ngày, ta nhận được k  22 , 3 (vì là con người nên ta làm tròn số k = 23). Vì vậy, như đã nêu ở trên, sẻ có ít nhất 2 người có ngày sinh nhật trùng nhau trong hai người ngẫu nhiên với xác suất bằng 1/2 .

Tấn công ngày sinh nhật” đặt giới hạn dưới cho các kích thước cho tóm lƣợc bản tin ở đầu hàm Hash. Tóm lƣợc bản tin ở đầu ra hàm Hash 40 bit sẽ không an toàn vì có thể tìm thấy một va chạm với xác xuất 1/2 trên 2 20 (khoảng 1.000.000) đoạn chặt ngẫu nhiên. Như vậy, kích thước tối thiểu chấp nhận đƣợc của tóm lƣợc bản tin ở đầu ra hàm Hash là 128 bít (tấn công ngày sinh nhật cần trên 2 64 đoạn chặt trong trường hợp này). Đó chính là lý do chọn bản tin tóm lƣợc ở đầu ra hàm Hash an toàn tối thiểu là 160 bít để chống lại kiểu “Tấn công ngày sinh nhật”.

Dựa vào tính chất an toàn (thể hiện bằng sự không va chạm) của hàm Hash, người ta đã phân chia hàm Hash thành 2 loại:

- Hàm Hash không an toàn.

- Hàm Hash an toàn.

Trên bảng 2.1 Chỉ ra một số hàm Hash không an toàn và thông số của nó:

TT Tên hàm Hash

Chiều dài (bít)

Loại từ (bít)

Kích thước khối

1 MD4 128 32 512

2 MD5 128 32 512

3 RIPEMD –128 128 32

4 RIPEMD-160 160 32

Bảng 2.1 Hàm Hash không an toàn

Bảng 2.2 trình bày một số hàm Hash an toàn và các thông số của nó.

Các hàm Hash này là do NIST đề xuất đƣa ra. hiện nay đã đƣợc nhiều quốc gia trên thế giới sử dụng.

Bảng 2.2 hàm Hash an toàn và các thông số của nó:

TT

Tên hàm Hash

Chiều dài (bít)

Loại từ (bít)

Kích thước khối

1 SHA-1 160 32 512

2 SHA-256 256 32 512

3 SHA-384 384 64 1024

4 SHA-512 512 64 1024

Bảng 2.2 Hàm Hash an toàn và các thông số của nó:

Hình 2.2 là sơ đồ khối tổng quát cho hàm Hash an toàn:

Hình 2.2. Sơ đồ khối của hàm Hash an toàn Đầu vào M

Đầu ra h(m) =g(Hi) Tiền xử lý

M= m 1 ,m 2 ,..m i Xử lý lặp

H i Chèn bít

Tạo khối

g H i

f

2.1.3 Tạo hàm Hash an toàn SHA-1

Hàm Hash MD4 đƣợc Riverst đƣa ra vào năm 1990, đây là loại hàm Hash không an toàn và nó đã được trường đại học quốc gia về chuẩn và công nghệ (NIST) cải tiến thành hàm Hash an toàn SHA-1, SHA-1 khác với MD4 ở các điểm sau:

- Chiều dài bít đầu ra SHA-1 là 160 bit.

- Hàm nén thực hiện 4 vòng (MD4 thực hiện 3 vòng ), mỗi vòng gồm 20 bước (MD4 thực hiện 16 bước). Các hàm thực hiện ở các vòng như sau:

hàm Ch thực hiện ở vòng thứ nhất, hàm M thực hiện ở vòng thứ ba, hàm P thực hiện ở vòng thứ hai và thứ tƣ.

- Hàm Hash SHA-1 sử dụng 80 “từ” hằng nhƣng chúng chỉ có 4 giá trị, trong khi đó MD4 chỉ sử dụng 48 “từ” hằng 3 giá trị.

Các hàm và các “từ ” hằng sử dụng trong SHA-1:

- Hàm logic f t (B,C,D) thực hiện các phép tính logic với 3 “từ” B, C, D đƣợc sử dụng trong SHA-1 đƣợc xác định nhƣ sau:

f t (B,C,D) = Ch(B,C,D) = (B  C)v((  B)  D) với (0  t  19 ) f t (B,C,D) = P(B,C,D) = B  C  D với (20  t  39) f t (B,C,D)=M(B,C,D) = (B  C)  (B  D)  (C  D) với (40  t  59) f t (B,C,D)=P(B,C,D) = B  C  D với (60  t  79) t là các giá trị trong hàm Hash.

- SHA-1 sử dụng 80 “từ” hằng nhƣng chúng chỉ có 4 giá trị và giá trị của chúng được biểu diễn dưới dạng Hex như sau:

K 1 = 5A827999 với (0  t  19 ) K 1 = 6ED9EBA1 với (20  t  39 ) K 1 = 8F1BBCDC với (40  t  59 ) K 1 = CA62C1D6 với (60  t  79 )

2.1.3.1 Thuật toán của hàm Hash SHA-1

Đầu vào: Bản tin là chuỗi bít M có chiều dài l ( 0  l  2 64 )

Đầu ra: Chuỗi bít M’ ở đầu ra hàm Hash có chiều dài là 160 bít.

B1. Xác định giá tri ban đầu H:

H 0 = 67452301; H 1 =EFCDAB89; H 2 =98ADCFE;

H 3 = 10325476; H 4 = C3D2E1F0.

Các “từ” hằng K t cộng vào là:

K t = 5A827999 với (0  t  19 ) K t = 6ED9EBA1 với (20  t  39 ) K t = 8F1BBCDC với (40  t  59 ) K t = CA62C1D6 với (60  t  79 )

Các “từ” đầu vào là:

Wt = W 0 … W 15 với (0  t  15 ) Wt = S 1 (W t-3  W t-8  W t-14  W t-16 ) với (0  t  79 )

B2. Thực hiện chèn vào chuỗi M i nhƣ sau:

Bít “1” đƣợc chèn vào cuối bản tin, tiếp theo là chèn k bít “0”. Cuối cùng sẽ thực hiện chèn 64 bít vào cuối, 64 bít này đƣợc tính theo giá trị l. Kết quả tạo ra bản tin được chèn bít có chiều dài là bội của 512 (512 x n) dưới dạng các khối tin M 1 M 2 …. M n

B3. Thực hiện xử lý lần lƣợt các khối tin M i nhƣ sau:

a. Chia M i thành 16 từ W 0 ,W 1 ,W 2 , … W 15 với W 0 là từ tận cùng bên trái.

b. Cho A = H 0 ; B = H 1 ; C = H 2 ; D = H 3 ; E = H 4 . c. Với t = 0 đến 79 thực hiện:

TEMP = S 5 (A) + f t (B,C,D) + E + Wt + Kt

E = D; D = C; C = S 30 (B); B = A; A = TEMP ;

f t (B,C,D) = Ch(B,C,D) với (0  t  19 ) f t (B,C,D) = P(B,C,D) với (20  t  39 ) f t (B,C,D) = M(B,C,D) với (40  t  59 ) f t (B,C,D) = P(B,C,D) với (60  t  79 )

d. Các giá trị đầu ra sau khi “Băm” H i là:

H 0 = H 0 + A; H 1 = H 1 +B;

H 2 = H 2 +C; H 3 = H 3 +D; H 4 = H 4 +E

e. Đầu ra hàm Hash là M’ có chiều dài 160 bít, đƣợc biễu diễn bằng 5 từ:

h(M)=g(H 0 ,H 1 ,H 2 ,H 3 ,H 4 ) = H 0 H 1 H 2 H 3 H 4 . 2.1.3.2 Cấu trúc của hàm Hash SHA-1:

Sau khi thực hiện chèn bít (bước 2), tiếp theo các khối tin được “Băm”

(Hashing) ở khởi lý lặp thực hiện 4 vòng, mỗi vòng gồm 20 bước. Trên hình 2.3 mô tả quá trình thực hiện này.

Việc xử lý các “Từ” trong vòng đƣợc thực hiện theo sơ đồ Hình 2.4 sau đây:

f t , K t Wo…W 19

f t , K t

W 20 …W 39

f t , K t

W 40 …W 59

f t , K t

W 60 …W 79 C D

A B E

D B C

A E

C D

A B E

C D

A B E

+ + + + +

H i+1

512 bít

Hình 2.3. Sơ đồ khối của xử lý lặp H i

Để tạo các từ MAN (Metropolitan Area Network) t ở đầu vào hàm Hash cho mỗi vòng đƣợc thực hiện theo sơ đồ hình 2.5 sau đây:

Khối tin

XOR

S 1

XOR

S 1

XOR

S 1

W 79

W t

W 16

W 15

W 1

W 0

…. .

Hình 2.5. Sơ đồ tạo từ Wt đầu vào với một khối tin 512

bít W 0 W 2 W 8 W 13 W t-16 W t-14 W t-8 W t-3 W 63 W 65 W 71 W 76 A

B C D E

A B C D + + E

+ +

f t

S 5

S 30

W t K t

Hình 2.4 Sơ đồ khối xử lý “Từ” ở mỗi vòng trong hàm Hash

2.2 Giải pháp tóm lƣợc bản tin

Quá trình tóm lƣợc bản tin bằng hàm Hash đƣợc thực hiện nhƣ sau:

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu mã hóa bản tin và phương pháp xác thực người dùng theo hệ mật mã công khai RSA Luận văn ThS Công nghệ thông tin 1 01 10 (Trang 47 - 57)

Tải bản đầy đủ (PDF)

(108 trang)