Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
272,08 KB
Nội dung
Trường Đại học Khoa học Tự nhiên TPHCM Khoa Toán - Tin học Bộ môn Ứng dụng Tin học Lý thuyết mã hóa thơng tin Tài liệu hướng dẫn thực hành Version 1.0 Lưu hành nội - 2010 Mục lục Mục lục Ngơn ngữ lập trình Python 1.1 Giới thiệu 1.2 Biến kiểu liệu 1.3 Phép toán 1.4 Biểu thức 1.5 Cấu trúc điều khiển 1.6 Chuỗi ký tự danh sách 1.7 Định nghĩa hàm 14 1.8 Các hàm toán học 15 Mật mã cổ điển 16 2.1 Tóm tắt lý thuyết 16 2.2 Bài tập thực hành 18 Mã đối xứng đại mã cơng khai 20 3.1 Tóm tắt lý thuyết 20 3.2 Bài tập thực hành 21 Hàm băm mật mã 23 4.1 Tóm tắt lý thuyết 23 4.2 Bài tập thực hành 24 Hệ mã logarit rời rạc 25 5.1 Tóm tắt lý thuyết 25 5.2 Bài tập thực hành 26 Chữ ký điện tử 27 6.1 Tóm tắt lý thuyết 27 6.2 Bài tập thực hành 29 Tài liệu tham khảo 30 Chương Ngôn ngữ lập trình Python Trong chương sinh viên làm quen với ngơn ngữ lập trình Python để sử dụng thực hành tập môn học Số học thuật toán Nội dung chương giúp sinh viên thực chương trình đơn giản thông qua việc giới thiệu kiến thức Python phép toán số học, kiểu liệu, cấu trúc điều khiển Sinh viên cần tìm hiểu thêm tài liệu khác ([?]) để tra cứu hàm gói hàm phục vụ cho mục đích thực hành 1.1 Giới thiệu Python ngơn ngữ lập trình cấp cao tương tự ngơn ngữ lập trình khác C, C++, Perl, Java ngơn ngữ thơng dịch Điều có nghĩa câu lệnh trình thơng dịch thực thi cách chương trình Python khởi chạy Trình thơng dịch Python có cách sử dụng, sử dụng chế độ tương tác (interactive mode) sử dụng chế độ kịch (script mode) Ở chế độ tương tác, câu lệnh gõ thực thi, kết in sau đó: >>> + Ngược lại, chế độ kịch bản, câu lệnh lưu tập liệu gọi kịch (script) thực thi lần python myscript.py Trong hai chế độ, ký hiệu # báo hiệu dòng thích >>> #Mac dinh la 60 giay >>> _time = 60 1.2 Biến kiểu liệu Trong ngôn ngữ lập trình Python, biến (variable) khai báo khởi tạo thông qua câu lệnh gán >>> message = ’And now for something completely different’ >>> n = 17 >>> pi = 3.1415926535897931 Tên biến bao gồm ký tự chữ, số ký hiệu underscore (_) Tên biến không bắt đầu số không trùng với từ khóa (keyword) Python (xem [?], trang 11) >>> 76trombones = ’big parade’ SyntaxError: invalid syntax >>> more@ = 1000000 SyntaxError: invalid syntax >>> class = ’Advanced Theoretical Zymurgy’ SyntaxError: invalid syntax Một khai báo, biến có kiểu liệu tự động xác định Python Kiểu liệu biến nhận biết lệnh type >>> type(message) >>> type(n) >>> type(pi) Để kiểm tra biến có kiểu liệu cụ thể đó, Python cung cấp lệnh isinstance >>> isinstance(message, str) True >>> isinstance(pi, int) False 1.3 Phép toán Python cung cấp phép toán số học cộng (+), trừ (-), nhân (*), chia (/), lũy thừa (**), phép chia modulo (%) >>> 20+32; hour-1; hour*60+minute; minute/60; 5**2; 9*(15-7); Trong Python 2.0, phép chia số nguyên cho kết số nguyên, phép chia số thực cho kết số thực >>> minute = 59 >>> minute/60 >>> minute/60.0 0.98333333333333328 Ngồi có phép toán so sánh (==), khác (!=), lớn (>), nhỏ (=), nhỏ (>> x != y # x is not equal to y >>> x > y # x is greater than y >>> x < y # x is less than y >>> x >= y # x is greater than or equal to y >>> x >> n = >>> n % == or n % == True >>> 17 and True True 1.4 Biểu thức Biểu thức kết hợp giá trị, biến phép toán Biểu thức gồm giá trị, biến, khơng thể phép tốn >>> 17 >>> x >>> 17 + x 1.5 Cấu trúc điều khiển Cấu trúc điều kiện đơn giản gồm biểu thức if, gồm nhiều cặp if-else khác >>> if x > 0: print(’x is positive’) >>> if x == y: print(’x and y are equal’) else: if x < y: print(’x is less than y’) else: print(’x is greater than y’) Cấu trúc lặp bao gồm cấu trúc for while >>> for i in range(4): print(’Hello!’) >>> while True: print(x) y = (x + a/x) / if abs(y-x) < epsilon: break x = y 1.6 Chuỗi ký tự danh sách 1.6.1 Chuỗi ký tự Chuỗi ký tự Python xem mảng ký tự, có số 0, có giá trị số >>> fruit = ’banana’ >>> print(fruit[1]) a >>> fruit[1] = ’i’ TypeError: object does not support item assignment Các thao tác chuỗi ký tự: nối chuỗi, tính độ dài, lấy chuỗi >>> fruit[:3] ’ban’ >>> fruit[3:] ’ana’ >>> fruit[0:5:2] # the third index is the "step size" ’bnn’ >>> fruit = fruit + ’mango’ >>> len(fruit) 11 Chuyển chuỗi sang chữ hoa thủ tục upper tìm kiếm chuỗi thủ tục find >>> word = ’banana’ >>> new_word = word.upper() >>> print(new_word) BANANA >>> new_word.find(’NA’) >>> new_word.find(’NA’, 3) # start finding at >>> new_word.find(’B’, 1, 4) -1 # finding starts at and ends at >>> ’a’ in word True >>> ’seed’ in word False Các chuỗi so sánh với nhau, đó, ký tự chữ hoa có giá trị nhỏ ký tự chữ thường >>> if word < ’banana’: print ’Your word,’ + word + ’, comes before banana.’ elif word > ’banana’: print ’Your word,’ + word + ’, comes after banana.’ else: 1.6.2 print ’All right, bananas.’ Danh sách Danh sách dãy giá trị Không giống chuỗi ký tự có giá trị ký tự, danh sách chứa giá trị kiểu >>> [10, 20, 30, 40] >>> [’crunchy frog’, ’ram bladder’, ’lark vomit’] >>> [’spam’, 2.0, 5, [10, 20]] >>> empty = [] Không giống chuỗi ký tự, giá trị bên danh sách cập nhật thay đổi tùy ý >>> numbers = [17, 123] >>> numbers[1] = >>> print(numbers) [17, 5] >>> in numbers True Để duyệt qua phần tử danh sách, sử dụng cấu trúc lặp for >>> for x in numbers: 10 print(x); >>> for i in range(len(numbers)): numbers[i] = numbers[i] * Các phép toán danh sách bao gồm kết nối (+) lặp (*) >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = a + b >>> print c [1, 2, 3, 4, 5, 6] >>> [0] * [0, 0, 0, 0] >>> [1, 2, 3] * [1, 2, 3, 1, 2, 3, 1, 2, 3] Truy xuất thành phần danh sách thông qua số: >>> t = [’a’, ’b’, ’c’, ’d’, ’e’, ’f’] >>> t[1:3] [’b’, ’c’] >>> t[:4] [’a’, ’b’, ’c’, ’d’] >>> t[3:] [’d’, ’e’, ’f’] >>> t[:] [’a’, ’b’, ’c’, ’d’, ’e’, ’f’] >>> t[1:3] = [’x’, ’y’] >>> print(t) [’a’, ’x’, ’y’, ’d’, ’e’, ’f’] Các phương thức danh sách cài đặt sẵn Python bao gồm phép thêm (append), xếp (sort), xóa phần tử (pop, del, remove) >>> # append a value or a list to current list >>> t = [’a’, ’b’, ’c’] >>> t.append(’d’) >>> print(t) Chương Mật mã cổ điển 2.1 Tóm tắt lý thuyết 2.1.1 Mã dịch chuyển - Shift Cipher A B C D E F G H I J K L M 10 11 12 N O P Q R S T U V W X Y Z 13 14 15 16 17 18 19 20 21 22 23 24 25 Định nghĩa Đặt P = C = K = Z26 Với ≤ K ≤ 25 với x, y ∈ Z26 , mã dịch chuyển định nghĩa sau: EK (x) = (x + K) mod 26 DK (y) = (y − K) mod 26 2.1.2 Mã thay - Substitution Cipher Định nghĩa Cho π song ánh từ tập ký tự thường vào tập ký tự hoa: π: a −→ A a −→ A Khi với x ∈ a y ∈ A, mã thay định nghĩa sau: Eπ (x) = π(x), Dπ (y) = π −1 (y) 16 Ví dụ Khóa bí mật π mã thay cho bảng sau: π π −1 A B C D E F G H I J K L M d l r y v o h e z x w p t N O P Q R S T U V W X Y Z b g f j q n m u s k a c i a b c d e f g h i j k l m X N Y A H P O G Z Q W B T n o p q r s t u v w x y z S F L R C V M U E K J D I 2.1.3 Mã Affine Định nghĩa Đặt P = C = Z26 K = {(a, b) ∈ Z226 : gcd(a, 26) = 1} Với khóa K = (a, b) ∈ K với x, y ∈ Z26 , mã Affine định nghĩa sau: EK (x) = (ax + b) mod 26 DK (y) = a−1 (y − b) mod 26 2.1.4 Mã Vigenère Định nghĩa Chọn m số nguyên dương Đặt P = C = K = (Z26 )m Với khóa K = (k1 , k2 , , km ) ∈ K với x = (x1 , x2 , , xm ) ∈ P, y = (y1 , y2 , , ym ) ∈ C, mã Vigenère định nghĩa sau: EK (x) = (x1 + k1 , x2 + k2 , , xm + km ) mod 26 DK (y) = (y1 − k1 , y2 − k2 , , ym − km ) mod 26 17 2.1.5 Mã Hill Định nghĩa Chọn m ≥ Đặt P = C = (Z26 )m K = {Mm×m ∈ Mm (Z26 ) : det (M ) = 0} Khi với khóa K ∈ K x ∈ P, y ∈ C, mã Hill định nghĩa sau: EK (x) = xK (mod 26) DK (y) = yK −1 2.1.6 (mod 26) Mã chuyển vị - Permutation Cipher Định nghĩa Chọn m số nguyên dương Đặt P = C = (Z26 )m K tập hoán vị m phần tử {1, , m} Khi với khóa K hốn vị m phần tử x ∈ P, y ∈ C, mã hoán vị định nghĩa sau: EK (x) = EK (x1 , , xm ) = (xK(1) , , xK(m) ) DK (y) = DK (y1 , , ym ) = (yK −1 (1) , , yK −1 (m) ) Ví dụ Với m = 6, ta có khóa hốn vị sau: 2.2 x π(x) π −1 (x) Bài tập thực hành Bài tập Viết hàm tính mã Esh(k) giải mã Dsh(k) dịch chuyển dựa khóa k cho trước số ngun khơng âm khơng q 25 Bài tập Một người tìm cách nâng cao tính an tồn cho văn mã hóa Anh ta nghĩ khóa số nguyên dương có n chữ số k = k1 k2 kn với ki chữ số thập phân, sau mã hóa văn p sau: Ek (p) = Esh(k1 ) (Esh(k2 ) ( (Esh(kn ) (p) )), biết Esh(ki ) (x) hàm mã hóa dịch chuyển có khóa ki Viết hàm tính mã giải mã cho phương pháp mã hóa Nhận xét tính an toàn phương pháp so với mã dịch chuyển gốc 18 Những điều kiện k làm cho Ek (p) = p? Bài tập Viết hàm tính mã Es(π) giải mã Ds(π) thay dựa khóa π ví dụ Bài tập Một người sử dụng hàm Es(π) để mã hóa văn p sau: Eπ = Es(π) (Es(π) (p)) Hãy nhận xét kết mã hóa c nhận Thử cho khóa ψ khác để Eψ khơng gặp phải vấn đề khóa π Bài tập Viết hàm tính mã Ea(K) giải mã Da(K) Affine dựa khóa K ∈ Z226 Bài tập Một người mã hóa văn p với khóa K = (k1 , k2 ) ∈ Z226 theo phương pháp sau: EK (p) = Ea(K) (Esh(k1 ) (Esh(k2 ) (p))) Hãy viết hàm tính mã giải mã cho phương pháp Bài tập Một người mã hóa văn p với khóa K = (k1 , k2 ) ∈ Z226 theo phương pháp sau: K = (k1 , 2Esh(k2 ) (p)) EK (p) = Ea(K ) (p) Hãy viết hàm tính mã giải mã cho phương pháp Bài tập Viết hàm tính mã Ev(K) giải mã Dv(K) Vigenère dựa khóa K ∈ Zm 26 Bài tập Một người mã hóa văn p chiều dài m với khóa K =∈ Zm 26 theo phương pháp sau: p = (Ea((11,k1 )) (p1 ), Ea((11,k2 )) (p2 ), , Ea((3,km )) (pm )) EK (p) = Ev(K) (p ) Hãy viết hàm tính mã giải mã cho phương pháp Bài tập 10 Viết hàm tính mã Eh(K) giải mã Dh(K) Hill dựa khóa K ∈ Mm (Z26 ) K khả nghịch Z26 Bài tập 11 Một người mã hóa văn p chiều dài m với khóa K ∈ Mm (Z26 ) (K khả nghịch Z26 ) theo phương pháp sau: EK (p) = Eh(K) (Eh(K T ) (p)) Hãy viết hàm tính mã giải mã cho phương pháp Bài tập 12 Viết hàm tính mã Ep(π) giải mã Dp(π) chuyển vị dựa khóa π ví dụ Chương Mã đối xứng đại mã cơng khai 3.1 Tóm tắt lý thuyết 3.1.1 Mã lặp Một hệ mã lặp tiêu biểu bao gồm hàm lặp song ánh g tập r khóa K1 , K2 , , Kr , việc mã hóa văn p thực qua r vòng lặp: c = wr wi = g(wi−1 , Ki ), ≤ i ≤ r w0 = p Việc giải mã c thực qua r bước lặp: p = w0 wi−1 = g −1 (wi , Ki ), ≤ i ≤ r wr = c 3.1.2 Mã DES Mã DES mã lặp 16 vòng mã hóa văn p dài 64 bit với khóa dài 56 bit Ở vòng, trạng thái wi chia làm hai phần dài 32 bit Li Ri Khóa Ki lần lặp dài 48 bit khóa sinh từ khóa K ban đầu Việc mã hóa tiến hành sau: 20 c = IP −1 (R16 , L16 ) wi = (Li , Ri ) = g(Li−1 , Ri−1 , Ki ) = (Ri−1 , Li−1 ⊕ f (Ri−1 , Ki )) w0 = (L0 , R0 ) = IP (x) Việc giải mã thực tương tự với hàm g −1 cho công thức (Li−1 , Ri−1 ) = g −1 (Li , Ri , Ki ) = (Ri ⊕ f (Li , Ki ), Li ) 3.1.3 Mã AES Mã AES mã lặp mã hóa văn p dài 128 bit với khóa K có chiều dài 128, 192, 256 bit Số vòng lặp AES phụ thuộc vào chiều dài khóa K, tương ứng 10, 12, 14 vòng 3.1.4 Hệ mã RSA Chọn n = pq với p, q số nguyên tố Đặt P = C = Zn K = {(n, p, q, a, b) : a ≡ b mod n} Với K = (n, p, q, a, b) ∈ K x, y ∈ Zn , hàm mã hóa giải mã RSA định nghĩa sau: EK (x) = xb mod n DK (y) = y a mod n Khi (n, b) gọi khóa cơng khai, (p, q, a) gọi khóa bí mật 3.2 Bài tập thực hành Bài tập 13 Hãy đề xuất cài đặt thuật toán cho hàm song ánh chuỗi ký tự có chiều dài chuỗi bit Bài tập 14 Hãy đề xuất cài đặt thuật toán cho hàm song ánh chuỗi bit có chiều dài thành chuỗi bit (ngắn nhất) có chiều dài bội số n cho trước (Padding) Bài tập 15 Hãy cài đặt thuật tốn DES để mã hóa giải mã chuỗi bit dài 64 bit 21 Bài tập 16 Hãy cài đặt thuật toán DES để mã hóa giải mã chuỗi bit dài Bài tập 17 Hãy cài đặt thuật toán DES để mã hóa giải mã chuỗi ký tự có chiều dài Bài tập 18 Hãy cài đặt thuật tốn AES để mã hóa giải mã chuỗi bit dài 64 bit Bài tập 19 Hãy cài đặt thuật tốn AES để mã hóa giải mã chuỗi bit dài Bài tập 20 Hãy cài đặt thuật tốn AES để mã hóa giải mã chuỗi ký tự có chiều dài Bài tập 21 Chọn hai số nguyên tố p, q n = pq Viết hàm tính khóa bí mật a từ khóa cơng khai b cho trước Bài tập 22 Viết hàm mã hóa RSA văn m với khóa cơng khai (n, b) cho trước Bài tập 23 Viết hàm giải mã RSA đoạn mã c với khóa bí mật (p, q, a) cho trước Bài tập 24 Viết hàm thám mã RSA đoạn mã c với khóa cơng khai (n, b) cho trước Chương Hàm băm mật mã 4.1 Tóm tắt lý thuyết Hàm băm hiểu theo nghĩa đơn giản hàm cho tương ứng mảng liệu lớn với mảng liệu nhỏ Các hàm băm nhận chuỗi bit m, gọi thông điệp (message), có chiều dài tùy ý (hữu hạn) làm liệu đầu vào tạo chuỗi bit d có chiều dài cố định n > gọi mã băm (hash code hay message digest) Nếu ký hiệu D miền xác định (đầu vào) R miền giá trị (đầu ra) hàm băm h(m), ta nhận thấy số lượng phần tử D thường lớn nhiều so với số lượng phần tử R (vì chiều dài thơng điệp đầu vào tùy ý thường lớn n) Do h(m) khơng có tính chất đơn ánh, nghĩa ln tồn thơng điệp đầu vào có mã băm, thông điệp gọi xung đột (collision) Tuy nhiên với n đủ lớn xác xuất để tìm xung đột khó nhiều thời gian Định nghĩa Hàm băm h hàm thỏa hai tính chất sau: • Tính nén (Compression): h cho tương ứng thơng điệp đầu vào m có độ dài thành mã băm d = h(m) có chiều dài cố định n • Dễ tính tốn (Ease of computation): Với thơng điệp đầu vào m có chiều dài hữu hạn tùy ý, mã băm h(m) tính toán cách dễ dàng Định nghĩa Hàm băm mật mã h hàm băm có tính chất sau: • Tính kháng tiền ảnh (pre-image resistance): với mã băm cho trước, khó tính tốn để tìm thơng điệp tương ứng với mã băm Nghĩa là, với d cho trước, khó tìm m cho h(m) = d 23 • Tính kháng tiền ảnh thứ hai (second pre-image resistance): với thơng điệp cho trước, khó tính tốn để tìm thơng điệp khác có mã băm với thông điệp ban đầu Nghĩa là, với thơng điệp m cho trước, khó tìm thơng điệp m = m cho h(m) = h(m ) • Tính kháng xung đột (collision resistance): khó tính tốn để tìm hai thơng điệp khác mà có mã băm Nghĩa là, khó tìm m = m cho h(m) = h(m ) Chú ý Thuật ngữ "khó tính tốn" có nghĩa độ phức tạp việc tính tốn đa thức, đòi hỏi tài nguyên vượt khả cung cấp Cụ thể ta có định nghĩa sau: 4.2 Bài tập thực hành Bài tập 25 Cài đặt thuật toán Merkle Damg˙ard để ánh xạ chuỗi bit có chiều dài (nhưng nhỏ 2128 , 2256 , 2512 ) thành chuỗi bit có chiều dài bội số n = 128, 256, 512 Bài tập 26 Hãy đề xuất cài đặt thuật toán ánh xạ chuỗi bit có chiều dài thành chuỗi bit có chiều dài bội số 32 Bài tập 27 Cài đặt thuật toán padding cho hàm băm SHA-1 Bài tập 28 Cài đặt thuật toán SHA-1 để băm chuỗi ký tự có chiều dài thành chuỗi bit có chiều dài 160 bit Bài tập 29 Cài đặt thuật toán MD5 để băm chuỗi ký tự có chiều dài thành chuỗi bit có chiều dài 128 bit Chương Hệ mã logarit rời rạc 5.1 Tóm tắt lý thuyết 5.1.1 Bài tốn logarit rời rạc Cho nhóm nhân (G, ), phần tử α ∈ G có bậc n phần tử β α Tìm số nguyên a, ≤ a ≤ n − 1, cho αa = β 5.1.2 Hệ mã ElGamal Chọn p số nguyên tố cho toán logarit rời rạc Z∗p giải dễ dàng, đặt α ∈ Z∗p phần tử nguyên thủy (phần tử sinh) Đặt P = Z∗p , C = Z∗p × Z∗p , K = {(p, α, a, β) : β ≡ αa (mod p)} Khi (p, α, β) công khai số a giữ bí mật Với K = (p, α, a, β), số ngẫu nhiên bí mật k ∈ Zp−1 , việc mã hóa giải mã theo hệ ElGamal thực sau: c = EK (p, k) = (y1 , y2 ) ∈ Z∗p × Z∗p y1 = αk mod p y2 = cβ k mod p 25 p = DK (y1 , y2 ) = y2 (y1a )−1 mod p 5.2 Bài tập thực hành Bài tập 30 Cài đặt thuật toán Pohlig-Hellman để giải toán logarit rời rạc Bài tập 31 Cài đặt thuật toán Sharks để giải toán logarit rời rạc Bài tập 32 Cài đặt thuật toán Pollard Rho để giải toán logarit rời rạc Bài tập 33 Cài đặt thuật tốn tìm phần tử ngun thủy (phần tử sinh) Z∗p Bài tập 34 Cài đặt thuật tốn ElGamal để mã hóa giải mã chuỗi ký tự có chiều dài Chương Chữ ký điện tử 6.1 Tóm tắt lý thuyết 6.1.1 Chữ ký điện tử sử dụng hệ mã RSA Chọn n = pq với p, q số nguyên tố Đặt P = A = Zn K = {(n, p, q, a, b) : a ≡ b mod n} (n, b) công khai, (p, q, a) giữ bí mật Khi với K = (n, p, q, a, b) ∈ K x, y ∈ Zn , việc ký kiểm tra chữ ký điện tử thực sau: sigK (x) = xa mod n verK (y) = true ⇐⇒ x ≡ y b mod n 6.1.2 Chữ ký ElGamal Chọn p số nguyên tố cho toán logarit rời rạc Zp giải dễ dàng (triệt tiêu, suy biến) Đặt α ∈ Z∗p phần tử nguyên thủy (phần tử sinh), P = Z∗p , A = Z∗p × Zp−1 Ta định nghĩa K = {(p, α, a, β) : β ≡ αa (mod p)} Bộ (p, α, β) công khai, số a giữ bí mật Khi với khóa K = (p, α, a, β) số ngẫu nhiên (bí mật) k ∈ Z∗p−1 , việc ký kiểm tra chữ ký điện tử ElGamal thực sau: 27 • Chữ ký điện tử sigK (x, k) = (γ, δ) γ = αk mod p δ = (x − aγ)k −1 mod (p − 1) • Kiểm tra chữ ký: với x, γ ∈ Z∗p δ ∈ Zp−1 , verK (x, (γ, δ)) = true ⇐⇒ β γ γ delta ≡ αx 6.1.3 (mod p) Chữ ký điện tử dựa hàm băm SHA-1 Chọn p số nguyên tố L-bit cho tốn logarit rời rạc Zp khơng thể giải dễ dàng (triệt tiêu, suy biến) L ≡ (mod 64) 512 ≤ L ≤ 1024, chọn q số nguyên tố 160-bit ước số p − Đặt α ∈ Z∗p bậc q đơn vị theo modulo p, đặt P = {0, 1}∗ , A = Z∗q × Z∗q Ta định nghĩa K = {(p, q, α, a, β) : β ≡ αa (mod p)} ≤ a ≤ q − Bộ (p, q, α, β) công khai a giữ bí mật Với K = (p, q, α, a, β) số ngẫu nhiên (bí mật) k cho ≤ k ≤ q − 1, việc ký kiểm tra chữ ký điện tử dựa hàm băm SHA-1 thực sau: • Chữ ký điện tử sigK (x, k) = (γ, δ) γ = (ak mod p) mod q δ = (SHA − 1(x) + aγ)k −1 mod q γ, δ không đồng thời • Kiểm tra chữ ký: với x ∈ {0, 1}∗ γ, δ ∈ Z∗q , verK (x, 9γ, δ)) = true ⇐⇒ (αe1 β e2 mod p) mod q = γ 28 e1 = SHA − 1(x)δ −1 mod q e2 = γδ −1 mod q 6.2 Bài tập thực hành Bài tập 35 Cài đặt chương trình tính chữ ký điện tử kiểm tra chữ ký điện tử dựa thuật toán RSA Bài tập 36 Cài đặt chương trình tính chữ ký điện tử kiểm tra chữ ký điện tử ElGamal Bài tập 37 Cài đặt chương trình tính chữ ký điện tử kiểm tra chữ ký điện tử dựa hàm băm SHA-1 Bài tập 38 Cài đặt chương trình tính chữ ký điện tử kiểm tra chữ ký điện tử dựa hàm băm MD5 Tài liệu tham khảo [1] Douglas R Stinson, Cryptography: Theory and Practice, 3rd ed., Chapman & Hall/CRC, 2006 [2] A Menezes, P van Oorschot, S Vanstone, Handbook of Applied Cryptography, CRC Press, 1996 [3] Phạm Huy Điển, Hà Huy Khoái, Mã hố thơng tin: Cơ sở tốn học ứng dụng, NXB ĐHQG Hà Nội, 2003