- Bước 3: Khởi tạo bộ đệm
Một bộ đệm 160 bit đƣợc khởi tạo để lƣu trữ các giá trị băm trung gian và kết quả. Bộ đệm đƣợc biểu diễn bằng 5 thanh ghi 32 bit (ký hiệu A, B, C, D, E) với các giá trị khởi tạo ở dạng little-endian (byte có trọng số nhỏ nhất trong từ nằm ở địa chỉ thấp nhất) nhƣ sau: A = 01 23 45 67 B = 89 AB CD EF C = FE DC BA 98 D = 76 54 32 10 E = C3 D2 E1 F0
Các giá trị này tƣơng đƣơng với các từ 32 bit nhƣ sau: A = 01 23 45 67
B = 89 AB CD EF C = FE DC BA 98 D = 76 54 32 10 E = C3 D2 E1 F0
Bước 4: Xử lý các khối dữ liệu 512 bit
Thuật toán sử dụng hàm nén thực hiện qua 4 vòng lặp có cấu trúc giống nhau với tất cả 80 bƣớc nhƣng sử dụng các phép toán logic khác nhau. Các phép toán logic đƣợc sử dụng bao gồm: AND, OR, XOR và MODULO 232.
- Bước 5: Đầu ra
Sau khi xử lý hết L khối 512-bit, đầu ra của lần xử lý thứ L là giá trị băm 160 bit.
Giải thuật SHA-1 đƣợc tóm tắt nhƣ sau: CV0 = IV
CVq+1 = SUM32(CVq, ABCDEq)
512 bits 512 bits 512 bits
… …
512 bits
Y0 Y1 YL-1
L x 512 bits = Nx 32 bits
MD = CVL Với các tham số:
IV: giá trị khởi tạo của bộ đệm gồm 5 thanh ghi ABCDE L: số khối 512-bit sau khi ghép dữ liệu
ABCDEq: đầu ra của hàm nén trên khối thứ q MD: giá trị băm
SUM32: cộng modulo 232 trên từng từ của đầu vào
So sánh MD5 và SHA-1
- Giống nhau:
Cả hai thuật toán đều có thể nhận mọi dạng dữ liệu đầu vào và đều độn thêm bit giả để thành khối chia hết cho 512 bit, nhƣng SHA-1 sử dụng hàm phi tuyến f cho cả 4 vòng.
Cả hai thuật toán đều gồm 5 bƣớc đƣợc mô tả đơn giản và dễ cài đặt.
- Khác nhau:
Về thuật toán: MD5 sử dụng mỗi hằng số duy nhất cho mỗi bƣớc biến đổi, SHA sử dụng mỗi hằng số cho mỗi vòng biến đổi.
Trong hàm phi tuyến thứ 2 của MD5 có sự cải tiến so với MD4, SHA sử dụng lại hàm phi tuyến của MD4
Trong MD5 với mỗi bƣớc đƣợc cộng kết quả của bƣớc trƣớc đó. Sự khác biệt với SHA là cột thứ 5 đƣợc cộng
Đầu vào của MD5 là chuỗi có độ dài bất kỳ còn SHA-1 là chuỗi có độ dài tối đa 264 bit.
Tốc độ: SHA-1 thực hiện nhiều hơn 16 bƣớc và thao tác trên thanh ghi 160 bit nên tốc độ thực hiện chậm hơn.
Độ an toàn: để tạo ra thông điệp có giá trị băm cho trƣớc cần 2128 thao tác với MD5 và 2160 thao tác với SHA-1. Để tìm 2 thông điệp cùng giá trị băm, cần 264 thao tác với MD5 và 280 thao tác với SHA-1.
Chƣơng 2: CHỮ KÝ KHÔNG THỂ PHỦ NHẬN 2.1. Khái niệm 2.1. Khái niệm
Chữ ký số có thể dễ dàng sao chép chính xác, điều này có thể mang đến nhiều lợi ích nhƣ việc phát hành các thông báo công cộng. Tuy nhiên, nó không thích hợp cho nhiều tài liệu cá nhân hoặc thông tin nhạy cảm.
Trong các sơ đồ chữ ký số thông thƣờng, việc kiểm thử tính đúng đắn của chữ ký là do ngƣời nhận tiến hành. Nhƣ vậy, cả văn bản cùng chữ ký có thể đƣợc sao chép và phát tán cho nhiều ngƣời mà không đƣợc phép của ngƣời gửi. Để tránh khả năng đó, ngƣời ta đƣa ra các sơ đồ chữ ký kh ng th phủ nh n.
Chữ ký không thể phủ nhận đƣợc David Chaum và Hans van Antwerpen phát minh năm 1989. Khác với chữ ký số thông thƣờng, chữ ký không thể phủ nhận không thể đƣợc kiểm tra nếu không có sự hợp tác của ngƣời ký. Sự hợp tác đó đƣợc thể hiện qua giao thức kiểm tra (giao thức xác nhận): ngƣời nhận hỏi, ngƣời gửi trả lời. Tuy nhiên, nếu một chữ ký chỉ có thể kiểm chứng với sự trợ giúp của ngƣời ký thì nếu ngƣời ký không trung thực có thể từ chối xác nhận một tài liệu do chính mình ký. Vậy làm thể nào để ngăn cản ngƣời ký chối bỏ chữ ký của chính mình? Chữ ký không thể phủ nhận giải quyết vấn đề này bằng cách thêm một thành phần mới gọi là giao thức chối bỏ. Thông qua giao thức này, ngƣời ký có thể chứng minh một chữ ký không phải là chữ ký của mình. Nếu ngƣời ký từ chối không tham gia giao thức đó thì có bằng chứng là anh ta không chứng minh đƣợc chữ ký đó là giả mạo, tức là anh ta không chối bỏ đƣợc chữ ký của mình.
Một sơ đồ chữ ký không thể phủ nhận có 3 phần: - Thuật toán ký.
- Thuật toán kiểm tra (giao thức hỏi- trả lời).
- Một giao thức chối bỏ: ngƣời ký không thể chối bỏ chữ ký đúng.
Ví dụ rõ ràng nhất của chữ ký không thể phủ nhận là chống sự sao chép trái phép phần mềm. Sản phẩm phần mềm của A có kèm theo chữ ký không thể phủ nhận đƣợc bán cho B. Sau đó B không thể giả danh A để bán cho C vì khi C thực hiện kiểm tra chữ ký, sự hợp tác của B là vô nghĩa (nếu B chịu hợp tác thì câu trả lời trong giao thức sẽ là “chữ ký không tin cậy”). Chỉ có sự hợp tác của A mới mang lại sự khẳng định tin cậy cho C.
2.2. Ứng dụng của chữ hông thể phủ nhận
Chữ ký không thể phủ nhận có khá nhiều ứng dụng nhƣ:
- Ứng dụng ký hợp đồng thông qua hội thoại trực tuyến: Có thể ghi âm các cuộc hội thoại và coi nhƣ đó là hợp đồng giữa hai bên. Sau đó, đoạn hội thoại dƣới dạng số này sẽ đƣợc ký số dựa trên chữ ký không thể phủ nhận. Hai bên sẽ sử dụng khóa bí mật của mình ký lên đoạn ghi âm, khi đó đoạn hội thoại cùng hai chữ ký của hai bên sẽ chính là hợp đồng. Vì có tính không thể phủ nhận nên hội thoại đƣợc ghi âm này sẽ đƣợc coi là chứng cứ nếu sau này một trong hai bên cố tình chối bỏ hợp đồng.
- Ứng dụng trong bảo vệ bản quyền phần mềm: Một công ty cung cấp phần mềm muốn bán phần mềm cho ngƣời sử dụng, công ty này sử dụng chữ ký không thể phủ nhận để ký lên mỗi sản phẩm phần mềm. Mỗi ngƣời sử dụng khi mua bản quyền và trƣớc khi sử dụng phần mềm thì ngƣời sử dụng cần phải liên hệ với công ty này để công ty xác nhận và kích hoạt. Nhƣ vậy, công ty sẽ tránh đƣợc việc ngƣời khác sử dụng phần mềm của họ trái phép. Bên cạnh đó, việc sử dụng chữ ký không thể phủ nhận trong trƣờng hợp này cũng giúp bảo vệ lợi ích của khách hàng. Khi công ty đã ký lên sản phẩm phần mềm thì không thể chối bỏ trách nhiệm của mình với phần mềm.
- Ứng dụng trong mua bán trực tuyến (thƣơng mại điện tử): Trong hệ thống mua hàng trực tuyến sử dụng chữ ký không thể phủ nhận, khách hàng phải ký lên đơn đặt hàng của mình. Sau đó, khách hàng sẽ không thể chối bỏ yêu cầu đặt hàng của mình. Ứng dụng này đặc biệt hữu ích nếu gặp những trƣờng hợp khách hàng có mục đích xấu, cố tình đặt hàng nhƣng không mua.
- Ứng dụng trong thẻ chứng minh thƣ điện tử. Ví dụ nhƣ ở nƣớc Bỉ đã sử dụng chứng minh thƣ điện tử dựa trên chữ ký không thể phủ nhận.
- Ứng dụng trong ký kết hợp đồng qua mạng Internet. - Ứng dụng trong trong quá trình duyệt công văn, báo cáo.
2.3. Lƣợc đồ chữ hông thể phủ nhận Chaum-van Antwerpen (CVA)
Cho tới nay, có rất nhiều công trình nghiên cứu về chữ ký không thể phủ nhận nhƣng hầu hết đều dựa trên nền tảng chữ ký không thể phủ nhận của Chaum-van Antwerpen. Do vậy, trƣớc hết ta sẽ tìm hiểu về lƣợc đồ chữ ký không thể phủ nhận của Chaum-van Antwerpen [8] [7]. Lƣợc đồ gồm một thuật toán ký, thuật toán kiểm tra và giao thức chối bỏ nhƣ sau:
2.3.1. Thuật toán
Tạo khóa: chọn khóa bí mật và khóa công khai tƣơng ứng.
Chọn p, q là các số nguyên tố sao cho p=2q+1 và bài toán logarithm rời rạc trên
p Z là khó giải. Chọn phần tử sinh * p Z cho nhóm con bậc q bằng cách: chọn phần tử * p Z ,
tính p1/qmodp. Nếu 1 thì chọn lại và tính lại Lấy a ngẫu nhiên 1 a q-1 và xác định:yamodp. Ta có: khóa công khai (p, , y, khóa bí mật a.
Tạo chữ :
A ký lên thông điệp m với chữ ký smamodp. B có thể xác nhận chữ ký này với sự cộng tác của A.
2.3.2. Thuật toán iểm tra
Giả sử A là ngƣời ký lên thông điệp m, B là ngƣời nhận chữ ký trên thông điệp m. B kiểm tra chữ ký với sự hợp tác của A nhƣ sau:
2. B tính cse1ye2 modp và gửi c cho A. 3. A tính d ca q p mod mod 1 và gửi d cho B.
4. B tính d'me1e2modp và chấp nhận chữ ký đúng khi và chỉ khi: d d’.
2.3.3. Giao thức chối bỏ
Giao thức chối bỏ giúp ngƣời ký có thể chứng minh đƣợc một chữ ký không phải là chữ ký của mình, tức chữ ký là giả mạo. Trong trƣờng hợp ngƣời này từ chối tham gia giao thức chối bỏ thì đồng nghĩa với việc anh ta cố từ chối chữ ký của chính mình.
Giao thức chối bỏ gồm hai tiến trình của giao thức kiểm tra và có các bƣớc sau: 1. B chọn e1, e2 là 2 số nguyên ngẫu nhiên, bí mật, 1 e1, e2 q-1, cùng khóa công khai của A đã đƣợc xác thực.
2. B tính cse1ye2 modp và gửi c cho A. 3. A tính d ca1modq modp và gửi d cho B.
4. B kiểm tra điều kiện d me1e2modp, nếu thỏa mãn thì B chấp nhận chữ ký s và dừng giao thức. Nếu không thỏa mãn, sang bƣớc tiếp theo.
5. B chọn e1', e2' là 2 số nguyên ngẫu nhiên, bí mật, 1 e1', e2' q-1.
6. B tính c'se1'ye2'modp và gửi c’ cho A. 7. A tính d'c'a1modqmodp và gửi d’ cho B.
8. B kiểm tra điều kiện d'me1'e2'modp. Nếu thỏa mãn thì B chấp nhận chữ ký s và dừng giao thức. Nếu không thỏa mãn thì chuyển sang bƣớc tiếp theo.
9. B kết luận s là chữ ký giả khi và chỉ khi: de2e1'modpd'e2'e1modp Khi đó, A đã phủ nhận thành công chữ ký. 2.3.4. Ví dụ Thuật toán Chọn số nguyên tố p=59747, p=2q+1 => q=29873; q cũng là số nguyên tố. Chọn phần tử sinh * 3Zp .
Chọn ngẫu nhiên a=11 (1≤ a ≤ q-1) => y = 311 mod 59747= 57653 Ta có khóa công khai (p=59747; =3; y = 57653), khóa bí mật a=11. Dùng khóa bí mật a để ký lên thông điệp m=299, ta đƣợc chữ ký:
30179 59747 mod 299 mod 11 m p s a .
Thuật toán iểm tra
Giả sử A là ngƣời ký lên thông điệp m, B là ngƣời nhận chữ ký trên thông điệp m. B kiểm tra chữ ký với sự hợp tác của A nhƣ sau:
1. B chọn 2 số nguyên ngẫu nhiên, bí mật là e1=11, e2=15; 1 e1, e2 q-1.
2. B tính c = se1
ye2
modp = 3017911
5765315
mod 59747=55601 và gửi c cho A.
3. A tính d= ca1modq
modp = 55601111mod29873mod 59747= 43319 và gửi d cho B. 4. B tính d’ me1e2
modp = 29911
315mod 59747=43319. Vì d d’ nên B chấp nhận chữ ký là đúng.
Giao thức chối bỏ
Giả sử A gửi thông điệp m, với chữ ký s=30178, giao thức chối bỏ tiến hành nhƣ sau:
1. B chọn 2 số nguyên ngẫu nhiên, bí mật là e1=11, e2=15; 1 e1, e2 q-1. 2. B tính c = se1
ye2
modp = 3017811
5765315
mod 59747=19071 và gửi c cho A.
3. A tính d= ca1modqmodp = 19071111mod29873mod 59747= 33692 và gửi d cho B.
4. B kiểm tra điều kiện d = me1e2
modp; có me1e2
modp = 29911
315mod59747= 43319 ≠ d, ta chuyển sang bƣớc tiếp theo.
5. B chọn 2 số nguyên ngẫu nhiên, bí mật là: e1’=17, e2’=19, 1 e1’, e2’ q-1. 6. B tính c’ = se1' ye2' modp = 3017817 5765319 mod 59747 = 9217 và gửi c’ cho A. 7. A tính d’= c’a1modq modp = 9217111mod29873
mod 59747=33028 và gửi d’ cho B.
8. B kiểm tra điều kiện d’ = me1'e2'
modp. Ta có me1'e2'
modp = 29917319mod59747 ≠ d’. Vì vậy, ta chuyển sang bƣớc tiếp theo.
9. B xét điều kiện: (de2)e1' mod p = (d’e2')e1
modp Ta có: (de2)e1' mod p = (33692.315)17 mod 59747 = 40635 (d’e2')e1 modp = (33028.319)11 mod 59747 = 40635 Nhƣ vậy, A đã phủ nhận thành công chữ ký.
Ở ví dụ này ta chỉ sử dụng các số p, q bé để minh họa cho lƣợc đồ. Tuy nhiên, trong thực tế ta phải dùng các số p, q rất lớn chẳng hạn các số biểu diễn nhị phân cỡ 512 bit, khi đó ta có q ≥ 2510 tức là 1/q ≤ 2-510, một xác suất rất nhỏ để kết quả không chính xác, ta có thể bỏ qua. Do đó các yêu cầu với giao thức kiểm thử và giao thức chối bỏ có thể xem là đƣợc thoả mãn.
2.3.5. Các định l về tính đúng đắn của lƣợc đồ
Định lý 2.1: Nếu s không phải là chữ ký của A trên thông điệp m (s ma modp)
thì B sẽ chấp nhận s là một chữ ký đúng của A trên m với xác suất 1/q.
Chứng minh:
Giả sử s ma
modp, với mỗi yêu cầu c tƣơng ứng với một cặp (e1, e2) bậc q. Vì s, y là các phần tử thuộc nhóm nhân G bậc q.
Khi A nhận đƣợc yêu cầu c, A không biết B đã dùng cặp (e1, e2) nào trong q cặp có thể để xây dựng c.
Ta cần chứng minh rằng, s ma modp nên trong q cặp đó chỉ có duy nhất một cặp (e1, e2) thỏa mãn.
Từ phần tử sinh của nhóm G, ta có thể viết đƣợc một số phần tử của G nhƣ là một khả năng của với số mũ xác định duy nhất theo modulo của q nhƣ:
c = i, d = j, m = k, s = l với i, j, k, l Zp và tất cả tính theo modulo của p. Vì là phần tử sinh của G nên ta có:
+) c se1 ye2 modp i l .e1 .ye2modp Với y = a modp i l .e1. a.e2modp i l .e1 + a .e2 modp i l.e1 + a.e2 modq (1)
+) d me1e2modp j k .e1. e2modp j k .e1 + e2 modp j k.e1 + e2 modq (2)
Từ (1) và (2), ta có định thức D=l
k a1 = l – a.k (3).
Mặt khác, theo giả sử thì s ma modp l k .amodp l a.k modq (4). Từ (3) và (4) => D nhƣ vậy, với mọi d G là câu trả lời thì câu trả lời d này chỉ đúng với một cặp (e1, e2) trong q cặp (e1, e2) có thể.
Vậy xác suất để B chấp nhận s là chữ ký của A trên m là 1/q. (Điều phải chứng minh).
Định lý 2.2:
- Nếu s không phải là chữ ký của A trên thông điệp m (s ma modp) và cả A, B cùng tuân theo giao thức chối bỏ thì (de2)e1'
modp (d’e2')e1
modp, tức là giao thức cho kết quả chính xác.
- Nếu s là chữ ký của A trên thông điệp m (s ma
modp), A, B cùng tuân theo giao thức chối bỏ và có d me1e2modp; d’ me1'e2'modp thì (de2)e1'