2.3.2.1 Những vấn đề cơ bản về nhóm bện
Nhóm bện đầu tiên đƣợc Artin công bố năm 1947. Lúc đầu nó đƣợc dùng để xây dựng giao thức trao đổi khoá Diffie – Hellmann và một hệ mã hoá khoá công khai. Sau đó, nhiều giao thức mã hoá dựa trên nhóm bện đƣợc công bố.
Thông thƣờng, để nói về nhóm bện ngƣời ta thƣờng hình dung qua biểu diễn hình học. Hình sau biễu diễn một tập n dải treo song song trên một đƣờng nằm ngang. Thứ tự các dải đƣợc đánh số từ 1, 2, .., n và từ trái sang phải. Một n-bện thu đƣợc bằng cách bện các dải vào nhau. Chú ý rằng một cặp hai dải có hai cách để bện, dải thứ nhất phía trên, dải thứ hai phía dƣới và ngƣợc lại.
Hình 2.4 Biểu diễn hình học của bện kết hợp, bện nghịch đảo, bện tương đương
Biểu diễn Artin: Emil Artin biểu diễn nhóm n-bện với n-1 bộ sinh (cộng với đồng nhất thức e). Định nghĩa δivới i = 1, 2, .., n -1, và các quan hệ sau: Cho n ≥ 2, nhóm Bn của n-bện là nhóm đƣợc sinh bởi δ1,δ2…δn - 1 với các điều kiện:
(i) δi δj= δj δi với | i - j | ≥ 2 (ii) δi δi+1δi= δi+1 δi δi+1
Mỗi thành phần của nhóm Bn đƣợc gọi là một n-bện và số nguyên n đƣợc gọi là chỉ số bện. Một n-bện là một tập n bện không kết nối mà tất cả chúng đƣợc gắn với hai thanh ngang phía trên và phía dƣới theo cách mà mỗi bện hƣớng từ trên xuống dƣới. Trong một tập bện, nếu một bện thay đổi hình thức sang một dạng tƣơng tự thì khi đó hai bện đƣợc cho là tƣơng đƣơng. Bện kết hợp của hai bện „a‟
và „b‟ thu đƣợc bằng cách đặt „a‟ phía trên „b‟. Đồng nhất thức của nhóm Bn là „e‟. Phần tử nghịch đảo δ-1
từ bện δ thu đƣợc từ việc chuyển bện trên thành bện dƣới. Một số vấn đề toán học khó trong các nhóm bện. Hai phần tử x và y là liên hợp, ký hiệu là x ~ y, nếu có một phần tử „a‟sao cho y = axa-1. Với m < n, Bm đƣợc coi là nhóm con của Bn đƣợc sinh bởi δ1,δ2…δn - 1 . Với mỗi lƣợc đồ H1: {0, 1}*
Bl+r và H2: Bl+r {0, 1}*
là một hàm một chiều.
- Vấn đề phân xử liên hợp (Conjugacy Decision Problem - CDP): Cho (x,
y) Є Bn x Bn , xác định xem x và y có liên hợp hay không.
- Vấn đề tìm kiếm liên hợp (Conjugacy Search Problem - CSP): Cho (x, y)
Є Bn x Bn và x, y là liên hợp. Tìm b Є Bn sao cho y = bxb-1.
- Vấn đề tìm kiếm liên hợp suy rộng (Generalized Conjugacy Search Problem - GCSP): Cho (x, y) Є Bn x Bn sao cho y = axa-1với a Є Bm nào đó; m < n. Tìm b Є Bn sao cho y = bxb-1.
- Vấn đề phân tích liên hợp Conjugacy Decomposition Problem - CDP): Cho (x, y) Є Bn x Bn sao cho y = axa-1với a Є Bn nào đó; m < n. Tìm b1, b2 Є Bnsao cho y = b1 x b2.
2.3.2.2 Hệ mã hoá khoá công khai
Hệ mã hoá khoá công khai trên nhóm bện xuất hiện đầu tiên vào năm 1999-
2000 dựa trên vấn đề tìm kiếm liên hợp suy rộng (GCSP). Chúng ta chia bện Bn
thành hai bện con LBl (Bl) và LBr (Br), ở đây n = l + r. LBl (và LBr) là nhóm con của Bl+r bao gồm các bện đƣợc tạo ra bằng việc bện l-bện bên trái (hoặc r-bện phải) trong số (l + r) bện. LBl đƣợc sinh bởi δ1,δ2…δl - 1 và LBr đƣợc sinh bởi δ1, δ2…δr – 1 . Cho bất kỳ a Є LBl và b Є LBr , ab = ba.
Hệ mã hoá khoá công khai nhƣ sau:
Thông tin công khai: l, r, Bl+r, liên hợp (x, y) Є Bl+r x Bl+r, hàm băm H
Khoá bí mật: a Є LBl sao cho y = axa-1.
Mã hoá: Chọn b Є RBr. Gửi (c, d) ở đây c = bxb-1 và d = H(byb-1) m. Giải mã: Tính m = H(aca-1) d.
Để kiểm tra, có thể thấy nhƣ sau:
aca d Habxb a H byb m
H 1 1 1 1
Habxb1a1 H baxa1b1m
Habxb1a1 H abxb1a1m
= m
(Hàm băm H có đầu vào là một bện, đầu ra là một chuỗi nhị phân) 2.4 HÀM BĂM
2.4.1 Đặt vấn đề
Hàm băm mật mã là hàm toán học chuyển đổi một thông điệp có độ dài bất kỳ thành một dãy bit có độ dài cố định. Dãy bit này đƣợc gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu.
Dễ dàng nhận thấy rằng hàm băm h không phải là một song ánh. Do đó, với thông điệp x bất kỳ, tồn tại thông điệp x‟ ≠ x sao cho h(x)= h(x‟). Lúc này, ta nói rằng “có sự đụng độ xảy ra”.
Một hàm băm h đƣợc gọi là an toàn (hay “ít bị đụng độ”) khi không thể xác định đƣợc (bằng cách tính toán) cặp thông điệp x và x‟ thỏa mãn x≠x‟ và h(x) = h(x‟). Để ứng dụng trong thực tiễn, các thuật toán băm phải là hàm một chiều để khó có thể xây dựng lại thông điệp ban đầu từ thông điệp rút gọn.
Hàm băm giúp xác định đƣợc tính toàn vẹn dữ liệu của thông tin: mọi thay đổi, dù là rất nhỏ, trên thông điệp cho trƣớc, ví dụ nhƣ đổi giá trị 1 bit, đều làm thay đổi thông điệp rút gọn tƣơng ứng. Tính chất này hữu ích trong việc phát sinh, kiểm tra chữ ký số, các đoạn mã chứng nhận thông điệp, phát sinh số ngẫu nhiên, tạo ra khóa cho quá trình mã hóa…
2.4.2 Hàm băm MD5
2.4.2.1 Mô tả thuật toán
Thuật toán có đầu vào là một thông điệp có độ dài tuỳ ý và có đầu ra là một chuỗi có độ dài cố định là 128 bit. Thuật toán đƣợc thiết kế để chạy trên các máy tính 32 bit.
Thuật toán:
Thông điệp đầu vào có độ dài b bit bất kỳ. Biểu diễn các bit dƣới dạng nhƣ sau: m[0] m[1] m[2] ... m[b-1]
Bƣớc1: Các bit gắn thêm : Thông điệp đƣợc mở rộng, thêm bit vào phía sau sao cho độ dài của nó (bit) đồng dƣ với 448 theo modulo 512.
Bƣớc 2: Gắn thêm độ dài: Dạng biểu diễn 64 bit độ dài b của chuỗi ban đầu đƣợc thêm vào phía sau kết quả của bƣớc 1.
Bƣớc 3: Khởi tạo bộ đệm MD: Một bộ đệm 4 từ (A,B,C,D) đƣợc dùng để tính mã số thông điệp. Ở đây mỗi A,B,C,D là một thanh ghi 32 bit.
Bƣớc 4 :Xử lý thông điệp theo từng khối 16 từ. Định nghĩa các hàm phụ, các hàm này nhận giá trị đầu vào là 3 từ 32 bit và tạo tạo ra một word 32 bit.
F(X,Y,Z) = XY v not(X) Z G(X,Y,Z)= XZ v Y not(Z) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor (X v not(Z))
Bƣớc này sử dụng một bảng 64 giá trị T[1 .. 64] đƣợc tạo ra từ hàm sin. Gọi T là phần tử thứ i của bảng, thì T là phần nguyên của 4294967296*|sin(i)| , i đƣợc tính theo radian.
Bƣớc 5: Thông điệp rút gọn = A||B||C||D. 2.4.2.2 Đánh giá thuật toán
Về tốc độ sinh ra chuỗi cốt yếu thì MD5 chậm hơn so với MD4 nhƣng nó lại an toàn hơn rất nhiều so với MD4. Thuật toán số hóa thông điệp MD5 khá đơn giản để thực hiện, cung cấp một giá trị băm của thông điệp với độ dài tuỳ ý. Ngƣời ta cho rằng độ khó để tìm đƣợc 2 thông điệp có cùng giá trị băm là khoảng 264
tính, và độ khó để tìm đƣợc một thông điệp với giá trị băm cho trƣớc là 2128 bƣớc tính. Tuy nhiên lỗ hổng mới phát hiện trong thuật toán MD5 sẽ cho phép kẻ tấn công có thể tạo ra file giả mạo trong vòng vài giờ với loại máy tính đạt chuẩn.
2.4.3 Hàm băm SHA
Thuật toán là SHA dựa trên thiết kế MD4 với một số khác biệt tạo nên giá trị băm 160 bit. Các kết quả nghiên cứu 2005 về an toàn của SHA-1 đề xuất sử dụng nó trong tƣơng lai.
2.4.3.1 Mô tả thuật toán
Đầu vào của thuật toán là một thông điệp có chiều dài bất kỳ nhỏ hơn 264
bit, SHA-1 cho ra kết quả là một thông điệp rút gọn có độ dài là 160 bit
Mở rộng thông điệp:
f(t;B,C,D) đƣợc định nghĩa nhƣ sau.
f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) (0≤t≤19)
f(t;B,C,D) = B XOR C XOR D (20≤t≤39)
f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40≤t≤59)
f(t;B,C,D) = B XOR C XOR D (60≤t≤79).
Thông điệp M đƣợc mở rộng trƣớc khi thực hiện băm. Mục đích của việc mở rộng này là để đảm bảo cho thông điệp mở rộng có độ dài là bội số của 512.
Thông điệp mở rộng:
Sau khi thông điệp đã đƣợc mở rộng, thông điệp mở rộng đƣợc phân tích thành N khối 512 bit M(1),M(2),…,M(N). Trong đó 512 bit của khối dữ liệu đầu vào có thể đƣợc thể hiện bằng 16 từ 32 bit,
Khởi tạo giá trị băm:
Trƣớc khi thực hiện giá trị băm, giá trị băm ban đầu H(0) phải đƣợc thiết lập. Kích thƣớc và số lƣợng từ trong H(0) tuỳ thuộc vào kích thƣớc thông điệp rút gọn. SHA-1 sử dụng dãy các hằng số K(0),…K(79) có giá trị nhƣ sau:
K(t) = 5A827999 ( 0 <= t <= 19) K(t) = 6ED9EBA1 (20 <= t <= 39) K(t) = 8F1BBCDC (40 <= t <= 59) K(t) = CA62C1D6 (60 <= t <= 79).
Thuật toán của bƣớc tính giá trị băm SHA-1
SHA-1 đƣợc sử dụng để băm thông điệp M có độ dài l bit thoả mãn điều kiện 0≤l≤264
. Thuật toán sử dụng:
- 5 biến 32 bit
- Một giá trị băm gồm 5 từ 32 bit
Kết quả của SHA-1 là một thông điệp rút gọn có độ dài 160 bit. Các từ của bảng phân bố thông điệp đƣợc ký hiệu W(0),W(1),…,W(79). 5 biến đƣợc ký hiệu là a,b,c,d,e. Các từ của giá trị băm ký hiệu H0(i)
,H1(i), H2(i), H3(i),H4(i). H(0) giữ giá trị băm ban đầu và đƣợc thay thế bằng các giá trị băm thành công.H(i) sau mỗi khối thông điệp đƣợc xử lý và kết thúc bằng giá trị băm cuối cùng H(N).
Tính toán thông điệp băm
Định nghĩa: S^n(X)=(X<<n) or (X>>32-n).
X<<n có nghĩa là loại bỏ từ trái sang phải n bit và thêm vào kết quả n số 0 vào bên phải. X>> có nghĩa là loại bỏ từ phải qua trái n bit và thêm vào kết quả n số 0 vào bên trái. Khởi tạo H H0 = 67452301 ; H1 = EFCDAB89 H2 = 98BADCFE ; H3 = 10325476 H4 = C3D2E1F0. Chia M(i) thành 16 từ W(0), W(1),…,W(15) For t = 16 to 79
- W(t) = S^1(W(t-3) XOR W(t-8) XOR W(t-14) XOR W(t-16)).
- Đặt a=H0 , b=H1,c=H2,d=H3,e=H4
For t = 0 to 79 do
- TEMP = S^5(A) + f(t;B,C,D) + E + W(t) + K(t); - e = d; d = c; c = S^30(b); b = a; a = TEMP;
- Đặt H0 = H0 + a,H1 = H1 + b,H2 = H2 + c,H3 = H3 + d,H4 = H4+ e.
Sau khi tính toán đƣợc hết M(n), thông điệp rút gọn là một chuỗi 160 bit là biểu diễn của 5 từ: H0 H1 H2 H3 H4
2.4.3.2 Đánh giá thuật toán
- SHA-1 đƣợc xem là an toàn đối với hiện tƣợng đụng độ vì rất khó tìm đƣợc
hai thông điệp khác nhau có giá trị băm giống nhau
- SHA-1 đƣợc coi là chuẩn của việc bảo vệ các kênh liên lạc trực tuyến tồn tại trong 9 năm qua.
- SHA-1 đƣợc thiết kế cho bộ xử lý 32 bit, thế hệ sắp tới của máy tính dùng các bộ xử lý 64 bit mà SHA-1 không hiệu quả trên bộ xử lý này.
- Tháng 2 năm 2005 SHA-1 bị tấn công bời 3 chuyên gia ngƣời Trung Quốc. Thuật toán này đã bị giải mã thông qua phƣơng pháp tính phân bổ.
2.4.4 Hàm băm Davies – Mayer và ứng dụng của TT Rijndael vào hàm băm
2.4.4.1 Hàm băm Davies-Mayer [2]
Hàm băm Davies-Mayer là một kiến trúc hàm băm dựa trên việc mã hóa theo khối trong đó độ dài của thông điệp rút gọn (tính theo bit) bằng với kích thƣớc khối thông điệp ứng với thuật toán mã hóa đƣợc sử dụng.
Gọi n, k lần lƣợt là kích thƣớc khối và kích thƣớc khóa của thuật toán đƣợc sử dụng. Trong hàm băm Davies-Mayer không cần sử dụng khóa. Khóa ban đầu đƣợc thiết lập mặc định, có giá trị là 2k -1 với k là kích thƣớc khóa (theo bit) của thuật toán. Hàm mã hóa E sử dụng khóa K đƣợc ký hiệu là Ek.
Thông điệp ban đầu đƣợc chia thành m khối có kích thƣớc n bit. Davies- Mayer hash chính là thực hiện lần lƣợt m lần thao tác sau:
Hi = EXi (Hi-1) Xi
Hm chính là thông điệp rút gọn của thông điệp ban đầu.
2.4.4.2 Hàm AES-Hash
AES-Hash đƣợc mô tả dựa trên kiến trúc hàm băm Davies-Mayer, sử dụng thuật toán Rijndael với kích thƣớc khối và khóa đều là 256 bit. Quá trình thực hiện AES-Hash gồm các bƣớc:
- Mở rộng thông điệp: Thông điệp đƣợc mở rộng để có kích thƣớc bằng một
bội số chẵn nhỏ nhất của kích thƣớc khối. Việc này đƣợc thực hiện bằng cách thêm vào các bit zero vào cuối thông điệp sao cho kích thƣớc đạt đƣợc là một bội số lẻ nhỏ nhất của 128 bit. Sau đó thêm 128 bit chứa giá trị chiều dài ban đầu của thông điệp. Thông điệp mở rộng sẽ có độ dài: 40 bit ban đầu + (128 – 40) bit 0 mở rộng + 128 bit thể hiện giá trị
- Chia thông điệp mở rộng thành n khối x1,...,xn, với kích thƣớc 256 bit. - Áp dụng Davies-Mayer Hash bằng thuật toán Rijndael n lần cho n khối.
Hi = EXi (Hi-1) Xi
- Áp dụng thao tác bổ sung cuối để thu đƣợc giá trị băm.
Hn+1 = EHn (Hn) Xn
Hn+1 chính là giá trị băm của thông điệp ban đầu.
2.4.4.3 Hàm băm Davies-Mayer và AES-Hash
Hàm băm Davies-Mayer đƣợc chứng minh rằng để tìm thông điệp đầu vào thứ 2 có cùng kết quả giá trị băm (độ dài n bit) với thông điệp ban đầu cho trƣớc
(“tiền ảnh thứ hai”) cần phải thực hiện 2n
thao tác, để tìm cặp thông điệp có cùng giá trị băm cần thực hiện 2n/2 thao tác. Do đó, để đạt đƣợc mức độ bảo mật có thể chấp nhận đƣợc thì kích thƣớc khối đòi hỏi phải lớn. Vào thời điểm hiện tại, kích thƣớc khối phải lớn hơn 80 bit để tránh tấn công “tiền ảnh thứ hai” và lớn hơn 160 bit để tránh tấn công đụng độ. Điều này có nghĩa không thể sử dụng các thuật toán mã hóa có kích thƣớc khối 64 bit (ví dụ nhƣ DES) để thực hiện Davies-Mayer Hash. Một điều lƣu ý khác là hàm băm Davies-Mayer đƣợc xem là không an toàn khi sử dụng các thuật toán DES-X (nhƣ 3DES).
AES-Hash áp dụng Davies-Mayer Hash, sử dụng thuật toán Rijndael 256 bit nên đảm bảo đƣợc độ an toàn đối với tấn công “tiền ảnh thứ hai” và tấn công “đụng độ”. Ngoài ra, AES-Hash còn thực hiện thao tác bổ sung cuối để tăng chi phí khi tấn công hàm băm. Do đó, mức độ an toàn bảo mật của hàm băm AES-Hash sẽ đƣợc tăng đáng kể.
2.4.5 Các hàm băm sử dụng thuật toán Rijndael
Đối với các thuật toán mở rộng dựa trên thuật toán Rijndael, bao gồm thuật toán mở rộng 256/384/512-bit và thuật toán mở rộng 512/768/1024-bit, chúng ta cần sử dụng mã khóa có kích thƣớc là 256, 384, 512, 768 hoặc 1024 bit. Nếu sử dụng các hàm băm thông thƣờng thì chƣa đáp ứng đƣợc tất cả các trƣờng hợp kích thƣớc mã khóa của các thuật toán mở rộng này. Việc ghép nối hay biến đổi giá trị băm của các hàm băm thông thƣờng để kéo dài chuỗi bit nhận đƣợc ra đủ độ dài đòi hỏi của khóa không phải là giải pháp tối ƣu. Do đó, giải pháp đƣợc đề nghị là sử dụng chính các thuật toán mở rộng để xây dựng các hàm băm có không gian giá trị băm rộng hơn, đồng thời có khả năng phục vụ cho việc tạo khóa cho chính các thuật toán này từ chuỗi mật khẩu của ngƣời dùng.
Quá trình thực hiện nhóm hàm băm này hoàn toàn tƣơng tự nhƣ AES-Hash, chỉ thay đổi độ dài của khối và thao tác mã hóa thông tin đƣợc sử dụng trong thuật toán.
CHƢƠNG 3: CÁC MÔ HÌNH CHỮ KÝ SỐ
3.1 TỔNG QUAN VỀ CHỮ KÝ SỐ
3.1.1 Giới thiệu về chữ ký số
Chữ ký truyền thống (chữ ký viết tay) gắn liền với tài liệu đƣợc ký và ngƣời ký chịu trách nhiệm với nội dung của tài liệu đó. Chữ ký truyền thống là một bộ phận vật lý của tài liệu đƣợc ký, nó là thông tin đại diện cho ngƣời ký cho nên nó là duy nhất. Việc kiểm tra chữ ký đƣợc thực hiện bằng cách so sánh nó với chữ ký đã xác thực hoặc có thể gặp trực tiếp ngƣời ký để ký lại xem có giống với chữ ký trên