Hàm Hash trong xử lý mật mã
chơng hàm hash 7.1 chũ kí hàm hash Bạn đọc thấy sơ dồ chữ kí chơng cho phép kí điện nhỏ.Ví dụ, dùng DSS, điện 160 bit đợc kí chữ kí dài 320 bít Trên thực tế ta cần điện dài nhiều Chẳng hạn, tài liệu pháp luật dài nhiều Megabyte Một cách đơn giản để gải toán chặt điện dài thành nhiều đoạn 160 bit, sau kí lên đoạn độc lập Điều tơng tự nh mà chuôĩ dài rõ cách mà kí tự rõ độc lập khoá (Ví dụ: chế độ ECB DES) Biện pháp có số vấ đề việc tạo chữ kí số Trớc hết, với điện dài, ta kết thúc chữ kí lớn ( dài gấp đôi điện gốc trờng hợp DSS) Nhợc điểm khác sơ đồ chữ kí an toàn lại chậm chúng dùng pháp số học phức tạp nh số mũ modulo Tuy nhiên, vấn đề nghiêm trọng với phép toán búc điện đà kí bị xếp lại đoạn khác nhau,hoặc số đoạn chúng bị loại bỏ điện nhận đợc phải xác minh đợc Ta cần bảo vệ nguyên vẹn toàn điện điều thực đợc cách kí độc lập mẩu nhỏ chúng Giải pháp cho tất vấn đề dùng hàm Hash mà khoá công khai nhanh Hàm lấy điện có độ dài tuỳ ý tạo tóm lợc thông báo có kích thớc qui định (160 bit dùng DSS) Sau tóm lợc thông báo đợc kí Vơi DSS, việc dùng hàm Hash đợc biểu diễn trê hình 7.1 Khi Bob muốn kí điện x, trớc tiên xây dựng bnr tóm lợc thông báo z = h(x) sau ®ã tÝnh y = sigK (z ) Bob trun cỈp ( x, y) trªn kªnh XÐt thÊy cã thĨ thùc xác minh (bởi ) cách trớc hết khôi phục tóm lợc thông báo z =h (x) hàm h công khai sau kiểm tra xem verk (x,y) có = true, hay không Hình 7.1.Kí tóm lợc thông báo Bức điện :x độ dài tuỳ ý tóm lợc thông báo:z = h (x) 160 bit ↓ Ch÷ kÝ y = sig K(z) 320 bit 7.2 hàm hash không va chạm Chúng ta cần ý rằng,việc dùng hàm hash h không làm giảm an toàn sơ đồ chữ kí tóm lợc thông báo đợc chữ kí điện Điều cần thiết h cần thoả mÃn số tinhs chất để tranh giả mạo Kiểu công thông thờng Oscar bắt đầu diện đợc kí hợp lệ (x, y), y =sigK(h (x)),(Cặp (x, y) điện đợc Bob kÝ tríc ®ã) Sau ®ã tÝnh z = h(x) thử tìm x x cho h(x) = h(x) Nếu Oscar làm đợc nh vậy, (x, y) điện kí hợp lệ, tức điện giả mạo Để tránh kiểu công này, h cần thoả mÃn tính không va chạm nh sau: Định nghĩa 7.1 Hàm hash h hàm không va chạm yếu cho trớc điện x, tiến hành mặt tính toán để tìm bøc ®iƯn x ≠ x’ cho h (x’) = h(x) Một công kiểu khác nh sau: Trớc hết Oscar tìm hai điện x x cho h(x) =h(x) Sau Oscar đa x cho Bob thyết phục Bob kí tóm lợc thông báo h(x) để nhận đợc y Khi đố (x,y) thông báo (bức điện ) giả mạo hợp lệ Đây lí đa tính chất không va chạm khác Định nghĩa 7.2 Hàm Hash h không va chạm mạnh khả tính toán để tìm điênk x x cho x x h(x) = h(x) Nhận xét rằng: không va chạm mạnh bao hàm va chạm yếu Còn kiểu công thứ 3: Nh đà nói phần 6.2 việc giả mạo chữ kí tóm lợc thông báo z ngẫu nhiên thờng xảy với sơ đồ chữ kí Giả sử Oscar tính chữ kí tóm lợc thông báo z ngẫu nhiên nh Sau tìm x cho z= h(x) Nếu làm đợc nh (x,y) điện giả mạo hợp lệ Để tránh đợc công này, h cần thoả mÃn tính chất chiều (nh hệ mà khoá công khai sơ đồ Lamport) Định nghĩa 7.3 Hàm Hash h chiều cho trớc tóm lợc thông báo z, thực mặt tính toán để tìm điện x cho h(x) = z Bây ta chứng minh rằng, tính chất không va chạm mạnh bao hàm tính chiều phản chứng Đặc biƯt ta sÏ chøng minh r»ng, cã thĨ dïng tht toán đảo với hàm Hash nh chơng trình (giả định ) thuật toán xác suất Las Vegas để tìm va chạm Sự rút gọn có thĨ thùc hiƯn víi mét gi¶ thiÕt u vỊ kÝch thớc tơng đối vùng miền (domain and range) hàm Hash Ta giả thiết tiếp hàm Hash h: XZ, X,Z tập hữu hạn X 2Z Đây giả thiết hợp lí :Nếu xem phần tử X đợc mà nh xâu bít có độ dài log2X phần tử Z đợc mà hoá nh xâu bít có độ dài log2X tóm lợc thông báo z = h(x) ngắn điện x bít (ta quan tâm đến tình vùng X vô hạn xem xét điện dài tuỳ ý Lập luận ta áp dụng cho tình này) Tiếp tục giả thiết ta có thuật toán đảo h, nghĩa có thuật toán A chấp nhận nh đầu vào tóm lợc thông báo zZ tìm phần tử A(z) X cho h(A(z)) = z Ta chứng minh địng lí dới đây: Định lí 7.1: Giả sử h: XZ hàm Hash, XvàZ hữu hạn X 2Z Cho A thuật toán đảo h Khi tồn thuật toán Las Vagas xác suất tìm đợc va chạm h với xác suất là1/2 Chứng minh : Xét thuật toán B đa hình 7.2 Rõ ràng B thuật toán xác suất kiểu Las Vegas hoạc tìm thấy va chạm, cho câu trả lời không Vấn đề lại ta phải tịnh xac suất thành công, Với x thuộc X, ®Þnh nghÜa x ∼ x1 nÕu h(x) = h(x1) DƠ thấy rằng, quan hệ tơng đơng Ta định nghĩa: [x] = {x1X: x x1} Mỗi lớp tơng đơng [x] chứa ảnh đảo phần tử thuộc Z nên số lớp tơng đơng nhiều Z Kí hiệu tập lớp tơng đơng C Bây giả sử, x phần tử X đợc chọn bớc Với giá trị x này, có[x]giá trị x1 cho phép trở lại bớc [x]-1 giá trị x1 khác với x nh bớc thành công (Chú ý thuật thoán A biểu diễn lớp tơng đơng [x] ®· chon bíc 1) Nh vËy, cho trớc lựa chọn cụ thể xX, xác suất thành công ([x)-1/[x] Hình.7.2 Dùng thuật toán đảo A để tìm va chạm cho hàm Hash 1.chọn ssó ngẫu nhiªn x ∈X 2.TÝnh z=h(x) 3.Tinh x1= A(Z) if x1 x then x x1 va chạm dới h (thành công) else Quit (sai) Xác suất thành công thuật toán B trung bình cộng tất lựa chon x có thể: P(thành công) = (1/X)xX([x]-1)/[x] = (1/X) ∑c∈C∑x∈C(c-1)/c = 1/X∑c∈C(c-1) = (1/X) ∑c∈Cc - ∑ c∈C1 >= (X -Z) / X >= ((X -Z)/2) /X = ẵ Nh vậy, ta đà xây dựng thuật toán Las Vegas có xác suất thành công 1/2 Vì thế, điều kiện đủ để hàm Hash thoả mÃn tính chất không va chạm mạnh bao hàm hai tính chất khác.Phần lại chơng ta quan tâm đến hàm Hash không va chạm mạnh 7.3 công ngày sinh nhật(birthday) Trong phần này, ta xác định điều kiện an toàn cần thít ch hàm Hash điều kiện phụ thuộc vào lực lợng tập Z (tơng đơng kích thớc bảng thông báo ).Điều kiện cần thiết nà rút t phơng pháp tìm kiếm đơn giản ác va chạm mà ngời ta đà biết đến dới tên công ngày sinh nhật (birthday phơng pháparradox), toán:một nhóm 23 ngời ngẫu nhiên, cã Ýt nhÊt ngêi cã ngµy sinh trïng với xác suất là1/2.(Dĩ nhiên, cha phải nghịch lí,song trực giác đối lập xảy ra) Còn lí thuật ngữ công ngày sinh nhật rõ ràng ta tiếp tuch trình bày Nh trớc đây, ta hÃy giả sử :h:XZ hàm Hash, X,Z hữu hạn X >=2Z.Địng nghĩa X = m vàZ = n.Không khó khăn nhận thấy rằng, có n va chạm vấn đề đằt cách tìm chúng Biện pháp đơn sơ chọn k phần tử ngẫu nhiên phân biệt x1,x2 xk X, tính z1 = h(x1),1= t+2 Bây ta hÃy xem xét tình m = t+1 Cần dùng cấu trúc khác cho h Nh trớc đây, giả sử |x|=n>m Trớc hết ta mà x theo cách đặc biệt Cách dùng hàm f có định nghĩa nh sau: f(0) = f(1) = 01 ThuËt to¸n để xây dựng h*(x)đợc miêu tả hình 7.5 Phép mà xy = y(x) đợc định nghĩa vớc tho¶ m·n hai tÝnh chÊt quan träng sau: nÕu x x y(x) y(x) (tức x y(x) đơn ánh) Không tồn tạI hai chuỗi x x chuỗi z cho y(x)= z||y(x) Nói cách khác không cho phép mà hoá fpsstix phép mà khác ĐIều dễ dàng thấy đợc chuỗi y(x) bắt đầu 11 không tồn tạI hai số liên tiếp phần lạI chuỗi) Hình 7.5 Mở rộng hàm hash h thành h* (m = t+1) Gi¶ sư y = y1y2 yk = 11||f(x1)|| ||f(xn) g1 = h(01||y1) for i=1 to k-1 gi+1 = h(gi||yi+1) Định lý 7.4 h*(x) = gk Giả sử h: (Z2)n(Z2) hàm hash không va chạm mạnh Khi hàm h*: i =m (Z2)t(Z2)t đợc xây dựng nh hình 7.5 hàm hash không va chạm mạnh Chứng minh: Giả sử ta tìm đợc x x cho h*(x)=h*(x’) KÝ hiÖu: y(x) = y1y2 yk y(x’) = y1y2 yl Ta xét hai trờng hợp: Trờng hợp 1: k=l Nh định lý 7.3 ta tìm thấy va chạm đỗi với h ta nhận đợc y = y song đIều lạI bao hàm x = x, dẫn đến mâu thuẫn Trờng hợp2: k l Không tính tổng quát ,giả sử l>k trờng hợp xử lý theo kiểu tơng tự Nếu giả thiết ta không tìm thấy va chạm h ,ta có dÃy phơng trình sau: yk = y’l yk-1 = y’l-1 y1 = y’l-k+1 Song đIều mâu thuẫn với tính chất không posfixx nêu Từ ta kết luận h* hạm không va chạm Ta tổng kết hoá hai xây dựng phần số ứng dụng h cần thiết để tính h* theo định lý sau: Định lý 7.5 Giả sử h: (Z2)n(Z2) hàm hash không va chạm mạnh,ở m>=t+1 Khi tồn tạI hàm không va chạm mạnh h*: i =m (Z2)t(Z2)t Số lần h đợc tính ớc lỵng h* nhiỊu nhÊt b»ng : n nÕu m>=t+2 m − t − 1 l + 2n +2 m= t+2 |x|=n 7.6 hàm hash dựa hệ mật Cho đến nay, phơng pháp đà mô tả để đa đến nhứng hàm hash hầu nh chậm ứng dụng thực tiễn Một biện pháp khác dùng hệ thống mà hoá bí mật có để xây dừng hàm hash Giả sử (P,C,K,E,D) hệ thống mật mà an toàn mặt tính toán Để thuận tiện ta giả thiết P = C = K = (Z2)n.ở đâychọn n>=128 để xây ngăn chặn kiểu công ngày sinh nhật ĐIều loạI trừ việc dùng DES (vì độ dài khoá DES khác với độ dài rõ) Giả sử cho trớc xâu bit: x= x1||x2|| ||xk xi ∈ (Z2)n, 1≤ i ≤ (nÕu sè bit x bội n cần chèn thêm vào x theo cách Chẳng hạn nh cách làm nục 7.5 Để đơn giản ta bỏ qua đIểm này) ý tởng bắt đầu giá trị ban đầu cố định g0 =IV sau ta xây dựng g1, ,gk theo quy tắc thiết lập : gi = f(xi,gi-1) f hàm kết hợp toàn phép mà hoá hệ mật đợc dùng Cuối ta định nghĩa tóm lợc thông báo h(x) =gk Vài hàm hash kiểu đà đợc đề xuất nhiều loại chúng tỏ không an toàn (không phụ thuộc vào việc liệu hệ mật có an toàn hay không ) Tuy nhiên , có phơng án khác an toàn sơ đồ : gi = e gi-1 (xi) ⊕ xi gi = e gi-1 (xi) ⊕ xI ⊕ gi-1 gi = e gi-1 (xi ⊕ gi-1) ⊕ xI gi = e gi-1 (xi ⊕ gi-1) ⊕ xI ⊕ gi-1 7.7 Hµm hash MD4 Hàm hash MD4 đợc Riverst đề xuất năm 1990 hiên mạnh MD5 đợc đa năm 1991 Chuẩn hàm hash an toàn (hay SHS) phức tạp song da tên phơng pháp tơng tự Nó đợc công bố hồ sơ liên bang năm 1992 đợc chấp nhận làm tiêu chuẩn vào ngày 11/5/1993 Tất hàm hash nhanh nên thực tế chúng dùng để kí điện dài Trong phần mô tả chi tiết MD4 thảo luận số cảI tiến dùng MD5 SHS Cho trớc xâu bit tríc hÕt ta t¹o mét m¹ng: M = M[0] M[1] M[N-1] M[i] xâu bit có ®é dµI 32 vµ N ≡ mod 16 Ta gọi M[i] từ M đợc xây dựng từ x thuật toán hình 7.6 Hình 7.6 Xây dùng M MD4 d = 447-(|x| mod 512) giả sử l kí hiệu biểu diễn nhị ph©n cđa |x| mod 264.| l| = 64 M = x||1||0d||l Trong việc xây dựng M, ta gắn số ssơn lẻ vào x, sau gài thêm số đủ để độ dài trở nên đồng d víi 448 modulo 512.,ci cïng nèi thªm 64 bit cha biểu diễn nhị phân độ dàI (ban đầu) x(đợc rút gọn theo móulo 264 cần) Xâu kết M có độ dàI chia hết cho 512 Vì chặt M thành từ 32 bit , số từ nhận đợc N-sẽ chia hết cho 16 Bây giờ, tiếp tục xây dựng tóm lợc thông báo 128 bit Hình 7.7 đa mô tả thuật toán mức cao Bản tóm lợc thông báo đợc xây dựng nh kết nối từ A,B,C D mà ta gọi ghi Bốn ghi đợc khởi động nh bớc TiÕp theo ta xư lÝ b¶ng M 16 bit tõ lúc Trong vòng lặp bớc 2, lấy 16 từ M lu chúng bảng X (bớc 3) Các giá trị bốn ghi dịch sau đợc lu lại (bớc 4) Sau ta thực ba vòng băm (hash) Mỗi vaòng gồm phép toán thực 16 từ X Các phép toán đợc thực ba vòng tạo giá trÞ míi ghi Ci cïng ,bèn ghi đợc update (cập nhật) bớc cách cộng ngợc giá trị lu trớc bớc Phép cộng đợc xác định cộng số nguyên dơng ,đợc rút gọn theo modelo 232 Ba vòng MD4 khác (không giông nh DES 16 vòng nh nhau) Trớc hết ta mô tả vàI phép toán khác ba vòng Trong phần sau,ta kí hiệu X Y từ đầu vào phép toán tạo từ đầu Dới phép toán đợc dùng: XY phép AND theo bit X Y XY phép OR theo bit X Y XY phép XOR theo bit X Y ơX phần bù X X+Y phép cộng theo modulo 232 X= s >=0) Chú ý rằng, tất phép toán tất nhanh có phép số học đợc dùng phép cộng modulo 232 Nếu MD4 đợc ứng dụng cần tính đến kiến trúc máy tính mà chạy để thực xác phép cộng Giả sử a1a2a3a4 byte từ xem ai,nh số nguyên dảI 0-255 đợc biểu diễn dới dạng nhị phân Trong kiến trúc kiểu endian lớn (chẳng hạn nh trạm Sunsparc) từ biểu diễn số nguyên a1224 + a2216 + a328 + a4 Trong kiến trúc kiểu endian nhỏ (chẳng hạn họ intel 80xxx) Từ biểu diễn số nguyên: a4224+ + a3 216 + a2 28+a1 MD4 gi¶ thiÕt dïng kiến trúc kiểu endian nhỏ ĐIều quan trọng tóm lợc thông báo độc lập với kiến trúc Vì thể muốn chạy MD4 máy tính endian lín cÇn thùc hiƯn phÐp céng X+Y nh sau: Trao đổi x1 x4; x2 x3; y1 vµ y4; y2 vµ y3 TÝnh Z = X+Y mod 232 Trao đổi z1 z4 ; z2 z3 Hình 7.7 hàm hash MD4 A= 67452301 (hÖ hexa) B = efcdab89 (hÖ hexa) C = 98badcfe (hÖ hexa) D = 10325476 (hÖ hexa) for i = to N/16-1 for i = to 15 X[i] = M[16i+j] AA = A BB = B CC = C DD = D round1 round2 round3 A = A+AA B = B+ BB C = C + CC D = D + DD Các vòng 1, MD4 dùng tơng ứng ba hàm f, g, h Mỗi hàm hàm boolean tính theo bit dùng từ làm đầu vào tạo từ đẩu Chúng đợc xác định nh sau: f(X,Y,Z) = (X∧Y) ∨((-X)∧Z) g(X,Y,Z) = (X∧Y) ∨(X∧Z) ∨(Y∧Z) h(X,Y,Z) = X Y Z Các hình 7.8-7.10 mô tả đầy đủ vòng 1,2 MD4 MD4 đợc thiết kế chạy nhanh thực phần mềm chạy máy Sun SPARC có tốc độ 1.4 Mbyte/s Mặt khác, khó nói đIều cụ thể độ mật hàm hash, chẳng hạn nh MD4 không dựa vàI toán khó đà nghiên cứu kĩ (ví dụ nh phân tích nhân tử bàI toán logarithm rời rạc) Vì trờng hợp Dé tin cậy vào độ an toàn hệ thống đạt đợc thời gian vµ nh vËy cã thĨ hi väng hƯ thèng vừa đợc nghiên cứu không tìm thấy không an toàn Hình 7.8 : Vòng MD4 (round 1) 10 11 12 13 14 15 16 A = (A+ f(B,C,D) + X[0])