Định nghĩa

Một phần của tài liệu Nghiên cứu hệ mật mã khoá công khai trong giao dịch điện tử (Trang 25)

Trong thực tế sử dụng, hàm băm (hash) được chia thành nhiều loại khỏc nhau. Chương này phõn loại hàm băm thành hai loại: hàm băm cú khoỏ và hàm băm khụng khoỏ.

Định nghĩa 1: Một hàm băm là một hàm h mà tối thiểu cú 2 đặc tớnh sau: 1. Nộn - h ỏnh xạ lối vào x cú độ dài (số bit) hữu hạn tuỳ ý thành một lối ra h(x) cú độ dài xỏc định n;

2. Dễ tớnh toỏn - cho trước h và lối vào x, dễ dàng tớnh được h(x).

Định nghĩa 2: Với 2 số nguyờn dương l, n. h được gọi là hàm băm cú lối ra n-bit và sử dụng khoỏ l-bit nếu h là một hàm tiền định cú 2 đầu vào, đầu vào thứ

nhất cú độ dài tuỳ ý, đầu vào thứ hai cú độ dài l bit, lối ra là một chuỗi nhị phõn cú độ dài n. Hàm băm như vậy được ký hiệu là: H:{0,1}*x{0,1}l {0,1}n.

Đại diện cho cỏc hàm băm khụng khoỏ là cỏc mó dũ sự thay đổi – MDC (Modification Detection Code, cũn được gọi là Manipulation Detection Code)[2]. Bản thõn MDC cũng được chia ra cỏc lớp con gồm:

1. Cỏc hàm băm một chiều (OWHFs): những hàm theo nghĩa của nú, khụng cú khả năng tỡm được giỏ trị ban đầu từ giỏ trị băm[2]; 2. Cỏc hàm băm chặn xung đột (CRHFs): những hàm này cú đặc

điểm rất khú để cú thể tỡm ra cỏc trị khỏc nhau mà cú cựng một giỏ trị băm[2].

Đại diện cho cỏc hàm băm cú khoỏ là cỏc mó xỏc thực bản tin – MAC (Message Authentication Code)[2]. Cỏc hàm này sử dụng để xỏc minh tớnh nguyờn vẹn và xỏc thực bản tin gốc. MAC cú hai thụng số chức năng phõn biệt, một là bản tin lối vào và một là khoỏ bớ mật (đụi khi cũn được gọi là chỉ số – index). Tưởng tượng rằng, người gửi tin A và người nhận tin B thoả thuận với nhau cựng sử dụng một khoỏ K. Khi A gửi tin M cho B, A sẽ gắn “cờ” xỏc thực  = HK(M), cờ này sẽ được B tớnh toỏn lại khi nhận được bản tin, dựa vào kết quả tớnh này mà B kết luận bản tin cú bị giả mạo hay khụng.

2.2.2 Cỏc tớnh chất cơ bản của hàm băm

Cỏc tớnh chất sau được ỏp dụng cho cả cỏc hàm băm khụng khoỏ và hàm băm cú khoỏ.

Tớnh chất chặn tiền ảnh: với tất cả cỏc lối ra đó biết trước của một hàm băm, khụng thể tớnh toỏn để tỡm ra được bất cứ một lối vào nào (tiền ảnh).

Tớnh chất chống xung đột: Khụng thể tớnh toỏn để tỡm ra 2 giỏ trị lối vào phõn biệt x, x’ của một hàm băm mà cho ra cựng một giỏ trị băm (h(x)= h(x’)).

Chỳ ý:Trong cỏc tài liệu liờn quan, tớnh chất chặn tiền ảnh cũn được gọi là tớnh chất một chiều, tớnh chất chống xung đột cũn được gọi là tớnh chất chống va chạm[2]. Nếu hàm băm cú va chạm được hiểu là tồn tại tiền ảnh thứ 2 mà 2 tiền ảnh này cho ra giỏ trị băm giống nhau.

Họ cỏc hàm băm thường được xõy dựng từ 2 thành phần được nghiờn cứu độc lập nhau. Thành phần thứ nhất là một hàm nộn thực hiện ỏnh xạ một lối vào cú độ dài xỏc định thành một lối ra cũng cú độ dài xỏc định. Thành phần thứ 2 là một bộ mở rộng miền mà với một hàm nộn cho trước, bộ mở rộng miền này sẽ tạo ra một hàm cho phộp lối vào cú độ dài ngẫu nhiờn.

2.3.1 Hàm nộn

Nhiều nghiờn cứu lý thuyết đó chỉ ra rằng từ một hàm một chiều khụng thể tạo ra được cỏc hàm băm cú tớnh chất chặn xung đột. Trong thực tế, cỏc hàm băm cú tớnh chất chặn xung đột thường được xõy dựng trờn cơ sở cỏc bộ mó khối.

Một bộ mó khối là một hoỏn vị đó được khoỏ lại, E:{0,1}nx{0,1}k  {0,1}n. Về mặt kỹ thuật, một bộ mó khối thực hiện nộn đầu vào của nú tức là ỏnh xạ k+n

bit lối vào thành n bit. Tuy nhiờn, cỏc bộ mó khối lại khụng cú tớnh một chiều. Hai lược đồ mó thụng dụng nhất được sử dụng trong cỏc hàm băm đú là[2]:

Davies-Meyer: h(x,y)= Ey(x)  y

Miyaguchi-Preneel: h(x,y) = Ex(y)  x  y.

2.3.2 Bộ mở rộng miền

Bộ mở rộng miền là một kiến trỳc chung để chuyển đổi một hàm nộn yờu cầu lối vào cú độ dài xỏc định thành một hàm băm cho phộp lối vào cú độ dài bất kỳ. Bộ mở rộng miền được sử dụng rộng rói nhất và đơn giản nhất là Merkle-Damgard, hoạt động theo giải thuật sau:

Cho trước: Hàm nộn C: {0,1}n x {0,1}m {0,1}n;

Hằng số IV n-bit (giỏ trị ban đầu dựng cho cỏc biến h0) Lối vào: Bản tin M

1. Chia M thành cỏc khối kớch thước m-bit là M1,…,Mk, padding

nếu cần;

2. Chọn Mk+1 được mó hoỏ cho |M | 3. Đặt h0 = IV;

4. For i=1 to k+1 đật hi=C(hi-1,Mi); 5. Lối ra: hk+1.

Trong giải thuật trờn hàm nộn C được đưa vào cấu trỳc lặp: lối ra của C, cựng với khối tiếp theo của bản tin tạo thành lối vào của vũng tiếp theo của C. Hàm băm của khối cuối cựng, khi này độ dài của bản tin đó được mó hoỏ, là hàm hash của toàn bộ bản tin. Cơ chế lưu tạm thời lối ra của hàm nộn là hi được gọi là biến

dõy chuyền (chaining variable) hay trạng thỏi bờn trong (internal state), xem hỡnh 2.1.

2.4 Cỏc hàm băm cơ bản

Phần này xin đề cập đến cỏc hàm hash được sử dụng phổ biến trong thực tế: Hàm MD5 và hàm SHA-1.

MD5 là phiờn bản mạnh hơn của MD4 được Ron Rivest tạo ra năm 1990. MD là viết tắt của Message Digest và con số tiếp theo cú nghĩa là cỏc hàm là thiết kế thứ 5 từ cựng một họ hàm hash.

SHA viết tắt của Secure Hash Algorithm - Thuật toỏn băm an toàn, được đưa vào sử dụng cựng với chuẩn chữ ký số - DSS (Digital Signature Standard) vào năm 1993(NIST00)[1]. SHA-1 cú mụ hỡnh rất gần với MD4. Chỳng sử dụng cựng một giải thuật padding, chia bản tin thành cỏc block cú kớch thước 512bit và độ dài của bản tin được mó hoỏ thành một số 64bit. Kớch thước của trạng thỏi bờn trong và lối ra của SHA-1 cú cựng độ dài 160bit, dài hơn so với kớch thước 128bit của MD5. Mặc dự, cỏc hàm lặp của chỳng đơn giản hơn và ớt thay đổi hơn so với cỏc hàm lặp của MD5 nhưng SHA-1 cú nhiều hàm lặp hơn. Nếu một bit của bản tin bị thay đổi sẽ kộo theo hơn một nửa số bớt trong khối 32 bit núi trờn thay đổi theo (trong MD5, chỉ 4 bit thay đổi).

Hàm hash Kich thước

khối Kớch thước từ Kớch thước lối ra rounds MD4 512 32 128 48 MD5 512 32 128 64 SHA-1 512 32 160 80 IV=h0 C h1 C h2 C hk C hk+1=h(M) M1 M2 Mk Mk+1 hk-1 Hỡnh 2.1: Kiến trỳc Merkle-Damgard

SHA-512 1024 64 512 80 (rounds: số lần update giỏ trị biến trạng thỏi bờn trong, vớ dụ MD5 cú rounds = 16*4)

Bảng 2.1 Thụng số đặc trưng của cỏc hàm băm thụng dụng

2.4.1 MD5

MD5 dựa trờn nguyờn tắc thiết kế MD4 là từ một hàm nộn được thiết kế dựa trờn một bộ mó khối sau đú sử dụng một bộ mở rộng miền theo kiến trỳc của Merkle-Damgard.

Từ một xõu bit x tạo thành một mảng M=M[0] M[1] … M[N-1] ; M[i] chớnh là một từ cú độ dài 32 bit, N là số từ.

Xõy dựng M:

Xuất phỏt từ một xõu x cú độ dài bit tuỳ ý gọi là b, b ≥ 0;

Paddinh vào x 1 bit “1” đơn lẻ và cỏc bit “0” để xõu bit x cú độ dài thoả món x  448 (mod 512).

64 bit cuối cựng của xõu x được mó hoỏ chứa thụng tin về độ dài thực của x; (cú thể được rỳt gọn theo modulo 264), do đú xõu kết quả sẽ chia hết 512;

Giỏ trị ban đầu của cỏc biến dõy chuyền được xỏc định (H1,H2,H3,H4) := (h1, h2, h3, h4);

Xõy dựng lối ra – bản túm lược bản tin dài 128bit Sử dụng 4 thanh ghi 32 bit A, B, C, D Mỗi vũng lặp sẽ xử lý 16 từ

Tại vũng thứ nhất, lấy 16 từ tiếp theo của M[i] để lưu vào mảng X For i:=0 to [(N/16) -1] do

For j:= 0 to 15 do X[j] := M[16i+j]

Thực hiện thao tỏc này trong 4 vũng (round) , mỗi vũng xử lý 16 bước, sau đú update giỏ trị cho biến dõy chuyền.

Đặt giỏ trị cho cỏc thanh ghi làm việc: (A, B, C, D) := (H1,H2,H3,H4); Round1: for j:= 0 to 15 do f (X,Y,Z) = (X  Y)  (X Z) t:= (A+ f (B,C,D) + X[z[j]] + y[j]); (A,B,C,D) := (D, B + (t s[j]),B,C); Round 2: for j:= 16 to 31 do g(X,Y,Z) = (XZ)  (YZ);

t:= (A + g(B,C,D) + X[z[j]] + y[j]); (A,B,C,D) := (D, B+ (t s[j]),B,C); Round 3: for j:= 32 to 47 do h(X,Y,Z) = XYZ t:= (A + h(B,C,D) + X[z[j]] + y[j]); (A,B,C,D) := (D, B+ (t s[j]),B,C); Round 4: for j:= 48 to 63 do k(X,Y,Z) = Y(X  Z) t := (A+k(B,C,D) + X[z[j]] + y[j]); (A,B,C,D) := (D, B+ (t s[j]),B,C);

Kết thỳc 4 vũng, update giỏ trị cho biến dõy chuyền: (H1,H2,H3,H4) := (H1 + A,H2 + B,H3 + C,H4 + D);

Giỏ trị Hash cuối cựng sẽ là: H1||H2 ||H3||H4 (đỳng cả về thứ tự byte cao, byte thấp).

Trong đú:

y[j] là cỏc hằng số xỏc định bởi 32 bit đầu của giỏ trị nhị phõn abs(sin(j+1)), 0 ≤ j ≤ 63.

z[j] định nghĩa là cấp dành cho cỏc từ truy cập z[0..15] = [0,1,2,…,15] z[16..31] = [1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12] z[32..47] = [5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2] z[48..63] = [0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9] s[j] là số vị trớ bit dịch trỏi s[0..15] = [7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22] s[16..31] = [5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20] s[32..47] = [4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23] s[48..63] = [6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21] 2.4.2 SHA 1

SHA1 cũng được phỏt triển từ MD4, cũng thực hiện chia bản tin thành cỏc khối cú kớch thước 512bit, sau đú lại chia tiếp cỏc khối 512bit thành cỏc từ (subblock) cú kớch thước 32bit[2]. Tập hợp cỏc từ được tạo ra này tạo thành mảng M=M[0] M[1] … M[N-1]. Độ dài của bản tin cũng được mó bằng một con số 64bit. Kớch thước lối ra 160bit. Sử dụng cỏc hàm mà MD4 dựng. Tuy nhiờn cú một số

biến), 4 rounds , mỗi rounds gồm 20 bước (MD4 sử dụng 3 rounds, MD5 sử dụng 4 rounds mỗi round 16 bước).Giải thuật của SHA1 như sau:

Xõy dựng M:

Xuất phỏt từ một xõu x cú độ dài bit tuỳ ý gọi là b, b ≥ 0;

Paddinh vào x 1 bit “1” đơn lẻ và cỏc bit “0” , ngoại trừ 64 bit cuối cựng (2 từ cuối cựng) để xõu bit x cú độ dài thoả món x  448 (mod 512).

2 từ cuối cựng của xõu x (chứa thụng tin về độ dài b của x).

Giỏ trị ban đầu của cỏc biến dõy chuyền được xỏc định (H1,H2,H3,H4) := (h1, h2, h3, h4);

Xõy dựng lối ra – bản túm lược bản tin dài 160bit Sử dụng 4 thanh ghi 32 bit A, B, C, D Mỗi vũng lặp sẽ xử lý 20 từ

Tại mỗi vũng, copy 16 từ (block thứ i) M[i] lưu vào mảng X For i:=0 to [(N/16) -1] do

For j:= 0 to 15 do X[j] := M[16i+j]

Thực hiện thao tỏc này trong 4 vũng (round) , mỗi vũng xử lý 20 bước, sau đú update giỏ trị cho cỏc biến dõy chuyền Hi.

Mở rộng gúi 16 từ thành gúi 80 từ: For j:= 16 to 79 do

Xj := ((Xj-3 Xj-8  Xj-14 Xj-16 )  1).

Sử dụng cỏc subblock này trong cỏc round gồm 20 bước.

Đặt giỏ trị cho cỏc thanh ghi làm việc: (A, B, C, D) := (H1,H2,H3,H4); Round1: for j:= 0 to 19 do f (X,Y,Z) = (X  Y)  (X Z) t:= ((A 5) + f (B,C,D) + E + Xj + y1]); (A,B,C,D,E) := (t, A, (B 30),C, D); Round 2: for j:= 20 to 39 do h(X,Y,Z) = XYZ t:= ((A 5) + f (B,C,D) + E + Xj + y2); (A,B,C,D,E) := (t, A, (B 30),C, D); Round 3: for j:= 40 to 59 do g(X,Y,Z) = (XZ)  (XY)  (YZ); t:= ((A 5) + f (B,C,D) + E + X + y );

(A,B,C,D,E) := (t, A, (B 30),C, D); Round 4: for j:= 60 to 79 do

h(X,Y,Z) = XYZ

t:= ((A 5) + f (B,C,D) + E + Xj + y2); (A,B,C,D,E) := (t, A, (B 30),C, D);

Kết thỳc 4 vũng, update giỏ trị cho biến dõy chuyền:

(H1,H2,H3,H4,H5) := (H1 + A,H2 + B,H3 + C,H4 + D,H5 + E); Giỏ trị Hash cuối cựng sẽ là: H1||H2 ||H3||H4||H5 (đỳng cả về thứ tự byte cao, byte thấp).

2.5 Cỏc hàm băm cú khoỏ

Như đó núi ở trờn, cỏc hàm hash cú khoỏ được sử dụng để cung cấp tớnh xỏc thực (chứ khụng phải đảm bảo độ mật) của bản tin, được gọi là cỏc MAC. Khoỏ sử dụng cho phộp người nhận B kiểm tra xem cỏc số liệu trong một file cú bị người khỏc can thiệp bất hợp phỏp vào hay khụng. MAC được xõy dựng từ một hàm hash hoàn thiện h, là một hàm băm khụng khoỏ cú tớnh chất chống xung đột, sử dụng khoỏ K bằng cỏch ghộp nối khoỏ K, K  {0,1}l, vào bản tin M cần gửi, được gọi là hàm HMAC.

HMACK(M) = h(K  c1 ||h(K  c2 ||M)) Trong đú c1 và c2 là cỏc hằng số l bit.

Ta xột trường hợp MAC được tạo ra từ hàm hash MD5:

Lối vào: xõu dữ liệu x cú độ dài tuỳ ý b ≥0, khoỏ K ≤128 Lối ra: Giỏ trị MAC của x cú độ dài 64 bit

Thuật toỏn: Tạo hàm MD5 từ hàm MD5 bằng cỏch padding thờm vào cỏc bớt “0” và “1”. Nếu kớch thước khoỏ K nhỏ hơn 128 bit, K sẽ được tự nối chớnh nú để đạt được độ dài 128bit. Sau đú, xõy dựng cỏc khoỏ K0, K1, K2 từ khoỏ K. Mỗi Ki sẽ được sử dụng với một vai trũ khỏc nhau. Cỏc bước: Chọn cỏc hằng số Ti và Ui; T0 = 97 ef 45 ac 29 0f 43 cd 45 7e 1b 55 1c 80 11 34 T1 = b1 77 ce 96 2e 72 8e 7c 5f 5a ab 0a 36 43 be 18 T2 = 9d 21 b4 21 bc 87 b9 4d a2 9d 27 bd c7 5b d7 c3 Ui = Ti ||Ti+1 ||Ti+2 ||Ti ||Ti+1 ||Ti+2

Chia cỏc khoỏ Ki kớch thước 128bit thành cỏc khoỏ con Kj[i], 0 ≤ i ≤ 3, cú kớch thước 32 bit.

Cỏc khoỏ K0[i] dựng để thay thế cho cỏc giỏ trị hi trong giải thuật MD5

Cỏc khoỏ K1[i] được tớnh mod 232 , thay cho cỏc y[j] trong 4 vũng round của MD5.

Cỏc khoỏ K2 được dựng để tạo ra một khối 512bit bằng cỏch: K2||K2  T0||K2 T1 ||K2 T2

Thực hiện giải thuật MD5 với cỏc thay đổi như trờn.

Giỏ trị MAC được lấy là 64 bit bờn trỏi của lối ra 128 bit của MD5 với cỏc thay đổi như trờn.

2.6 Tấn cụng cỏc hàm băm

Nghiờn cứu cỏc phương ỏn tấn cụng khả thi đối với cỏc hàm băm sẽ cung cấp thờm những đỏnh giỏ sõu hơn về độ an toàn của chỳng khi sử dụng. Hiện nay cú nhiều dạng, nhiều phương phỏp được nghiờn cứu chỉ với mục đớch tấn cụng cỏc hàm băm.

Kiểu tấn cụng thụng thường nhất đú là kẻ giả mạo O bắt đầu bằng một cặp (x,y); y = h(x). Sau đú, O tớnh z = h(x) và thử đi tim x’ = x sao cho h(x’) = h(x). Nếu tỡm được một giỏ trị x’ như vậy, O đó giả mạo thành cụng. Tớnh chất chặn xung đột (chống va chạm) của hàm băm được yờu cầu để ngăn chặn kiểu giả mạo này.

Một kiểu tấn cụng khỏc mà O cú thể sử dụng đú là trước tiờn, O tỡm 2 bức điện xx’ sao cho h(x) = h(x’). Sau đú O đưa bản x cho A và thuyết phục A tạo bản túm lược y = h(x). Khi đú O sẽ giả mạo hợp lệ bằng cặp (x’,y) thay vỡ cặp (x,y) mới là bản được A thụng qua. Chớnh vỡ lý do này mà cỏc hàm băm yờu cầu phải cú tớnh chặn xung đột mạnh.

Dạng tấn cụng thứ 3 mà O cú thể dựng tới đú là O thu được bản túm lược bản tin z. Sau đú O đi tỡm x sao cho h(x) = z. Để đối phú với dạng tấn cụng này, hàm băm phải cú tớnh chất một chiều (chặn tiền ảnh).

Tuy nhiờn cỏc tớnh chất núi trờn của hàm băm chỉ mang tớnh lý thuyết, được làm trũn trong một phạm vi xỏc suất nào đú, trong thực tế cỏc va chạm luụn tồn tại. Do đú cỏc phương phỏp tấn cụng luụn cú cơ hội thành cụng.

2.6.1 Dạng tấn cụng cơ bản

Phương phỏp tấn cụng mạnh là những phương phỏp tấn cụng độc lập với giải thuật, cỏc phương phỏp tấn cụng cú thể ỏp dụng được cho bất kỳ hàm băm nào.

Chỳng coi hàm băm là một hộp đen với những đặc điểm nổi bật nào đú về độ dài bit của lối ra n (cú thể cả kớch thước khoỏ K đối với MACs) và thời gian chạy của một thao tỏc tớnh hàm băm. Cỏc dạng tấn cụng của phương phỏp này là tấn cụng dựa trờn từng bit kết quả băm thu được, tỡm kiếm vột cạn khụng gian khoỏ MAC và tấn cụng ngày sinh nhật.

2.6.1.1 Tấn cụng khụng gian khoỏ của MAC

Người ta sử dụng phương phỏp tỡm kiếm vột cạn để luận ra cỏc khoỏ của MAC. Biết trước một cặp text-MAC, kẻ tấn cụng cú thể tớnh ra giỏ trị MAC nbit của đoạn text đú bằng tất cả cỏc khoỏ cú thể, sau đú kiểm tra giỏ trị MAC nào thoả món cặp text-MAC núi trờn. Với khụng gian khoỏ t-bit, yờu cầu 2t thao tỏc MAC, sau đú tỡm được 1+2t-n khúa để thử. Giả sử rằng MAC là một ỏnh xạ ngẫu nhiờn, sau t/n cặp text-MAC được kiểm tra, rất cú thể tỡm được một khoỏ duy nhất trong cỏc khoỏ dựng để thử sẽ thoả món. Trường hợp lý tưởng, khoỏ MAC khụng thể khụi phục được nếu sử dụng ớt hơn 2t thao tỏc.

Chỳ ý: Với kớch thước khoỏ sử dụng là t-bit, lối ra cú độ dài xỏc định n-bit, khoỏ dự đoỏn một cỏch ngẫu nhiờn sẽ trựng với khoỏ MAC sử dụng với xỏc suất xấp xỉ 2-t với t < n. [2]

Một phần của tài liệu Nghiên cứu hệ mật mã khoá công khai trong giao dịch điện tử (Trang 25)

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

(88 trang)