Đồ án Một số dạng tấn công hệ thống thông tin và phòng chống bằng kỹ thuật Mật mã - Ngô Hồng Trang

pdf 92 trang huongle 1400
Bạn đang xem 20 trang mẫu của tài liệu "Đồ án Một số dạng tấn công hệ thống thông tin và phòng chống bằng kỹ thuật Mật mã - Ngô Hồng Trang", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfdo_an_mot_so_dang_tan_cong_he_thong_thong_tin_va_phong_chong.pdf

Nội dung text: Đồ án Một số dạng tấn công hệ thống thông tin và phòng chống bằng kỹ thuật Mật mã - Ngô Hồng Trang

  1. Bé gi¸o dôc vµ ®µo t¹o Tr•êng ®¹i häc d©n lËp h¶i phßng o0o ®å ¸n tèt nghiÖp Ngµnh c«ng nghÖ th«ng tin H¶i Phßng 2010
  2. Bé gi¸o dôc vµ ®µo t¹o Tr•êng ®¹i häc d©n lËp h¶i phßng o0o ®Ò tµi: mét sè d¹ng tÊn c«ng hÖ thèng th«ng tin vµ phßng chèng b»ng kÜ thuËt mËt m· ®å ¸n tèt nghiÖp ®¹i häc hÖ chÝnh quy Ngµnh: C«ng nghÖ Th«ng tin H¶i Phßng - 2010
  3. Bé gi¸o dôc vµ ®µo t¹o Tr•êng ®¹i häc d©n lËp h¶i phßng o0o ®Ò tµi: mét sè d¹ng tÊn c«ng hÖ thèng th«ng tin vµ phßng chèng b»ng kÜ thuËt mËt m· ®å ¸n tèt nghiÖp ®¹i häc hÖ chÝnh quy Ngµnh: C«ng nghÖ Th«ng tin Sinh viªn thùc hiÖn: Ng« Hång Trang Gi¸o viªn h•íng dÉn: PGS.TS. TrÞnh NhËt TiÕn M· sè sinh viªn: 100256 H¶i Phßng - 2010
  4. bé gi¸o dôc vµ ®µo t¹o céng hoµ x· héi chñ nghÜa viÖtnam tr•êng ®¹i häc d©n lËp h¶i phßng §éc lËp - Tù do - H¹nh phóc o0o nhiÖm vô thiÕt kÕ tèt nghiÖp Sinh viªn: Ng« Hång Trang M· sè: 100256 Líp: CT1002 Ngµnh: C«ng nghÖ Th«ng tin Tªn ®Ò tµi: Mét sè d¹ng tÊn c«ng hÖ thèng th«ng tin vµ phßng chèng b»ng kÜ thuËt mËt m·
  5. nhiÖm vô ®Ò tµi 1. Néi dung vµ c¸c yªu cÇu cÇn gi¶i quyÕt trong nhiÖm vô ®Ò tµi tèt nghiÖp a. Néi dung: Mét sè d¹ng tÊn c«ng hÖ thèng th«ng tin vµ phßng chèng b»ng kü thuËt mËt m· . b. C¸c yªu cÇu cÇn gi¶i quyÕt * T×m hiÓu vµ nghiªn cøu lý thuyÕt: - Mét sè d¹ng tÊn c«ng hÖ thèng th«ng tin (th«ng qua m¹ng m¸y tÝnh, hÖ ®iÒu hµnh, c¬ së d÷ liÖu, .) - Mét sè kÜ thuËt mËt m·. - Nghiªn cøu ph•¬ng ph¸p phßng chèng tÊn c«ng b»ng kÜ thuËt mËt m·. * Thö nghiÖm Ch•¬ng tr×nh DEMO phßng chèng tÊn c«ng. 2. C¸c sè liÖu cÇn thiÕt ®Ó thiÕt kÕ, tÝnh to¸n 3. §Þa ®iÓm thùc tËp
  6. c¸n bé h•íng dÉn ®Ò tµi tèt nghiÖp Ng•êi h•íng dÉn thø nhÊt: Hä vµ tªn: Häc hµm, häc vÞ: C¬ quan c«ng t¸c: Néi dung h•íng dÉn: Ng•êi h•íng dÉn thø hai: Hä vµ tªn: Häc hµm, häc vÞ C¬ quan c«ng t¸c: Néi dung h•íng dÉn: §Ò tµi tèt nghiÖp ®•îc giao ngµy 12 th¸ng 04 n¨m 2010 Yªu cÇu ph¶i hoµn thµnh tr•íc ngµy 10 th¸ng 07 n¨m 2010 §· nhËn nhiÖm vô: §.T.T.N §· nhËn nhiÖm vô: §.T.T.N Sinh viªn C¸n bé h•íng dÉn §.T.T.N H¶i Phßng, ngµy th¸ng n¨m 2010 HiÖu tr•ëng GS.TS.NG¦T TrÇn H÷u NghÞ
  7. PhÇn nhËn xÐt tãm t¾t cña c¸n bé h•íng dÉn 1. Tinh thÇn th¸i ®é cña sinh viªn trong qu¸ tr×nh lµm ®Ò tµi tèt nghiÖp: 2. §¸nh gi¸ chÊt l•îng cña ®Ò tµi tèt nghiÖp (so víi néi dung yªu cÇu ®· ®Ò ra trong nhiÖm vô ®Ò tµi tèt nghiÖp) 3. Cho ®iÓm cña c¸n bé h•íng dÉn: ( §iÓm ghi b»ng sè vµ ch÷ ) Ngµy th¸ng n¨m 2010 C¸n bé h•íng dÉn chÝnh ( Ký, ghi râ hä tªn )
  8. PhÇn nhËn xÐt ®¸nh gi¸ cña c¸n bé chÊm ph¶n biÖn ®Ò tµi tèt nghiÖp 1. §¸nh gi¸ chÊt l•îng ®Ò tµi tèt nghiÖp (vÒ c¸c mÆt nh• c¬ së lý luËn, thuyÕt minh ch•¬ng tr×nh, gi¸ trÞ thùc tÕ, ) 2. Cho ®iÓm cña c¸n bé ph¶n biÖn ( §iÓm ghi b»ng sè vµ ch÷ ) Ngµy th¸ng n¨m 2010 C¸n bé chÊm ph¶n biÖn ( Ký, ghi râ hä tªn )
  9. LỜI CẢM ƠN Trong suèt qu¸ tr×nh lµm kho¸ luËn tèt nghiÖp võa qua, d•íi sù gióp ®ì, chØ b¶o nhiÖt t×nh cña thÊy gi¸o h•íng dÉn PGS.TS. TrÞnh NhËt TiÕn, kho¸ luËn tèt nghiÖp cña em ®· ®•îc hoµn thµnh. Em xin bµy tá lßng biÕt ¬n s©u s¾c tíi thÇy TrÞnh NhËt TiÕn. Vµ em còng xin ch©n thµnh c¶m ¬n c¸c thÇy c« gi¸o trong khoa C«ng NghÖ Th«ng Tin tr•êng §¹i Häc D©n LËp H¶i Phßng ®· gi¶ng d¹y, gióp ®ì vµ t¹o ®iÒu kiÖn tèt nhÊt ®Ó chóng em hoµn thµnh tèt kho¸ luËn cña m×nh. Em xin ®•îc göi lêi c¶m ¬n cña m×nh tíi gia ®×nh vµ b¹n bÌ, nh÷ng ng•êi ®· ®éng viªn gióp ®ì em trong qu¸ tr×nh lµm kho¸ luËn tèt nghiÖp. MÆc dï ®· cè g¾ng hÕt søc cïng víi sù tËn t©m cña thÇy gi¸o h•íng dÉn song do thêi gian ng¾n vµ tr×nh ®é cßn h¹n chÕ nªn em kho¸ luËn cña em vÉn cßn nhiÒu thiÕu sãt. Em rÊt mong nhËn ®•îc sù chØ dÉn cña c¸c thÇy c« vµ sù gãp ý cña c¸c b¹n ®Ó khãa luËn cña em ®•îc hoµn thiÖn h¬n. Sinh viên Ngô Hồng Trang
  10. MỤC ĐÍCH ĐỀ TÀI Đề tài: Một số dạng tấn công hệ thống thông tin và phòng chống bằng kĩ thuật mật mã. Mục đích chính của đề tài đƣợc đƣa ra trong khóa luận là: 1/. Tìm hiểu một số dạng tấn công hệ thống thông tin (thông qua mạng máy tính, hệ điều hành, cơ sở dữ liệu .) 2/. Tìm hiểu một số kĩ thuật mật mã. 3/. Nghiên cứu phƣơng pháp phòng chống tấn công bẵng kĩ thuật mật mã 4/. Viết ít nhất một chƣơng trình mật mã để phòng chống tấn công.
  11. MỤC LỤC BẢNG CÁC THUẬT NGỮ, CHỮ VIẾT TẮT 1 Chương 1. CƠ SỞ TOÁN HỌC 2 1.1. CÁC KHÁI NIỆM CƠ BẢN 2 1.1.1. Khái niệm đồng dƣ 2 1.1.1.1. Khái niệm 2 1.1.1.2. Tính chất 2 1.1.2. Số nguyên tố. 3 1.1.2.1 Khái niệm 3 1.1.2.2.Các tính chất số nguyên tố 3 1.1.2.3. Thuật toán kiểm tra n có phải số nguyên tố 4 1.1.3. Số nguyên tố cùng nhau. 5 1.1.3.1. Khái niệm 5 1.1.3.2.Hàm phi Euler 6 1.2. MỘT SỐ KHÁI NIỆM TRONG ĐẠI SỐ 7 1.2.1. Nhóm 7 1.2.1.1. Khái niệm 7 1.2.1.2 Khái niệm Nhóm con của nhóm (G,*) 7 1.2.1.3. Nhóm Cyclic 8 1.2.1.4. Phần tử nghịch đảo. 9 1.2.1.5. Nhóm nhân của tập Z n 9 1.1.2.6. Phần tử sinh (phần tử nguyên thủy). 10 1.2.2. Độ phức tạp của thuật toán 11 1.2.2.1.Khái niệm Thuật toán 11 1.2.2.2. Khái niệm Độ phức tạp của thuật toán 11 1.2.2.3. Phân lớp bài toán theo độ phức tạp 12 1.2.2.4. Các lớp bài toán 13 1.2.2.5. Khái niệm hàm một phía, hàm cửa sập một phía. 13 Chương 2. MỘT SỐ KĨ THUẬT MẬT MÃ 14 2.1. VẤN ĐỀ MÃ HÓA 14 2.1.1. Khái niệm mật mã 14
  12. 2.1.2. Khái niệm mã hóa 15 2.1.3. Phân loại mã hóa. 16 2.1.4. Hệ mã hóa khóa đối xứng 16 2.1.4.1.Khái niệm mã hóa khóa đối xứng 16 2.1.4.2. Một số đặc điểm của hệ mã hóa khóa đối xứng 17 2.1.4.3. Một số hệ mã khóa cổ điển 18 2.1.4.4.Hệ mã hóa DES. 20 2.1.5. Mã hóa khóa bất đối xứng 30 2.1.5.1. Tổng quan về mã hóa khóa bất đối xứng 30 2.1.5.2. Hệ mã hóa RSA 32 2.1.5.3. Hệ mã hóa Elgamal 36 2.2. CHỮ KÍ SỐ 40 2.2.1. Sơ đồ chữ kí số 40 2.2.2. Chữ kí RSA 41 2.2.3. Chữ kí Elgamal 42 2.3. HÀM BĂM 43 2.3.1. Tổng quan hàm băm 43 2.3.1.1. Khái niệm Hàm băm 43 2.3.1.2. Đặc tính của hàm băm 43 2.3.1.3. Các tính chất của Hàm băm 43 2.3.2. Hàm băm MD4 44 2.3.2.1. Khái niệm “Thông điệp đệm” 44 2.3.2.2. Thuật toán MD4 45 2.3.3. Hàm băm SHA 51 2.3.2.1. Giới thiệu 51 2.3.3.2. Thuật toán 52 Chương 3. MỘT SỐ DẠNG “TẤN CÔNG” HỆ THỐNG THÔNG TIN 54 3.1. TẤN CÔNG MẠNG MÁY TÍNH VÀ CÁCH PHÕNG CHỐNG 54 3.1.1. Một số dạng tấn công mạng máy tính 54 3.1.1.1. Kỹ thuật đánh lừa 54 3.1.1.2. Kỹ thuật tấn công vào vùng ẩn 54
  13. 3.1.1.3. Nghe trộm 55 3.1.1.4. Tấn công Man-in-the-Middle – Giả mạo DNS 55 3.1.2. Phòng chống tấn công qua mạng bằng kĩ thuật mật mã 56 3.1.2.1. Phương pháp mã hóa 56 3.1.2.2. Phương pháp chứng thực khóa công khai 56 3.2. TẤN CÔNG HỆ ĐIỀU HÀNH VÀ CÁCH PHÕNG CHỐNG 58 3.2.1. Một số dạng tấn công hệ điều hành 58 3.2.1.1. Tấn công vào hệ thống có cấu hình không an toàn 58 3.2.1.2. Tấn công mật khẩu cơ bản (Password-base Attact) 58 3.2.1.3. Tấn công từ chối dịch vụ (DoS) 59 3.2.2. Cách phòng chống tấn công hệ điều hành bằng kĩ thuật mật mã. 62 3.3. TẤN CÔNG CƠ SỞ DỮ LIỆU 63 3.3.1. Một số dạng tấn công cơ sở dữ liệu 63 3.3.2. Phòng chống tấn công CSDL bằng kĩ thuật mã hóa 68 3.4. TẤN CÔNG MÁY TÍNH 70 3.4.1. Một số dạng tấn công máy tính 70 3.4.2. Phòng chống 71 3.5. TẤN CÔNG PHẦN MỀM 72 3.5.1. Tấn công phần mềm. 72 3.5.2. Phòng chống tấn công phần mềm 73 Chương 4. CHƢƠNG TRÌNH THỬ NGHIỆM 74 4.1. Giao diện chƣơng trình 74 4.2. Hƣớng dẫn chạy chƣơng trình 76 4.3. Môi trƣờng chạy ứng dụng 77 KẾT LUẬN 78
  14. BẢNG CÁC THUẬT NGỮ, CHỮ VIẾT TẮT Stt Từ viết tăt Từ đầy đủ Nghĩa tiếng Việt 1 DNS Domain Name System Hệ thống phân giải tên miền 2 ARP Address Resolution Protocol Giao thức phân giải địa chỉ 3 SSL Secure Socket Layer Bảo mật lớp 4 ICMP Internet Control Message Giao thức tạo thông điệp điều Protocol kiển của Internet 5 P2P Peer to peer Mạng ngang hàng 6 UDP User Datagram Protocol Giao thức truyền dữ liệu không kết nối 7 DES Data Encryption Standard Tiêu chuẩn mã hóa dữ liệu 8 CSDL Cơ sở dữ liệu Cơ sở dữ liệu 9 IP Initial Permutation Hoán vị ban đầu 10 IP-1 Inverse of the Initial Nghịch đảo của hoán vị ban đầu Permotation 11 SYN synchronize Đồng bộ hóa 12 MD4 Message Digest 4 Tóm tắt thông điệp 4 13 SHA Secure Hash Algorithm Thuật toán hàm băm an toàn 14 CA Certificate Authority Tổ chức chứng nhận khóa công khai 15 DoS Denial of Service Từ chối dịch vụ 16 SQL Stucted Query Language Ngôn ngữ truy vấn có cấu trúc 17 IPS Intrusion Prevention System Hệ thống ngăn chặn xâm nhập 18 USCLN Ƣớc số chung lớn nhất Ƣớc số chung lớn nhất 1
  15. Chương 1. CƠ SỞ TOÁN HỌC 1.1. CÁC KHÁI NIỆM CƠ BẢN 1.1.1. Khái niệm đồng dƣ 1.1.1.1. Khái niệm Cho n là số nguyên dƣơng. Nếu a và b là 2 số nguyên, khi đó a đƣợc gọi là đồng dƣ với b theo modulo n, đƣợc viết a ≡ b ( mod n ) nếu n chia hết cho ( a - b) và n đƣợc gọi là modulo của đồng dƣ. Ví dụ: 24 ≡ 9 ( mod 5 ). 1.1.1.2. Tính chất a ≡ b ( mod n ), nếu và chỉ nếu a và b đều trả số dƣ nhƣ nhau khi n│(a-b). a ≡ a ( mod n) (tính phản xạ) Nếu a ≡ b ( mod n) thì b ≡ a ( mod n). Nếu a ≡ b ( mod n) và b ≡ c ( mod n) thì a ≡ c ( mod n). Nếu a ≡ a 1 ( mod n) và b ≡ b1 (mod n) thì a+b = (a1+b1) (mod n) và a . b ≡ a1 . b1 ( mod n). Có thể cộng, trừ, nhân và nâng lên lũy thừa các đồng dƣ thức có cùng một modulo. Nếu ta có: a1 a2 (mod n) b1 b2 (mod n) Thì ta có: ( a1 + a2 ) ( b1 + b2 ) mod n ( a1 - a2 ) ( b1 - b2 ) mod n ( a1 * a2 ) ( b1 * b2 ) mod n k k a1 b1 mod n, với k là số nguyên. 2
  16. 1.1.2. Số nguyên tố. 1.1.2.1 Khái niệm Số nguyên tố là một số lớn hơn 1, nhƣng chỉ chia hết cho 1 và chính nó. Ví dụ: 2, 3, 5, 7, 11, 13, 17, 19, 23, Số lƣợng số nguyên tố là vô tận. Các hệ mã thƣờng sử dụng số nguyên tố lớn cỡ 512 bit và lớn hơn. 1.1.2.2.Các tính chất số nguyên tố 1/. Ƣớc số dƣơng bé nhất khác 1 của một hợp số a là một số nguyên tố không vƣợt quá 2/. 2 là số nguyên tố nhỏ nhất và cũng là số nguyên tố chẵn duy nhất 3/. Tập hợp các số nguyên tố là vô hạn. Định lý Mọi số tự nhiên lớn hơn 1 đều phân tích đƣợc thành tích những thừa số nguyên tố, và sự phân tích này là duy nhất nếu không kể đến thứ tự của các thừa số. Từ đó có dạng phân tích tiêu chuẩn của một số tự nhiên bất kỳ là: Trong đó p1, p2, , pm là các số nguyên tố đôi một khác nhau. Ví dụ: 300 = 22 * 52 * 3 3
  17. 1.1.2.3. Thuật toán kiểm tra n có phải số nguyên tố Chúng ta có thể kiểm tra theo thuật toán sau: int nguyento(int n) { if (n>1) { int i, j=1; for ( i=2; i<= sqrt ( n ) ; i++ ) if (n%i == 0) { j= 0; break; } return j; } else return 0; } Ngoài ra có nhiều thuật toán kiểm tra số nguyên tố khác nhƣ: Soloway-trassen, Rabin-Miller, Lehmann . 4
  18. 1.1.3. Số nguyên tố cùng nhau. 1.1.3.1. Khái niệm Các số nguyên dƣơng a và b đƣợc gọi là nguyên tố cùng nhau nếu chúng có ƣớc chung lớn nhất là 1. Chẳng hạn: 6 và 35 là nguyên tố cùng nhau 6 và 27 không nguyên tố cùng nhau ví có Ƣớc chung lớn nhất là 3. Số 1 là nguyên tố cùng nhau với mọi số nguyên. Một phƣơng pháp xác định tính nguyên tố cùng nhau của hai số nguyên là sử dụng thuật toán Euclid nhƣ sau: Input: 2 số nguyên không âm a và b sao cho a ≥ b Output: ƣớc số chung lớn nhất của a và b. Procedure USCLN (a, b: positive integers) Begin x: =a y: = b while y ≠ 0 begin r: = x mod y x: = y y: =r end { x la USCLN can tim } 5
  19. 1.1.3.2.Hàm phi Euler Hàm phi Euler của một số nguyên dƣơng n là số các số nguyên giữa 1 và n , và nguyên tố cùng nhau với n. Kí hiệu: (n). Ví dụ: (9 )= 6 vì có sáu số 1, 2, 4, 5, 7 và 8 là nguyên tố cùng nhau với 9. Nhận xét: Nếu p là một số nguyên tố thì (p) = p-1. Ví dụ: (7) = 6 vì có sáu số 1, 2, 3, 4, 5 và 6 là nguyên tố cùng nhau với 7. Tính chất hàm phi Euler: 1/. Nếu p là số nguyên tố thì (p) =p – 1. 2/. Nếu n là tích của 2 số nguyên tố p và q, n = p * q, thì: ( n ) = ( p ) * ( q ) = ( p – 1 ) * (q - 1). 3/. Nếu a là nguyên tố cùng nhau với n, nghĩa là ƢCLN ( a , n ) = 1, ø thì: a (n) = 1 mod n. e1 e2 ek 4/. Nếu khai triển n = p1 * p2 * * pk , thì: (n) = n * (1 - ) * (1 - ) * . . . * (1- ). Ví dụ: (21) = (3) * (7) = 2 * 6= 12 6
  20. 1.2. MỘT SỐ KHÁI NIỆM TRONG ĐẠI SỐ 1.2.1. Nhóm 1.2.1.1. Khái niệm Nhóm ( G, * ) là một tập hợp G, cùng với một phép toán 2 ngôi trên G Ký hiệu " * ", từ G × G vào G thỏa mãn các tiên đề sau: G1.Tính kết hợp: phép toán "*" có tính kết hợp, nghĩa là (a * b) * c = a * ( b * c) với mọi a, b và c thuộc G. G2.Phần tử trung hòa:Trong G tồn tại một phần tử đƣợc gọi là phần tử trung hòa θ sao cho với mọi phần tử a thuộc G thì a*θ = θ*a = a. G3.Phần tử đối lập: với mỗi phần tử a thuộc G tồn tại một phần tử x, gọi là phần tử đối lập của a, sao cho: x * a = a * x = θ. Trong định nghĩa của nhóm phép "*" không đòi hỏi có tính chất giao hoán (a*b=b*a) nếu G thỏa mãn thêm tính chất này thì G đƣợc gọi là nhóm giao hoán, hay nhóm Abel. Nếu G không có tính giao hoán thì G đƣợc gọi là phi giao hoán hay không Abel Ví dụ: Nhóm giao hoán (nhóm Abel) 1/. Tập các số nguyên, Z, với phép toán là phép cộng thông thƣờng, phần tử đơn vị là 0. 2/. Tập các số hữu tỷ dƣơng với phép toán là phép nhân thông thƣờng, phần tử đơn vị là 1. 1.2.1.2 Khái niệm Nhóm con của nhóm (G,*) Cho một nhóm G với phép toán hai ngôi *, và tập con H của G. H đƣợc gọi là nhóm con của G nếu chính H là một nhóm với phép toán * của G. Các điều kiện tƣơng đƣơng: Cho tập con H của nhóm G. Các điều kiện sau là tƣơng đƣơng: 1. H là nhóm con của G; 2. Với mọi a, b H ta có và ; 3. Với mọi a, b H ta có ; Ví dụ: 1/. Nhóm con sinh bởi tập hợp gồm một số nguyên k là {x . k | x Z} 7
  21. 2/. Nhóm con sinh bởi tập m số nguyên {k1, k2, , km} là tập {k1 * x1 + k2 * x2+ + km* xm} 1.2.1.3. Nhóm Cyclic 1/. Khái niệm: Một nhóm ( G, * ) đƣợc gọi là nhóm Cyclic nếu nó đƣợc sinh ra bởi một trong các phần tử của nó. Tức là có phần tử g G mà với mỗi a G, đều tồn tại số n N để g n = g * g * * g = a. ( là g * g với n lần). Khi đó g đƣợc gọi là phần tử sinh hay phần tử nguyên thủy của nhóm G. Nói cách khác: G đƣợc gọi là nhóm Cyclic nếu tồn tại g G sao cho mọi phần tử trong G đều là một lũy thừa nguyên nào đó của g. Ví dụ: Các căn bậc n của đơn vị tạo thành một n nhóm Cyclic cấp n với phép nhân, nghĩa là: 0 = z3 − 1 = (z − s0 )( z − s1)( z − s2) trong đó si = e (2 . π . i) / 3 {s0, s1, s2} với phép nhân là Cyclic. 2/. Cấp của nhóm Cyclic Cho (G, *) là nhóm Cyclic với phần tử sinh g và phần tử trung lập e. Nếu tồn tại số tự nhiên nhỏ nhất n mà g n = e, thì G sẽ chỉ gồm có n phần tử khác nhau: e, g, g2, , gn-1. Khi đó G đƣợc gọi là nhóm Cyclic hữu hạn cấp n. Nếu không tồn tại số tự nhiên n để g n = e, thì G có cấp ∞. Ví dụ: (Z + , +) gồm các số nguyên dƣơng là Cyclic với phần tử sinh g = 1, e = 0. Đó là nhóm Cyclic vô hạn, vì không tồn tại số tự nhiên n để g n = e. 3/. Cấp của một phần tử trong nhóm Cyclic Phần tử α G đƣợc gọi là có cấp d, nếu d là số nguyên dƣơng nhỏ nhất sao cho α d = e, trong đó e là phần tử trung lập của G. Nhƣ vậy phần tử α có cấp 1, nếu α = e. 8
  22. 1.2.1.4. Phần tử nghịch đảo. 1/. Khái niệm: Cho a Z n, nếu tồn tại b Z n sao cho a * b = 1 mod n, ta nói b là phần tử -1 nghịch đảo của a trong Z n và kí hiệu a . -1 Ví dụ: Xét trong tập Z14 = {0, 1, 2, , 13} cho a = 3 thì a = 5 vì : 3 * 5= 1 mod 14. 2/. Tính chất khả nghịch Cho a Z n, ta nói a là khả nghịch khi và chỉ khi gcd ( a, n)=1 (tức là có tồn tại a-1). Định lý: USCL ( a, n) = 1 tƣơng đƣơng với phần tử a Z n có phần tử nghịch đảo. 1.2.1.5. Nhóm nhân của tập Z n * a/. Nhóm nhân của tập Z n là Z n đƣợc định nghĩa nhƣ sau: * Z n= { a Z n│gcd (a, n)=1} * Nếu n là số nguyên tố thì : Z n= {a│1 ≤ a ≤ n - 1} * * b/. Cấp của Z n là số phần tử của Z n= (n). Ví dụ: * Cho n = 26 thì Z n={1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25} vậy ta có: (26)= 12 * c/. Cấp của a Z n Cấp của a kí hiệu là ord ( a ) là số nguyên dƣơng t nhỏ nhất sao cho a t = 1 mod n. Ví dụ: Z 21 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} * Z 21={1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19, 20} Ord ( 2 ) = 6 vì 26 = 1 mod 21. 9
  23. 1.1.2.6. Phần tử sinh (phần tử nguyên thủy). Định nghĩa: * Cho α Z n , nếu ord (α) = ( n ) thì α đƣợc gọi là phần tử sinh hay phần tử * nguyên thủy của Z n. * * Nếu Z n , có phần tử sinh thì Z n , đƣợc gọi là nhóm Cyclic. Tính chất: * * i 1/. Nếu α là phần tử sinh của Z n thì: Z n={α mod n | 0 ≤ i ≤ ( ( n )- 1) } * i 2./ Giả sử α là phần tử sinh của Z n khi đó b= α (mod n) cũng là phần tử sinh khi và chỉ khi gcd ( i, ( n) )=1 * Khi Z n là nhóm cyclic thì số phần tử sinh là: ( ( n) ). * k k 3/. Z n có phần tử sinh khi n = 2, 4, P hay 2 P khi P là số nguyên tố lẻ và k ≥ 1. Ví dụ: cho Z 7 = {0, 1, 2, 3, 4, 5, 6} thì * Z 7={1, 2, 3, 4, 5, 6} (7) =6 các phần tử sinh của Z7 là: { 3, 5} vì: 11 mod 7 = 1 mod 7 = 1 nên 11 ≡ 1 mod 7 vậy ord ( 1 ) = 1 ≠ ( 7) 23 mod 7 = 8 mod 7= 1 nên 23 ≡ 1 mod 7 vậy ord ( 2 ) = 3 ≠ ( 7) 36 mod 7= 729 mod 7 = 1 nên 36 ≡ 1 mod 7 vậy ord ( 3 ) = 6 = ( 7) 43 mod 7 = 64 mod 7=1 nên 43 ≡ 1 mod 7 vậy ord ( 4 ) = 3 ≠ ( 7) 56 mod 7 = 15625 mod 7 = 1 nên 56 ≡ 1 mod 7 vậy ord ( 5 ) = 6 = ( 7 ). 62 mod 7 = 36 mod 7 = 1 nên 62 ≡ 1 mod 7 vậy ord ( 6 ) = 2 ≠ ( 7). * Vậy Z7 có 2 phần tử sinh là 3 và 5. 10
  24. 1.2.2. Độ phức tạp của thuật toán 1.2.2.1.Khái niệm Thuật toán “Thuật toán ” đƣợc hiểu đơn giản là cách thức để giải một bài toán. Cũng có thể đƣợc hiểu bằng 2 khái niệm: Trực giác hay Hình thức nhƣ sau: 1/. Quan niệm trực giác về “Thuật toán” Một cách trực giác, thuật toán đƣợc hiểu là một dãy hữu hạn các quy tắc (chỉ thị, mệnh lệnh) mô tả một quá trình tính toán, để từ dữ liệu đã cho(Input) ta nhận đƣợc kết quả (Output) của bài toán. 2/. Quan niệm toán học về “Thuật toán” Một cách hình thức ngƣời ta quan niệm thuật toán là một máy Turing. Thuật toán đƣợc chia làm 2 loại: Đơn định và không đơn định. Thuật toán đơn định Là thuật toán mà kết quả của mọi phép toán đều đƣợc xác định duy nhất. Thuật toán không đơn định Là thuật toán có ít nhất một phép toán mà kết quả của nó là không duy nhất. 1.2.2.2. Khái niệm Độ phức tạp của thuật toán 1/. Chi phí của thuật toán (tính theo một bộ dữ liệu vào): Chi phí phải trả cho một quá trình tính toán bao gồm chi phí về thới gian và chi phí về bộ nhớ. Chi phí thời gian của một quá trình tính toán là thời gian cần thiết để thực hiện một quá trình tính toán. Chi phí bộ nhớ của một quá trình tính toán là số ô nhớ cần thiết để thực hiện một quá trình tính toán. Gọi A là một thuật toán, e là dữ liệu vào của bài toán đã đƣợc mã hóa bằng cách nào đó. Thuật toán A tính trên dữ liệu vào e phải trả một giá trị nhất định. Ta kí hiệu tA(e) là giá trị thời gian và lA (e) là giá bộ nhớ. 2/. Độ phức tạp về bộ nhớ (trong trƣờng hợp xấu nhất) LA (n) = max{l A (e), với | e | ≤ n}, n là kích thƣớc đầu vào của thuật toán. 11
  25. 3/. Độ phức tạp thời gian (trong trƣờng hợp xấu nhất) TA (n)= max { t A (e), với | e | ≤ n } 4/. Độ phức tạp tiệm cận: độ phức tạp PT ( n ) đƣợc gọi là tiệm cận với hàm f (n), kí hiệu O (f (n)) nếu tồn tại các số n0, c mà PT ( n ) ≤ c . f (n) , n ≥ n0. 5/. Độ phức tạp đa thức: Độ phức tạp PT (n) đƣợc gọi là đa thức, nếu có tiệm cận tới đa thức p (n). 6/. Thuật toán đa thức: Thuật toán đƣợc gọi là đa thức, nếu độ phức tạp về thời gian (trong trƣờng hợp xấu nhất) của nó là đa thức Nói cách khác: + Thuật toán thời gian đa thức là thuật toán có độ phức tạp thời gian O (n t), trong đó t là hằng số. + Thuật toán thời gian hàm mũ là thuật toán có độ phức tạp thời gian O (t f (n) ), trong đó t là hằng số và f (n) là đa thức của n. 1.2.2.3. Phân lớp bài toán theo độ phức tạp 1/.Khái niệm “dẫn về đƣợc”. Bài toán đƣợc gọi là “dẫn về đƣợc” bài toán A một cách đa thức, kí hiệu B ∞ A, nếu có thuật toán đơn định đa thức để giải bài toán A, thì cũng có thuật toán đơn định để giải bài toán B. Nghĩa là: Bài toán A “khó hơn” bài toán B, hay B “dễ hơn” A, B đƣợc diễn đạt bằng ngôn ngữ của bài toán A, hay có thể hiểu B là trƣờng hợp riêng của A. Vậy nếu giải đƣợc bài toán A thì cũng sẽ giải đƣợc bài toán B. Quan hệ ∞ có tính chất bắc cầu: Nếu C ∞ B và B ∞ A thì C ∞ A. 2/. Khái niệm “khó tƣơng đƣơng” Bài toán A gọi là “khó tƣơng đƣơng” bài toán B, kí hiệu A ~ B, nếu A ∞ B và B ∞ A. 12
  26. 1.2.2.4. Các lớp bài toán 1/. Khái niệm lớp bài toán P, NP. Ký hiệu: P là lớp bài toán giải đƣợc bằng thuật toán đơn định, đa thức. NP là lớp bài toán giải đƣợc bằng thuật toán không đơn định, đa thức. Theo định nghĩa ta có P là tập con của NP. Hiện nay ngƣời ta chƣa biết đƣợc P ≠NP? 2/. Khái niệm lớp bài toán NP- Hard Bài toán A đƣợc gọi là NP-Hard (NP-khó) nếu mọi L NP đều là L ∞ A. Bài toán NP-Hard có thể nằm trong hoặc nằm ngoài lớp NP. 3/.Khái niệm lớp bài toán NP- Complete. Bài toán A đƣợc gọi là NP-Complete (NP-đầy đủ) nếu A là NP-Hard và A NP. Bài toán NP- Complete bao gồm tất cả những bài toán NP- Complete. 1.2.2.5. Khái niệm hàm một phía, hàm cửa sập một phía. 1/. Hàm f(x) đƣợc gọi là hàm một phía nếu tính “xuôi” y = f(x) thì dễ, nhƣng tính “ngƣợc” x = f -1 (y) lại rất khó. Ví dụ: Hàm f (x) = g x (mod p), với p là số nguyên tố lớn là hàm một phía. 2/. Hàm đƣợc gọi là hàm cửa sập một phía nếu tính y = f (x) thì dễ, tính x = f -1 (y) lại rất khó. Tuy nhiên có cửa sập z để tính x = f -1 (y) là “dễ”. Ví dụ: f (x) = x α (mod n) (n là tích của 2 số nguyên tố lớn, n = p * q ) là hàm một phía. Nếu chỉ biết a và n thì tính x = f -1 (y) rất “khó”, nhƣng nếu biết cửa sập p hoặc q thì tính đƣợc f -1 (y) là khá “dễ”. 13
  27. Chương 2. MỘT SỐ KĨ THUẬT MẬT MÃ 2.1. VẤN ĐỀ MÃ HÓA 2.1.1. Khái niệm mật mã Mật mã học là một lĩnh vực liên quan với các kỹ thuật ngôn ngữ và toán học để đảm bảo an toàn thông tin, cụ thể là trong thông tin liên lạc. Về phƣơng diện lịch sử, mật mã học gắn liền với quá trình mã hóa. Trƣớc đây mật mã chỉ đƣợc dùng trong ngành an ninh quốc phòng, ngày nay việc bảo đảm an toàn thông tin là nhu cầu của mọi ngành, mọi ngƣời( do thông tin chủ yếu truyền trên mạng công khai), vì vậy kĩ thuật mật mã là công khai cho mọi ngƣời dùng. Điều bí mật nằm ở khóa mật mã. Hiện nay có nhiều kĩ thuật mật mã khác nhau, mỗi kĩ thuật có ƣu và nhƣợc điểm riêng. Tùy theo yêu cầu của môi trƣờng ứng dụng ta dùng kĩ thuật này hay kĩ thuật khác. Có môi trƣờng cần phải an toàn tuyệt đối, bất kể thời gian và chi phí. Có môi trƣờng lại cần phải dung hòa giữa bảo mật và chi phí thực hiện. Mật mã cổ điển chủ yếu dùng để “che dấu” dữ liệu. Với mật mã hiện đại ngoài khả năng “che dấu” dữ liệu, còn dùng để thực hiện: Ký số ( ký điện tử), tạo giao diện thông điệp, giao thức bảo toàn dữ liệu, xác thực thực thể, giao thức thỏa thuận, giao thức phân phối khóa . Theo nghĩa hẹp, mật mã dùng để bảo mật dữ liệu, ngƣời ta quan niệm: Mật mã học là môn khoa học nghiên cứu mật mã: tạo mã và phân tích mã (thám mã). Vai trò của mật mã: Bảo đảm bí mật (Bảo mật ): Thông tin không bị lộ đối với ngƣời không đƣợc phép. Bảo đảm toàn vẹn (Bảo toàn): Ngăn chặn hay hạn chế việc bổ sung, loại bỏ và sửa chữa dữ liệu không đƣợc phép. Bảo đảm xác thực (Chứng thực): Xác thực đúng thực thể cần kết nối, giao dịch. Xác thực đúng thực thể có trách nhiệm về nội dung thông tin (xác thực nguồn gốc thông tin). Bảo đảm sẵn sàng: Thông tin sẵn sàng cho ngƣời dùng hợp pháp. 14
  28. 2.1.2. Khái niệm mã hóa • Mã hóa là phƣơng pháp để biến thông tin (nhƣ phim ảnh, văn bản, hình ảnh ) dạng hiểu đƣợc sang dạng thông tin không thể hiểu đƣợc nếu không có phƣơng tiện giải mã. • Giải mã là phƣơng pháp để đƣa từ dạng thông tin đã đƣợc mã hóa về dạng thông tin ban đầu, quá trình ngƣợc của mã hóa. • Hệ mã hóa: Việc mã hóa theo quy tắc nhất định, quy tắc đó gọi là hệ mã hóa Hệ mã hóa đƣợc định nghĩa là bộ năm (P, C, K, E, D) trong đó: P là tập hữu hạn các bản rõ có thể. C là tập hữu hạn các bản mã có thể. K tập hữu hạn các khóa có thể. E là tập các hàm lập mã. D là tập các hàm giải mã. Với khóa lập mã ke K, có hàm lập mã e ke E, eke: P → C. Với khóa giải mã kd K, có hàm giải mã d kd D, d kd: C → P. sao cho d kd ( e ke (x)) = x, x P. Ở đây x đƣợc gọi là bản rõ, e ke (x) đƣợc gọi là bản mã. • Thuật toán mã hóa hay giải mã là thủ tục để thực hiện mã hóa hay giải mã. • Khóa mã hóa là một giá trị làm cho thuật toán mã hóa thực hiện theo cách riêng biệt và sinh ra bản rõ riêng. Thông thƣờng khóa càng lớn thì bản mã càng an toàn. Phạm vi các giá trị có thể có của khóa đƣợc gọi là không gian khóa. 15
  29. 2.1.3. Phân loại mã hóa. Có 2 loại mã hóa: mã hóa khóa đối xứng và mã hóa khóa bất đối xứng. • Hệ mã hóa khóa đối xứng có khóa lập mã và khóa giải mã “giống nhau”, theo nghĩa biết đƣợc khóa này thì “dễ” tính đƣợc khóa kia. Vì vậy phải dữ bí mật cả hai khóa. • Hệ mã hóa khóa bất đối xứng có khóa lập mã khác khóa giải mã, biết đƣợc khóa này cũng khó tìm đƣợc khóa kia. Vì vậy, chỉ cần bí mật khóa giải mã, còn công khai khóa lập mã. 2.1.4. Hệ mã hóa khóa đối xứng 2.1.4.1.Khái niệm mã hóa khóa đối xứng Mã hóa khóa đối xứng là hệ mã mà biết đƣợc khóa lập mã thì có thể “dễ” tính đƣợc khóa giải mã và ngƣợc lại. Đặc biệt có một số Hệ mã hóa có khóa lập mã và khóa giải mã trùng nhau (ke = kd), nhƣ hệ mã dịch chuyển hay hệ mã DES. Hệ mã hóa khóa đối xứng còn gọi là hệ mã hóa khóa bí mật, hay khóa riêng, vì phải giữ bí mật cả 2 khóa. Trƣớc khi dùng hệ mã hóa khóa đối xứng, ngƣời gửi và ngƣời nhận phải thỏa thuận thuật toán mã hóa và khóa chung, khóa phải đƣợc giữ bí mật. Độ an toàn của Hệ mã hóa loại này phụ thuộc vào khóa. Ví dụ: + Hệ mã hóa cổ điển là mã hóa khóa đối xứng, dễ hiểu, dễ thực thi nhƣng có độ an toàn không cao. Vì giới hạn tính toán chỉ trong bảng chữ cái sử dụng trong bản tin cần mã, ví dụ Z26 nếu dùng chữ cái tiếng Anh. Với hệ mã hóa cổ điển, nếu biết khóa lập mã hay thuật toán lập mã, có thể “dễ” xác định đƣợc bản rõ, vì thế “dễ” tìm đƣợc khóa giải mã. + Hệ mã hóa DES (1973) là hệ mã hóa khóa đối xứng hiện đại, có độ an toàn cao. 16
  30. 2.1.4.2. Một số đặc điểm của hệ mã hóa khóa đối xứng 1/. Ƣu điểm Các hệ mã hóa khóa đối xứng mã hóa và giải mã nhanh hơn hệ mã hóa khóa công khai. 2/. Hạn chế Mã hóa khóa đối xứng chƣa thật an toàn với lý do sau: Ngƣời mã hóa và ngƣời giải mã phải có chung một khóa. Khóa phải đƣợc giữ bí mật tuyệt đối, vì biết khóa này “dễ” xác định đƣợc khóa kia và ngƣợc lại. Vấn đề thỏa thuận khóa và quản lý khóa chung là khó khăn và phức tạp. Ngƣời gửi và ngƣời nhận phải luôn thống nhất với nhau về khóa. Việc thay đổi khóa là rất khó và dễ bị lộ. Khóa chung phải đƣợc gửi cho nhau trên kênh an toàn. Mặt khác khi hai ngƣời (lập mã và giải mã) cùng biết chung một bí mật, thì càng khó giữ đƣợc bí mật. 3/. Tấn công đối với các mật mã đối xứng Các mã đối xứng thƣờng rất dễ bị ảnh hƣởng bởi các loại tấn công gọi là tấn công với văn bản thuần túy biết trƣớc (known-plaintext attacks), tấn công với văn bản thuần túy chọn trƣớc (chosen plaintext attacks), thám mã vi phân (differential cryptanalysis) và thám mã tuyến tính (linear cryptanalysis). Nếu mỗi hàm số sử dụng trong các vòng tính toán đƣợc thiết kế một cách cẩn thận, thì nó sẽ giảm khả năng chìa khóa của mã bị tấn công rất nhiều. 17
  31. 2.1.4.3. Một số hệ mã khóa cổ điển 1/. Mã dịch chuyển a/. Sơ đồ: Đặt P = C = K = Z 26. Bản mã y và bản rõ x Z26. Với khóa k K, ta định nghĩa: Hàm mã hóa y = ek ( x ) = ( x + k ) mod 26. Hàm giải mã x = d k ( y ) = ( y – k ) mod 26. b/. Ví dụ: Bản rõ chữ x= ”I L O V E Y O U” và khóa k = 3 Bản rõ số : 8 11 14 21 4 24 14 20 Với phép mã hóa y = e k ( x ) = ( x + k ) mod 26 = ( x + 3 ) mod 26, ta nhận đƣợc: Bản mã số: 11 14 17 24 7 1 17 23 Bản mã chữ: L O R Y H B R X Giả mã: x = d y ( y ) = ( y – k ) mod 26 = ( y – 3 ) mod 26, ta nhận đƣợc bản rõ. c/. Các dạng tấn công vào mã dịch chuyển: Tìm cách xác định khóa k. Do chỉ có 26 khóa nên việc thám mã có thể thực hiện theo kiểu “biết bản mã ” bằng duyệt tuần tự các khóa cho tới khi nhận đƣợc bản rõ có ý nghĩa. Ví dụ: khi thám mã có trong tay một bản mã là: “LORYHBRX”. Thám mã sẽ thực hiện duyệt lần lƣợt khóa k = 1 -> k = 26 để tìm ra bản rõ. Với k = 3 đƣợc bản rõ:”ILOVEYOU” →Giải pháp phòng tránh: Mở rộng vùng không gian khóa lớn. Ví dụ nhƣ bảng chữ cái Tiếng Việt có thanh (gồm 94 kí tự) thì việc thử tất cả các khóa cũng lâu hơn bảng Tiếng Anh. 18
  32. 2/. Mã Affine a/. Sơ đồ: Đặt P = C = Z 26. Bản mã y và bản rõ x Z 26. Tập khóa: K = {( a, b) với a, b Z26, gcd ( a, 26) = 1} Với khóa k = (a, b) K, ta định nghĩa: Phép mã hóa: y = ek ( x ) = ( a * x + b ) mod 26. -1 Phép giải mã: x = dk ( y ) = a ( y – b ) mod 26. b/. Ví dụ: Bản rõ chữ: “C N T T” Chọn khóa: k = ( 5, 8) Bản rõ số: 2 13 19 19 Mã hóa theo công thức y = ek ( x ) = ( a * x + b ) mod 26= ( 5 * 2 + 8 )mod 26 Bản mã số: 18 21 25 25 Bản mã chữ: S V Z Z Giải mã theo công thức: -1 -1 x = d k ( y ) = a ( y – b ) mod 26 = 5 * ( y – 8 ) mod 26 = 21 * ( y – 8 ) mod 26. c. Các dạng tấn công vào Affine: Tìm cách xác định khóa k Khóa mã Affine có dạng k = ( a, b) với a, b Z26 và gcd (a, 26)= 1. Kí tự mã y và kí tự bản rõ x tƣơng ứng có quan hệ: y = (a . x + b) mod 26 Thám mã sử dụng phƣơng pháp sắc suất thống kê, dựa vào tần suất xuất hiện của các kí tự trong Tiếng Anh. Từ đó biết đƣợc 2 cặp (x,y) khác nhau và có đƣợc hệ phƣơng trình tuyến tính 2 ẩn, giải hệ đó tìm ra giá trị a, b tức là tìm ra khóa k. Kết hợp với 12 số thuộc Z26 nguyên tố với 26, nên số khóa là: 12 * 26 = 312. →Giải pháp phòng tránh tấn công: Mở rộng vùng không gian khóa lớn. Ví dụ nhƣ bảng chữ cái tiếng Việt có thanh (gồm 94 ký tự). Số kí tự nhiều thì tần suất xuất hiện của các chữ cái cũng không khác biệt nhau nhiều lắm, do đó để phát hiện đƣợc kí tự “nổi bật” cũng khó khăn hơn. Và khi đó số khóa có thể có lớn hơn 312, việc thử tất cả các trƣờng hợp sẽ lâu hơn. 19
  33. 2.1.4.4.Hệ mã hóa DES. DES ( Data Encryption Standard, hay Tiêu chuẩn Mã hóa Dữ liệu) là một phƣơng pháp mã hóa đƣợc FIPS (Tiêu chuẩn Xử lý Thông tin Liên bang Hoa Kỳ) chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này đƣợc sử dụng rộng rãi trên phạm vi thế giới. Ngay từ đầu, thuật toán của nó đã gây ra nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài khóa tƣơng đối ngắn và nghi ngờ về cửa sau để Cơ quan An ninh quốc gia Hoa Kỳ (NSA) có thể bẻ khóa. Do đó, DES đã đƣợc giới nghiên cứu xem xét rất kỹ lƣỡng, việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối (block cipher) và các phƣơng pháp thám mã tƣơng ứng. Hiện nay DES đƣợc xem là không đủ an toàn cho nhiều ứng dụng. Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong vòng chƣa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi trong thực tiễn. Thuật toán đƣợc tin tƣởng là an toàn trong thực tiễn có dạng Triple DES (thực hiện DES ba lần), mặc dù trên lý thuyết phƣơng pháp này vẫn có thể bị phá. Gần đây DES đã đƣợc thay thế bằng AES (Advanced Encryption Standard, hay Tiêu chuẩn Mã hóa Tiên tiến). 1/. Mô tả thuật toán DES là thuật toán mã hóa khối, nó xử lý từng khối thông tin của bản rõ có độ dài xác định và biến đổi theo những quá trình phức tạp để trở thành khối thông tin của bản mã có độ dài không thay đổi, độ dài mỗi khối là 64 bit. DES cũng sử dụng khóa để cá biệt hóa quá trình chuyển đổi. Nhờ vậy, chỉ khi biết khóa mới có thể giải mã đƣợc bản mã. Khóa dùng trong DES có độ dài toàn bộ là 64 bit. Tuy nhiên chỉ có 56 bit thực sự đƣợc sử dụng; 8 bit còn lại chỉ dùng cho việc kiểm tra. Vì thế, độ dài thực tế của khóa chỉ là 56 bit. Một khối dữ liệu 64 bit đƣợc mã hóa bằng việc cho qua một bảng hoán vị ban đầu IP(Initial Permutation), sau đó qua một quá trình tính toán phức tạp có sự tham gia của khóa K, đƣợc thực hiện và cuối cùng bản mã nhận đƣợc sau khi qua một bản hoán vị nghịch đảo (IP-1 Inverse of the Initial Permutation). 20
  34. Sơ đồ tổng quát nhƣ sau: Ký hiệu : thể hiện phép toán XOR 21
  35. 2/. Quá trình mã hóa: 64 bit của khối dữ liệu đầu vào đƣợc hoán vị bằng IP. Trong đó, bit thứ 58 của khối dữ liệu là bít đầu tiên, bít thứ 50 của khối dữ liệu là bit thứ 2, bít cuối cùng của khối dữ liệu sau khi hoán vị là bít thứ 7 của khối dữ liệu vào. Kết quả của phép hoán vị ban đầu sẽ đƣợc chia làm 2 phần: L0R0 (L0 với 32bit là nửa trái, R0 với 32bit là nửa phải), sau đó thực hiện 16 lần lặp liên tiếp theo công thức: Li = R i - 1 và Ri = L i - 1 f ( R i – 1, K i) và nhận đƣợc L 16 R 16 . Trong đó f đƣợc gọi là hàm mật mã. Hàm f có 2 đối là 2 khối bit, một là R i – 1 với 32 bit và hai là Ki với 48 bit: Kết quả của 16 lần lặp liên tiếp là một khối 64 bit (R 16 L 16) đƣợc gọi là dữ liệu tiền kết quả, khối 64 bit này đƣợc cho qua một hoán vị nghịch đảo IP-1. Cuối cùng sau phép hoán vị nghịch đảo ta nhận đƣợc một bản mã. 22
  36. • Hàm mật mã f: Hàm f đƣợc tính nhƣ sau: f ( R i - 1, K i )=P ( S ( E ( R i - 1) Ki ) ) Hàm E là hoán vị mở rộng. Hàm E thực hiện chức năng mở rộng khối 32bit thành khối 48 bit. E(R) có 3 bit đầu lần lƣợt là bit thứ 32, 1, 2 của R 2 bit cuối là bit 32 và bit 1 của R. 23
  37. Sau đó tính E(R) K với K là khóa 48 bit. Kết quả của phép cộng modulo 2 này sẽ đƣợc viết thành 8 nhóm, mỗi nhóm 6 bit dạng B = B1 B2 B3 B4 B5 B6 B7 B8. Mỗi nhóm Br 6 bit (1 ≤ r ≤ 8) đƣợc đƣa qua một hộp đen Sr (S1, S2 S8) để nhận đƣợc Sr ( Br ) 4 bit đầu ra. Mỗi hộp Sr là một ma trận 4 * 16 trong đó mỗi phần tử của Sr là một số nguyên nằm trong khoảng 0 ->15(có thể biểu diễn tối đa đến 4 bit nhị phân). Với mỗi Br = b1 b2 b3 b4 b5 b6 , ta tính S r ( Br) nhƣ sau: b1 b6 là biểu diễn nhị phân của số hiệu hàng i trong Sr , b2 b3 b4 b5 là biến nhị phân của số hiệu j trong Sr. Cr = Sr ( Br ) là phần tử tại hàng i cột j của Sr. Ví dụ: Ta tính Sr (B) với B=011011 thì hàng i=01=1, cột j= 1101=13. Xác định tại cột S1 giá trị tại hàng 1, cột 13 có giá trị là 5 do đó C= 5= 0101. C = C1 C2 C3 C5 C6 C7 C8 (32 bit) đƣợc cho qua một hoán vị P và nhận đƣợc kết quả của hàm f: f = P( C ) 24
  38. Các bảng S1, S2, .S8 25
  39. PC 1: PC 2 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 • Sơ đồ sinh khóa K. 3/. Quá trình giải mã. Quy trình giải mã của DES tƣơng tự nhƣ quy trình lập mã, nhƣng theo trình tự khóa ngƣợc lại: k16, k15, , k1. Đầu vào từ bản mã y, đầu ra là bản rõ x. 26
  40. 4/. Vấn đề thám mã hệ mã hóa DES Mặc dù đã có nhiều nghiên cứu về phá mã DES hơn bất kỳ phƣơng pháp mã hóa khối nào khác nhƣng phƣơng pháp phá mã thực tế nhất hiện nay vẫn là tấn công kiểu duyệt toàn bộ. Nhiều đặc tính mã hóa của DES đã đƣợc xác định và từ đó ba phƣơng pháp phá mã khác đƣợc xác định với mức độ phức tạp nhỏ hơn tấn công duyệt toàn bộ. Tuy nhiên các phƣơng pháp này đòi hỏi một số lƣợng bản rõ quá lớn (để tấn công lựa chọn bản rõ) nên hầu nhƣ không thể thực hiện đƣợc trong thực tế. a/. Tấn công kiểu duyệt toàn bộ Đối với bất cứ phƣơng pháp mã hóa nào, kiểu tấn công cơ bản và đơn giản nhất là tấn công kiểu duyệt toàn bộ: thử lần lƣợt tất cả các khóa có thể cho đến khi tìm ra khóa đúng. Độ dài của khóa sẽ xác định số lƣợng phép thử tối đa cần thực hiện và do đó thể hiện tính khả thi của phƣơng pháp. Trong trƣờng hợp của DES, nghi ngờ về độ an toàn của nó đã đƣợc đặt ra ngay từ khi nó chƣa trở thành tiêu chuẩn. Ngƣời ta cho rằng chính NSA đã ủng hộ (nếu không muốn nói là thuyết phục) IBM giảm độ dài khóa từ 128 bit xuống 64 bit và tiếp tục xuống 56 bit. Điều này dẫn đến suy đoán rằng NSA đã có hệ thống tính toán đủ mạnh để phá vỡ khóa 56 bit ngay từ những năm 1970. b/. Các kiểu tấn công hiệu quả hơn duyệt toàn bộ: Hiện nay có 3 kiểu tấn công có khả năng phá vỡ DES (với đủ 16 chu trình) với độ phức tạp thấp hơn duyệt toàn bộ: phá mã vi sai (differential cryptanalysis - DC), phá mã tuyến tính (linear cryptanalysis - LC) và phá mã Davies (Davies' attack). Tuy nhiên các dạng tấn công này chƣa thực hiện đƣợc trong thực tế. Phá mã vi sai Eli Biham và Adi Shamir tìm ra vào cuối những năm 1980 mặc dù nó đã đƣợc IBM và NSA biết đến trƣớc đó. Để phá mã DES với đủ 16 chu trình, phá mã vi sai cần đến 247 văn bản rõ. DES đã đƣợc thiết kế để chống lại tấn công dạng này. 27
  41. Phá mã tuyến tính Mitsuru Matsui tìm ra năm 1993, cần 243 bản rõ, phƣơng pháp này đã đƣợc Matsui thực hiện và là thực nghiệm phá mã đầu tiên đƣợc công bố. Không có bằng chứng chứng tỏ DES có khả năng chống lại tấn công dạng này. Một phƣơng pháp tổng quát hơn, phá mã tuyến tính đa chiều (multiple linear cryptanalysis), đƣợc Kaliski và Robshaw nêu ra vào năm 1994, Biryukov và cộng sự tiếp tục cải tiến vào năm 2004. Nghiên cứu của họ cho thấy mô phỏng tuyến tính đa chiều có thể sử dụng để giảm độ phức tạp của quá trình phá mã tới 4 lần (chỉ còn 241 bản rõ). Kết quả tƣơng tự cũng có thể đạt đƣợc với kiểu tấn công tuyến tính kết hợp với lựa chọn bản rõ (Knudsen and Mathiassen, 2000). Junod (2001) đã thực hiện một số thực nghiệm để tìm ra độ phức tạp thực tế của phá mã tuyến tính và thấy rằng quá trình thực tế nhanh hơn dự đoán: 239×241. Phá mã Davies: Trong khi phá mã vi sai và phá mã tuyến tính là các kỹ thuật phá mã tổng quát, có thể áp dụng cho các thuật toán khác nhau, phá mã Davies là một kỹ thuật dành riêng cho DES. Dạng tấn công này đƣợc đề xuất lần đầu bởi Davies vào cuối những năm 1980 và cải tiến bởi Biham và Biryukov (1997). Dạng tấn công mạnh nhất đòi hỏi 250 văn bản rõ, độ phức tạp là 250 và có tỷ lệ thành công là 51%. Ngoài ra còn có những kiểu tấn công dựa trên bản thu gọn của DES - DES với ít hơn 16 chu trình. Những nghiên cứu này cho chúng ta biết số lƣợng chu trình cần có và ranh giới an toàn của hệ thống. Năm 1994, Langford và Hellman đề xuất phá mã vi sai - tuyến tính (differential- linear cryptanalysis) kết hợp giữa phá mã vi sai và tuyến tính. 28
  42. c/. Một vài đặc điểm về cách giải mã DES có tính chất bù: trong đó là phần bù của x theo từng bít (1 thay bằng 0 và ngƣợc lại). EK là bản mã hóa của E với khóa K. P và C là văn bản rõ (trƣớc khi mã hóa) và văn bản mã (sau khi mã hóa). Do tính bù, ta có thể giảm độ phức tạp của tấn công duyệt toàn bộ xuống 2 lần (tƣơng ứng với 1 bít) với điều kiện là ta có thể lựa chọn bản rõ. Ngoài ra DES còn có 4 khóa yếu (weak keys). Khi sử dụng khóa yếu thì mã hóa (E) và giải mã (D) sẽ cho ra cùng kết quả: EK(EK(P)) = P, EK = DK Tuy nhiên có thể dễ dàng tránh đƣợc những khóa này khi thực hiện thuật toán, có thể bằng cách thử hoặc chọn khóa một cách ngẫu nhiên. Khi đó khả năng chọn phải khóa yếu là rất nhỏ. DES đã đƣợc chứng minh là không tạo thành nhóm. Nói một cách khác, tập hợp {EK} (cho tất cả các khóa có thể) theo phép hợp thành không tạo thành một nhóm hay gần với một nhóm (Campbell and Wiener, 1992). Vấn đề này vẫn còn để mở và nếu nhƣ không có tính chất này thì DES có thể bị phá vỡ dễ dàng hơn và việc áp dụng DES nhiều lần (ví dụ nhƣ trong Triple DES (3 DES)) sẽ không làm tăng thêm độ an toàn của DES. 29
  43. 2.1.5. Mã hóa khóa bất đối xứng 2.1.5.1. Tổng quan về mã hóa khóa bất đối xứng Mã hóa khóa bất đối xứng là một dạng mã hóa cho phép ngƣời sử dụng trao đổi thông tin mật mà không cần phải trao đổi khóa chung bí mật trƣớc đó. Điều này đƣợc thực hiện bằng cách sử dụng một cặp khóa (có quan hệ toán học với nhau) là khóa công khai và khóa bí mật. Thuật ngữ mã hóa khóa công khai thƣờng đƣợc dùng đồng nghĩa với mã hóa khóa bất đối xứng mặc dù hai khái niệm không hoàn toàn tƣơng đƣơng. Có những thuật toán mã hóa khóa bất đối xứng không có tính chất khóa công khai và bí mật nhƣ đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều cần phải giữ bí mật. Trong mã hóa khóa công khai, khóa bí mật phải đƣợc giữ bí mật trong khi khóa công khai đƣợc phổ biến công khai. Trong 2 khóa, một dùng để mã hóa và khóa còn lại dùng để giải mã. Điều quan trọng đối với hệ thống là “khó” thể tìm ra khóa bí mật nếu chỉ biết khóa công khai. Hệ thống mã hóa khóa công khai có thể sử dụng với các mục đích: • Mã hóa: giữ bí mật thông tin và chỉ có ngƣời có khóa bí mật mới giải mã đƣợc. • Tạo chữ kí số: cho phép kiểm tra một văn bản có phải đã đƣợc tạo với một khóa bí mật nào đó hay không. • Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin mật giữa 2 bên. Thông thƣờng, kỹ thuật mã hóa khóa công khai đòi hỏi khối lƣợng tính toán nhiều hơn kỹ thuật mã hóa khóa đối xứng nhƣng những lợi điểm mà chúng mang lại khiến cho chúng đƣợc áp dụng trong nhiều ứng dụng. 30
  44. 1/. Mức an toàn Về khía cạnh an toàn, mã hóa khóa bất đối xứng cũng không khác nhiều với mã hóa khóa đối xứng. Có những thuật toán đƣợc dùng rộng rãi, có thuật toán chủ yếu trên lý thuyết; có thuật toán vẫn đƣợc xem là an toàn, có thuật toán đã bị phá vỡ Cũng cần lƣu ý là những thuật toán đƣợc dùng rộng rãi không phải lúc nào cũng đảm bảo an toàn. Một số thuật toán có những chứng minh về độ an toàn với những tiêu chuẩn khác nhau. Nhiều chứng minh gắn việc phá vỡ thuật toán với những bài toán nổi tiếng vẫn đƣợc cho là không có lời giải trong thời gian đa thức. Nhìn chung, chƣa có thuật toán nào đƣợc chứng minh là an toàn tuyệt đối. Vì vậy, cũng giống nhƣ tất cả các thuật toán mật mã nói chung, các thuật toán mã hóa khóa công khai cần phải đƣợc sử dụng một cách thận trọng. 2/. Các ứng dụng Ứng dụng rõ ràng nhất của mã hóa khóa công khai là bảo mật: một văn bản đƣợc mã hóa bằng khóa công khai của một ngƣời dùng thì chỉ có thể giải mã với khóa bí mật của ngƣời đó. Các thuật toán tạo chữ kí số (khóa công khai) có thể dùng để xác thực. Một ngƣời dùng có thể mã hóa văn bản với khóa bí mật của mình. Nếu ngƣời khác có thể giải mã với khóa công khai của ngƣời gửi, thì có thể tin rằng văn bản thực sự xuất phát từ ngƣời gắn với khóa công khai đó. Các đặc điểm trên còn có ích cho nhiều ứng dụng khác nhƣ: tiền điện tử, thỏa thuận khóa, 31
  45. 2.1.5.2. Hệ mã hóa RSA Trong mật mã học, RSA là một thuật toán mã hóa khóa công khai. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ kí điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vƣợt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công khai. RSA đang đƣợc sử dụng phổ biến trong thƣơng mại điện tử và đƣợc cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn. Thuật toán RSA có hai khóa: khóa công khai và khóa bí mật. Khóa công khai đƣợc công bố rộng rãi cho mọi ngƣời và đƣợc dùng để mã hóa. Những thông tin đƣợc mã hóa bằng khóa công khai chỉ có thể đƣợc giải mã bằng khóa bí mật tƣơng ứng. Nói cách khác, mọi ngƣời đều có thể mã hóa nhƣng chỉ có ngƣời biết khóa cá nhân (bí mật) mới có thể giải mã đƣợc. 1/.Tạo khóa • Chọn 2 số nguyên tố lớn p và q với p ≠ q. • Tính: n = p * q;. Tính: giá trị hàm số Ơle: (n)= ( p – 1 ) * ( q – 1 ). • Chọn số ngẫu nhiên b sao cho 1 < b < (n) và là số nguyên tố cùng nhau với n, tức gcd ( b, n ) = 1. • Tìm a, sao cho a * b = 1 mod( n ). • Hình thành cặp khóa: K(K’,K’’), trong đó: K’= ( n, b ) là khóa công khai và K’’= ( a ) là khóa bí mật. 2/. Mã hóa: Mã hóa bản rõ m theo công thức: b c = m ( mod n ) ( m Zn) 3/. Giải mã: m =c a ( mod n ). 32
  46. Chuyển đổi văn bản rõ: Trƣớc khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi văn bản rõ (chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ra văn bản mã không an toàn. Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề sau: Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tƣơng ứng Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ, giá trị cũng nhận giá trị nhỏ (so với n). Nhƣ vậy phép modulo không có tác dụng và có thể dễ dàng tìm đƣợc m bằng cách khai căn bậc e của c (bỏ qua modulo). RSA là phƣơng pháp mã hóa xác định (không có thành phần ngẫu nhiên) nên kẻ tấn công có thể thực hiện tấn công dựa vào bản rõ bằng cách tạo ra một bảng tra giữa bản rõ và bản mã. Khi gặp một bản mã, kẻ tấn công sử dụng bảng tra để tìm ra bản rõ tƣơng ứng. Một số tiêu chuẩn, chẳng hạn nhƣ PKCS, đã đƣợc thiết kế để chuyển đổi bản rõ trƣớc khi mã hóa bằng RSA. Các phƣơng pháp chuyển đổi này bổ sung thêm bít vào M. Các phƣơng pháp chuyển đổi cần đƣợc thiết kế cẩn thận để tránh những dạng tấn công phức tạp tận dụng khả năng biết trƣớc đƣợc cấu trúc của bản rõ. Phiên bản ban đầu của PKCS dùng một phƣơng pháp đặc ứng (ad-hoc) mà về sau đƣợc biết là không an toàn trƣớc tấn công lựa chọn bản rõ thích ứng(adaptive chosen ciphertext attack). Các phƣơng pháp chuyển đổi hiện đại sử dụng các kỹ thuật nhƣ chuyển đổi mã hóa bất đối xứng tối ƣu (Optimal Asymmetric Encryption Padding - OAEP) để chống lại tấn công dạng này. Tiêu chuẩn PKCS còn đƣợc bổ sung các tính năng khác để đảm bảo an toàn cho chữ ký RSA. Chú ý: RSA có tốc độ thực hiện chậm hơn đáng kể so với DES và các thuật toán mã hóa đối xứng khác. Trên thực tế, khi sử dụng thuật toán mã hóa đối xứng nào đó để mã hóa văn bản chỉ dùng RSA để mã hóa khóa để giải mã (thông thƣờng khóa ngắn hơn nhiều so với văn bản). 33
  47. 4/. Vấn đề tấn công hệ mã hóa RSA a/. Tìm cách xác định khóa bí mật: Nếu kẻ tấn công tìm đƣợc 2 số nguyên tố p và q sao cho: n = p * q thì có thể dễ dàng tìm đƣợc giá trị (p - 1)*( q - 1) và qua đó xác định a theo công thức a * b = 1 mod ( n ). Khi tìm ra khóa bí mật thì chúng sẽ giải mã và tìm ra bản rõ. →Cách phòng tránh: Chọn số nguyên tố p,q lớn để việc phân tích n thành 2 thừa số nguyên tố là khó có thể thực hiện đƣợc trong thời gian thực. b/. Tấn công đứng giữa ( Man-in-the-middle attack) Cũng giống nhƣ các thuật toán mã hóa khác, cách thức phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn của RSA. Quá trình phân phối khóa cần chống lại đƣợc tấn công đứng giữa (man-in-the-middle attack). Giả sử Eve (kẻ tấn công) có thể gửi cho Bob một khóa bất kỳ và khiến Bob tin rằng đó là khóa (công khai) của Alice. Đồng thời Eve có khả năng đọc đƣợc thông tin trao đổi giữa Bob và Alice. Khi đó, Eve sẽ gửi cho Bob khóa công khai của chính mình (mà Bob nghĩ rằng đó là khóa của Alice). Sau đó, Eve đọc tất cả văn bản mã hóa do Bob gửi, giải mã với khóa bí mật của mình, giữ 1 bản copy đồng thời mã hóa bằng khóa công khai của Alice và gửi cho Alice. Về nguyên tắc, cả Bob và Alice đều không phát hiện ra sự can thiệp của ngƣời thứ ba. Các phƣơng pháp chống lại dạng tấn công này thƣờng dựa trên các chứng thực khóa công khai. c/. Tấn công dựa trên thời gian: Vào năm 1995, Paul Kocher mô tả một dạng tấn công mới lên RSA: nếu kẻ tấn công nắm đủ thông tin về phần cứng thực hiện mã hóa và xác định đƣợc thời gian giải mã đối với một số bản mã lựa chọn thì có thể nhanh chóng tìm ra khóa a. Dạng tấn công này có thể áp dụng đối với hệ thống chữ ký điện tử RSA. Để chống lại tấn công dựa trên thời gian là đảm bảo quá trình giải mã luôn diễn ra trong thời gian không đổi bất kể bản mã. Tuy nhiên, cách này có thể làm giảm hiệu suất tính toán. Thay vào đó, hầu hết các ứng dụng hệ mật RSA sử dụng kỹ thuật gọi là che mắt. 34
  48. Kỹ thuật này dựa trên tính nhân của RSA: Thay vì tính c a mod n, Alice đầu tiên chọn một số ngẫu nhiên r và tính ( (r b )* c ) d mod n. Kết quả của phép tính này là ( r * m ) mod n và tác động của r sẽ đƣợc loại bỏ bằng cách nhân kết quả với nghịch đảo của r. Đỗi với mỗi văn bản mã, ngƣời ta chọn một giá trị của r. Vì vậy, thời gian giải mã sẽ không còn phụ thuộc vào giá trị của văn bản mã. d/. Tấn công dùng modulo n chung. Giả sử có 2 ngƣời tham gia A và B cùng sử dụng một modulo chung n trong khóa công khai của mình, chẳng hạn A chọn khóa công khai (n, b) và giữ khóa bí mật a. Ngƣời B chọn khóa công khai (n, d) và giữ khóa bí mật c. Một ngƣời tham gia thứ 3 gửi một văn bản cần bảo mật x đến cả A và B thì dùng khóa công khai nói trên để gửi đến A bản mã: y = x b mod n và gửi đến B bản mã z = x d mod n. Ngƣời thám mã O có thể dựa vào thông tin của n, b, d, y, z trên đƣờng công khai để xác định ra bản rõ x nhƣ sau: - Tính c = b -1 mod d; -Tính h = ; đƣợc x = y c (z h ) -1 mod n. Thực vậy, ta có y c ( z h ) -1 mod n= (x c b)*( x d ( cb - 1) / d ) -1 mod n = (x cb) *(x cb - 1)-1 mod n= x x là bản rõ cần tìm. Vậy trong trƣờng hợp này, việc truyền tập tin bảo mật không còn an toàn nữa. →Giải pháp phòng tránh: Dùng modulo n khác nhau cho mỗi ngƣời tham gia. 35
  49. 2.1.5.3. Hệ mã hóa Elgamal Đƣợc xây dựng trên bài toán khó giải logarit rời rạc. Đặc trƣng bài toán: * Cho một số nguyên tố p và phần tử sinh Zp, Z p. Hãy tìm một số nguyên duy nhất a, 0 ≤ a ≤ p - 2, sao cho a ( mod p). Ta sẽ xác định số nguyên a bằng log α β. 1/. Tạo cặp khóa (bí mật, công khai) (a, ): Chọn số nguyên tố lớn p sao cho bài toán logarit rời rạc trong Zp là “khó” giải. * * * * Chọn phần tử nguyên thủy Z p . Đặt P = Z p , C = Z p × Z p . * a Chọn khóa bí mật a Z p . Tính khóa công khai = (mod p). Định nghĩa tập khóa: K = { ( α, β, a, p}: = a (mod p) } Các giá trị α, β, p đƣợc công khai, phải giữ bí mật a. Với bản rõ x P và bản mã y C, với khóa k K định nghĩa: 2/. Lập mã: Chọn số ngẫu nhiên dƣơng bí mật t ( 0 ≤ t ≤ p – 2) Bản mã là y = e k ( x, t ) = (y 1, y 2 ) t t trong đó y 1 = mod p và y 2 = x * β mod p 3/. Giải mã: a -1 d k” (y 1, y 2) =y2 * (y1 ) ( mod p ). Mô tả sơ lƣợc cách làm việc của hệ mã Elgamal: t t Bản mã x đƣợc che dấu bằng cách nhân nó với β để tạo y 2, giá trị cũng đƣợc gửi đi nhƣ một phần của bản mã. Ngƣời biết đƣợc số mũ bí mật a có thể tính t t t đƣợc β từ . Sau đó anh ta sẽ tháo mặt nạ bằng cách chia y2 cho β để thu đƣợc x. Chú ý: y- a = y p - 1- a. 36
  50. Ví dụ: Cho p = 13, α = 2, a = 3. Khi đó β = 2 3 mod 13 = 8 Bây giờ ta giả sử B muốn gửi thông báo x = 7 tới A. Giả sử số ngẫu nhiên mà B chọn là k =1. Sau đó B tính 1 y 1 = 2 mod 13 = 2 1 y 2 = 7 × 8 mod 13 = 4 Khi đó A thu đƣợc bản mã y = (2, 4), A tính x = 4 × 2 13-1-3 mod 13 = 7 Đó chính là bản rõ mà B đã mã hóa. 4/. Thám mã với hệ mã Elgamal a/. Thuật toán Shank Thuật toán này còn có tên gọi khác là thuật toán cân bằng thời gian – bộ nhớ (Time memory Trade Off), có nghĩa là nếu chúng ta có đủ bộ nhớ thì có thể dùng bộ nhớ đó để giảm thời gian thực hiện của bài toán xuống. * Input: số nguyên p, phần tử sinh nguyên thủy Z p, số nguyên . Output: cần tìm a sao cho amod p = . Thuật toán: Gọi m=[(p - 1)1/2] (lấy phần nguyên). Bƣớc 1: Tính m j mod p với 0 ≤ j ≤ m - 1. mj Bƣớc 2 : Sắp xếp các cặp (j, mod p) và lƣu vào trong danh sách L1. Bƣớc 3: Tính - i mod p với 0 ≤ i ≤ m - 1. -i Bƣớc 4: Sắp xếp các cặp ( i , mod p) và lƣu vào danh sách L2. m j Bƣớc 5: Tìm trong 2 danh sách L1 và L2 và xem có tồn tại cặp ( j, mod p) và (i, -1 mod p) nào mà m j mod p= -i mod p (tọa độ thứ 2 của 2 cặp bằng nhau). Bƣớc 6: a = ( m j + i ) mod ( p – 1 ). Kết quả này có thể kiểm chứng từ công thức m j mod p= - i mod p => mj + imod p= mod p => a = ( mj+i) mod (p-1). 37
  51. Độ phức tạp của thuật toán phụ thuộc vào m = [(p-1)1/2], với giá trị của m, chúng ta cần tính các phần tử thuộc 2 danh sách L1 và L2 đều là các phép toán lũy thừa phụ thuộc vào j và i, i và j lại phụ thuộc vào m nên có thể nhận thấy là thuật toán này có thể áp dụng trong trƣờng hợp mà p nhỏ. Ví dụ: Cho p=13, α=2; β=8. Tìm a sao cho a mod p= . Giải: Tính: m=[(p-1)1/2]=3. B1: Tính m j mod p với 0 ≤ j ≤ m - 1 Với j= 0 thì m j mod p=2 3 * 0 mod 13=1 Với j= 1 thì m j mod p=2 3 * 1 mod 13=8 Với j= 2 thì m j mod p=2 3 * 2 mod 13=12 B2: Lƣu vào danh sách L1 -> Vậy ta có L1= {(0,1);(1,8);(2,12)} B3: Tính -imod p với 0 ≤ i ≤ m - 1 Với i=0 thì - i mod p=8 * 2 -0 mod 13=8; Với i=1 thì -i mod p=8 * 2-1 mod 13=4; Với i=2 thì -i mod p= 8 * 2-2 mod 13=2; B4: lƣu vào danh sách L2-> L2={(0,8);(1,4);(2,2)} m j -1 B5: Tìm trong 2 danh sách L1 và L2 cặp (j, mod p) và ( i, mod p) nào mà có m * j (mod p ) = * -i ( mod p ) (tọa độ thứ 2 của 2 cặp bằng nhau). Ta thấy cặp (1, 8 ) của L1 và ( 0, 8 ) của L2 có tọa độ thứ 2 bằng nhau. B6: vậy a= ( 3 * 1 + 0 ) mod (13-1)=3 38
  52. b/. Tìm cách xác định khóa bí mật Sử dụng modulo p nhỏ * Khi sử dụng số nguyên tố p nhỏ thì tập Z p nhỏ, do đó việc tìm đƣợc phần tử * sinh Z p cũng không khó khăn lắm. Khi biết đƣợc và giá trị từ khóa công khai thám mã có thể biết đƣợc khóa bí mật a. →Giải pháp phòng tránh: Chọn modulo p là số nguyên tố sao cho p -1 có ít nhất một số nguyên tố lớn. Điều đó là thực hiện đƣợc nếu số nguyên tố p đƣợc chọn là số nguyên tố Sophie Germain (tức có dạng 2 q + 1, với q cũng là số nguyên tố lớn). c/. Tìm cách xác định bản rõ Dùng cùng một số k trong nhiều lần lập mã: giả sử dùng cùng một số ngẫu nhiên k cho 2 lần lập mã, một lần cho x1, một lần cho x2 và đƣợc các bản mã tƣơng ứng (y1,y2) và (z1, z2). Vì dùng cùng một k nên y1 = z1 và do đó theo công thức lập mã ta có: z2 / y2= x2 / x1 , tức là x2= x1 * z2 /y2. Nhƣ vậy, một ngƣời thám mã, một lần biết cả bản rõ dễ dàng phát hiện bản rõ trong các lần sau. →Giải pháp phòng tránh: Mỗi lần lập mã thì sử dụng một số k khác nhau. 39
  53. 2.2. CHỮ KÍ SỐ 2.2.1. Sơ đồ chữ kí số Sơ đồ chữ ký là bộ 5: (P, A, K, S, V).Trong đó: • P là tập hữu hạn các văn bản có thể. • A là một tập hữu hạn các chữ ký có thể. • K là tập hữu hạn các khoá có thể. • S là tập hữu hạn các thuật toán ký • V là tập hữu hạn các thuật toán kiểm thử. Với mỗi khóa k K, có thuật toán ký Sig k S, Sig k : P→ A, có thuật toán kiểm tra chữ ký Ver k V, P × A → {đúng, sai}, thỏa mãn điều kiện sau với mọi x P, y A: Đúng, nếu y = Sig k ( x ) Ver k ( x, y ) = Sai, nếu y ≠ Sig k ( x ) 40
  54. 2.2.2. Chữ kí RSA 1/. Sơ đồ chữ ký RSA • Tạo cặp khóa (bí mật, công khai ) (a, b): Chọn bí mật 2 số nguyên tố lớn p, q, tính n = p * q, công khai n, đặt P = A = Zn. Tính bí mật (n) = (p - 1).(q - 1). Chọn khóa công khai b < (n), nguyên tố với (n) Khóa bí mật a là phần tử nghịch đảo của b theo mod (n): a * b ≡ 1 mod ( (n)). Tập cặp khóa (bí mật, công khai) K = {(a, b) / a,b Zn , a * b ≡ 1 mod ( (n))}. • Ký số: Chữ ký trên x P là y = sig k ( x ) = x a (mod n), y A. • Kiểm tra chữ ký: ver k ( x, y ) = đúng x y b ( mod n). (x P, y A) 2/. Ví dụ a/. Tạo khóa: Cho p = 3, q = 5, n = p * q =3 * 5 = 15 (n) = (p - 1).(q - 1) = (3 - 1). (5 - 1) = 2 * 4 = 8 Chọn b = 3 là nguyên tố cùng nhau với (15) Vậy theo công thức a * b ≡ 1 mod ( (n)) ta có a = 3 Khóa K (K’ , K” ) với K’ = (a) = (3) và K” = (b, n) = (3, 15) b/. Ký số Giả sử ký trên x = 2 a 3 Hàm ký: y = sig k’ (x) = x (mod n) = 2 (mod 15) = 8 c/. Kiểm tra chữ ký ver k’’ (x, y) = ver k” (2, 8) = Đúng vì y b ( mod n).= 8 3 ( mod 15) = 2 = x 41
  55. 2.2.3. Chữ kí Elgamal 1/. Sơ đồ chữ kí Elgamal • Tạo cặp khóa (bí mật, công khai) (a, ) Chọn số nguyên tố lớn p sao cho bài toán logarit rời rạc trong Zp là “khó” giải. * * * * Chọn phần tử nguyên thủy Z p . Đặt P = Z p , A = Z p × Z p-1 . * a Chọn khóa bí mật a Zp . Tính khóa công khai = (mod p). Định nghĩa tập khóa: K = { ( α, β, a, p}: = a (mod p) } Các giá trị α, β, p đƣợc công khai, phải giữ bí mật a. • Ký số * Dùng 2 khóa ký: khóa a và 1 khóa ngẫu nhiên bí mật t ( t Z p-1 ) Chữ ký trên x P là y = sig k ( x , t )= ( , ), y A y= t mod p và = ( x – a y) * t-1 mod ( p – 1 ) với x,y Z*p, Zp-1 • Kiểm tra chữ ký Verk ( x ,( y, ) ) = đúng khi và chỉ khi: ( ) y * y δ x (mod p) Nếu chữ kí đƣợc thiết lập đúng thì xác minh sẽ thành công vì: β y y α a y * α t ( x – ay ) * α x 2/. Ví dụ Giả sử : Cho p =467 , =2 , a=127 khi đó: = a mod p = 2127 mod 467 = 132. Nếu Bob muốn ký trên bức điện x = 100 và chọn số ngẫu nhiên k = 213 ( chú ý là USCLN(213,466) =1 và 213-1 mod 466 =431 ). Khi đó : y = 2213 mod 467 =29 và = (100 – 127 29 ) 431 mod 466 = 51 Bất kì ai cũng có thể xác minh chữ kí này bằng cách kiểm tra: 13229 * 2951 189 (mod 467 ) và 2100 189 (mod 467 ) Vì thế chữ kí là hợp lệ. 42
  56. 2.3. HÀM BĂM 2.3.1. Tổng quan hàm băm 2.3.1.1. Khái niệm Hàm băm Hàm băm là thuật toán không dùng khóa để mã hóa, nó có nhiệm vụ lọc ( băm) tài liệu và cho kết quả là một giá trị “băm” có kích thƣớc cố định, gọi là “ đại diện tài liệu” hay “đại diện thông điệp”. Hàm băm là hàm một chiều, theo nghĩa giá trị của hàm băm là duy nhất, và từ giá trị băm này, “khó thể” suy ngƣợc lại nội dung hay độ dài ban đầu của tài liệu gốc. 2.3.1.2. Đặc tính của hàm băm Hàm băm h là hàm một chiều với các đặc tính sau: 1/. Với tài liệu đầu vào (bản tin gốc) x, chỉ thu đƣợc giá trị băm duy nhất z = h (x). 2/. Nếu dữ liệu trong bản tin x bị thay đổi hay bị xóa để thành bản tin x’, thì giá trị băm h ( x’) ≠ h (x). Cho dù là một thay đổi nhỏ, ví dụ thay đổi một bit dữ liệu của bản tin gốc x, thì giá trị băm h (x) của nó cũng vẫn thay đổi. Điều này có nghĩa là: hai thông điệp khác nhau thì giá trị băm của chúng cũng khác nhau. 3/. Nội dung của bản tin gốc “ khó” thể suy ra từ giá trị băm của nó. Nghĩa là: với thông điệp x thì “dễ” tính đƣợc z = h (x), nhƣng lại “khó” tính ngƣợc lại đƣợc x nếu chỉ biết giá trị băm h (x). 2.3.1.3. Các tính chất của Hàm băm Tính chất 1: Hàm băm h là không va chạm yếu. Hàm băm h đƣợc gọi là không va chạm yếu, nếu cho trƣớc bản tin x, khó có thể tính toán để tìm ra x’ ≠ x mà h (x’) = h (x). Tính chất 2: Hàm băm h là không va chạm mạnh. Hàm băm h đƣợc gọi là không va chạm mạnh nếu “khó ” thể tính toán để tìm ra hai bức thông điệp khác nhau x’ và x ( x’ ≠ x) mà có h (x’) = h(x). Tính chất 3: Hàm băm h là hàm một chiều. Hàm băm h đƣợc gọi là hàm một chiều nếu khi cho trƣớc một bản tóm lƣợc thông báo z thì “khó” thể tính toán để tìm ra thông điệp ban đầu x sao cho h (x) = z. 43
  57. 2.3.2. Hàm băm MD4 2.3.2.1. Khái niệm “Thông điệp đệm” “Thông điệp đệm” là xâu bit có độ dài chia hết cho 512. “Thông điệp đệm” đƣợc lƣu trong mảng M = M [0] M[1] M[N-1] Trong đó M[i] là xâu bit có độ dài 32 bit, gọi là word. N ≡ 0 mod 16. ( 32 * 16 = 512) M đƣợc xây dựng từ bản tin gốc a bằng thuật toán: 1/. d = 447 – ( | a | mod 512) 2/. Giả sử l là kí hiệu biểu diễn nhị phân của | a | mod 264 3/. M = a || 1 || 0d || l Độ dài của xâu M = a || 1 || 0d là | a | + 1+ d = 448 mod 512. Độ dài của thông điệp đệm M là: 448 mod 512 + | l | = 448 mod 512 + 64 = 512 mod 512 Chú ý: Vì M = a || 1 || 0d || l nên d = |M| - ( | a | + 1+ 1) = |512| - ( | a | + 1 + 64 ) = 512 – ( | a | + 65) = 447 – ( | a | mod 512). 44
  58. 2.3.2.2. Thuật toán MD4 Input: Thông điệp là một xâu a có độ dài b bit. Output: Bản băm đại diện cho thông điệp gốc, có độ dài cố định 128 bit. 1/. Tóm tắt thuật toán Bước 1: khởi tạo thanh ghi. Có 4 thanh ghi để tính toán nhằm đƣa ra các đoạn mã: A, B, C, D. Mỗi thanh ghi có độ dài 32 bit. Các thanh ghi này đƣợc khởi tạo giá trị hexa. Word A : = 67 45 23 01 word C : = 98 ba dc fe Word B : = ef cd ab 89 word D : = 10 32 54 76 Bước 2: Xử lý thông điệp a trong 16 khối word, có nghĩa là cùng một lúc xử lý 16 word là 512 bit. Chia mảng M thành các khối 512 bit, đƣa từng khối 512 bit vào mảng T [j]. Mỗi lần xử lý một khối 512 bit. Lặp lại N/16 lần. 45
  59. 2/. Thuật toán MD4 A : = 67 45 23 01 C : = 98 ba dc fe B : = ef cd ab 89 D : = 10 32 54 76 /* Xử lý thông điệp theo từng khối 16 word*/ For i : = 0 to N/16 - 1 do For j := 0 to 15 do /* Copy khối i vào trong T. */ T [j] = M [16 i + j]; /* lặp trên j */ end /* Lƣu A vào AA, B vào BB, C vào CC, D và DD . */ AA = A BB = B CC = C DD = D /*mỗi lần xử lý 16 tử, mỗi từ 32 bit*/ Vòng 1 Vòng 2 Vòng 3 /* cộng vào mỗi thanh ghi giá trị của nó trƣớc khi vào vòng lặp */ A = A + AA B = B + BB C = C + CC D = D + DD end /* lặp trên i */ 3/. Các phép tính và các hàm dùng trong thuật toán MD4 Các phép toán logic đƣợc sử dụng trong 3 vòng X Y là phép toán AND theo bit giữa X và Y X Y là phép toán OR theo bit giữa X và Y. X Y là phép toán XOR theo bit giữa X và Y 46
  60. X chỉ phép bù của X X + Y là phép cộng theo modulo 232 X s là phép dịch vòng trái X đi s vị trí ( 0 ≤ s ≤ 31) 3 hàm F, G, H dùng tƣơng ứng trong vòng 1, 2, 3. Mỗi hàm này là một hàm logic tính theo bít. 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 4/. Ba vòng “băm” Vòng 1 1. A = (A +F (B, C, D) + T [0] ) 3 2. D = (D +F (A, B, C) + T [1] ) 7 3. C= (C +F (D, A, B) + T [2] ) 11 4. B = (B +F (C, D, A) + T [3] ) 19 5. A = (A +F (B, C, D) + T [4] ) 3 6. D = (D +F (A, B, C) + T [5] ) 7 7. C= (C +F (D, A, B) + T [6] ) 11 8. B = (B +F (C, D, A) + T [7] ) 19 9. A = (A +F (B, C, D) + T [8] ) 3 10. D = (D +F (A, B, C) + T [9] ) 7 11. C= (C +F (D, A, B) + T [10] ) 11 12. B = (B +F (C, D, A) + T [11] ) 19 13. A = (A +F (B, C, D) + T [12] ) 3 14. D = (D +F (A, B, C) + T [13] ) 7 15. C= (C +F (D, A, B) + T [14] ) 11 16. B = (B +F (C, D, A) + T [15] ) 19 47
  61. Vòng 2 1. A = ( A + G (B, C, D) + T [0] +5A827999 ) 3 2. D = (D + G (A, B, C) + T [4] + 5A827999 ) 5 3. C = (C + G (D, A, B) + T [8] + 5A827999 ) 9 4. B = (B + G (C, D, A) + T [12] + 5A827999 ) 13 5. A = ( A + G (B, C, D) + T [1] +5A827999 ) 3 6. D = (D + G (A, B, C) + T [5] + 5A827999 ) 5 7. C = (C + G (D, A, B) + T [9] + 5A827999 ) 9 8. B = (B + G (C, D, A) + T [13] + 5A827999 ) 13 9. A = ( A + G (B, C, D) + T [2] +5A827999 ) 3 10. D = (D + G (A, B, C) + T [6] + 5A827999 ) 5 11. C = (C + G (D, A, B) + T [10] + 5A827999 ) 9 12. B = (B + G (C, D, A) + T [14] + 5A827999 ) 13 13. A = ( A + G (B, C, D) + T [3] +5A827999 ) 3 14. D = (D + G (A, B, C) + T [7] + 5A827999 ) 5 15. C = (C + G (D, A, B) + T [11] + 5A827999 ) 9 16. B = (B + G (C, D, A) + T [15] + 5A827999 ) 13 Giá trị: 5A827999 là một hằng số ở dạng hecxa có độ dài 32 bit. 48
  62. Vòng 3 A = (A + H (B, C, D) + T[0] + 6ED9EBA1) 3 D = (D + H (A, B, C) + T[8] + 6ED9EBA1) 9 C = (C + H (D, A, B) + T[4] + 6ED9EBA1) 11 B = (B + H (C, D, A) + T[12] + 6ED9EBA1) 15 A = (A + H (B, C, D) + T[2] + 6ED9EBA1) 3 D = (D + H (A, B, C) + T[10] + 6ED9EBA1) 9 C = (C + H (D, A, B) + T[6] + 6ED9EBA1) 11 B = (B + H (C, D, A) + T[14] + 6ED9EBA1) 15 A = (A + H (B, C, D) + T[1] + 6ED9EBA1) 3 D = (D + H (A, B, C) + T[9] + 6ED9EBA1) 9 C = (C + H (D, A, B) + T[5] + 6ED9EBA1) 11 B = (B + H (C, D, A) + T[13] + 6ED9EBA1) 15 A = (A + H (B, C, D) + T[3] + 6ED9EBA1) 3 D = (D + H (A, B, C) + T[11] + 6ED9EBA1) 9 C = (C + H (D, A, B) + T[7] + 6ED9EBA1) 11 B = (B + H (C, D, A) + T[15] + 6ED9EBA1) 15 Giải thích: 6ED9EBA1 là một hằng số ở dạng hexa có độ dài 32 bit 49
  63. 5/. Kết quả “băm” Kết quả ra là đoạn mã có độ dài 128 bit, đƣợc thu gọn từ thông điệp a có độ dài b bit. Đoạn mã này thu đƣợc từ 4 thanh ghi A, B, C, D bắt đầu từ byte thấp của thanh ghi A đến byte cao của thanh ghi D. Ví dụ: a = “ABC ” Kết quả cuối cùng là đại diện văn bản A = 6A8CA15F B = 671E4A93 C = 93F85626 D = 3409907C 50
  64. 2.3.3. Hàm băm SHA 2.3.2.1. Giới thiệu SHA (Secure Hash Algorithm hay thuật giải băm an toàn) Năm thuật giải SHA là SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết quả dài 224 bit), SHA-256 (trả lại kết quả dài 256 bit), SHA-384 (trả lại kết quả dài 384 bit), và SHA-512 (trả lại kết quả dài 512 bit). Thuật giải SHA là thuật giải băm mật đƣợc phát triển bởi cục an ninh quốc gia (National Security Agency hay NSA) và đƣợc xuất bản thành chuẩn của chính phủ Mĩ bởi viện công nghệ và chuẩn quốc gia Mĩ (National Institute of Standards and Technology hay NIST). Bốn thuật giải sau thƣờng đƣợc gọi chung là SHA-2. SHA-1 đƣợc dùng trong nhiều ứng dụng và giao thức an ninh khác nhau, bao gồm TLS và SSL,PGP,SSH và IPSec. SHA-1 đƣợc coi là thuật giải thay thế MD5. SHA-2 bao gồm bốn giải thuật SHA-224, SHA-256, SHA-384 và SHA-512. Ba thuật giải SHA-256, SHA-384 và SHA-512 đƣợc xuất bản lần đầu năm 2001. Về giải thuật, các biến thể của SHA-2 không khác nhau. Mặc dù chúng sử dụng giá trị biến và hằng số cũng nhƣ độ dài từ, v.v. khác nhau. Mặc dù Gilbert và Handschuh (2003) đã nghiên cứu và không tìm ra điểm yếu của những biến thể này, chúng vẫn chƣa đƣợc kiểm chứng kĩ nhƣ SHA-1. 51
  65. 2.3.3.2. Thuật toán 1/. Khởi gán các biến: h0 := 0x67452301 h1 := 0xEFCDAB89 h2 := 0x98BADCFE h3 := 0x10325476 h4 := 0xC3D2E1F0 2/. Tiền xử lý Thêm bit 1 vào cuối thông điệp Thêm vào k bit 0 sao cho độ dài thông điệp nhận đƣợc đồng dƣ 448 (mod 512) Thêm 64 bit biểu diễn độ dài dài của thông điệp gốc. Chia thông điệp thành các khối 512 bit Với mỗi khối 512-bit: Chia thành 16 word (32 bit) w[0 15] Mở rộng 16 word (32 bit) thành 80 word (32 bit) w [i]=(w[ i - 3] w [ i – 8 ] w[i -14] w [ i - 16]) <<< 1 với 16 i < 80 A= h0, B= h1, C= h2, D= h3, E= h4 80 chu kỳ xử lý h0+= A, h1+= B, h2+= C, h3+= D, h4+= E Kết quả:= h0 | h1 | h2 | h3 | h4 52
  66. 3/. Chu kỳ xử lý trong SHA1 t là số thứ tự của chu kỳ A, B, C, D, E là 5 word (32 bit) của trạng thái F là hàm phi tuyến (thay đổi tùy theo chu kỳ) <<< n là phép quay trái n vị trí 32 ⊞ phép cộng modulo 2 , Kt là hằng số for i from 0 to 79 f = F [ t ] (B, C, D) temp = (A <<< 5) + f + E + Kt + w [ i ] E = D D = C C = B <<< 30 B = A A = temp Giá trị của K: 0x5a8279990x5a827999,,00 tt 1919 0x6ed9eba10x6ed9eba1,,2020 tt 3939 KKt t 0x8f1bbcdc0x8f1bbcdc,,4040 tt 5959 0xca62c1d60xca62c1d6,,6060 tt 7979 Công thức của hàm F [ t ] có thể đƣợc viết lại nhƣ sau: ZZ XX YY ZZ ,, 00 tt 1919 XX YY ZZ XX YY ,, 2020 tt 3939 FF tt XX,,YY,,ZZ XX YY ZZ XX YY ,, 4040 tt 5959 XX YY ZZ XX YY ,, 6060 tt 7979 53
  67. Chương 3. MỘT SỐ DẠNG “TẤN CÔNG” HỆ THỐNG THÔNG TIN 3.1. TẤN CÔNG MẠNG MÁY TÍNH VÀ CÁCH PHÕNG CHỐNG 3.1.1. Một số dạng tấn công mạng máy tính 3.1.1.1. Kỹ thuật đánh lừa Đây là thủ thuật đƣợc nhiều kẻ tấn công dùng cho các cuộc tấn công và thâm nhập vào hệ thống mạng và máy tính, bởi tính đơn giản mà hiệu quả của nó. Thƣờng đƣợc sử dụng để lấy cấp mật khẩu, thông tin, tấn công vào và phá hủy hệ thống. Ví dụ : Kỹ thuật đánh lừa Fake Email Login. Về nguyên tắc, mỗi khi đăng nhập vào hộp thƣ, thì chúng ta phải nhập thông tin tài khoản của mình bao gồm username (tên ngƣời dùng) và password (mật khẩu) rồi gửi thông tin đến Mail Server xử lý. Lợi dụng việc này, kẻ tấn công đã thiết kế trang web giống hệt nhƣ trang đăng nhập mà chúng ta hay sử dụng. Tuy nhiên, đó là một trang web giả và tất cả thông tin mà chúng ta điền vào đều đƣợc gởi đến cho họ. Kết quả, chúng ta bị đánh cắp mật khẩu. Nếu là ngƣời quản trị mạng, chúng ta nên chú ý và dè chừng trƣớc những email, những tin nhắn, các cú điện thoại yêu cầu khai báo thông tin. Những mối quan hệ cá nhân hay những cuộc tiếp xúc đều là một mối nguy hiểm tiềm tàng. 3.1.1.2. Kỹ thuật tấn công vào vùng ẩn Những phần bị dấu đi trong các website thƣờng chứa những thông tin về phiên làm việc của các client (máy khách). Các phiên làm việc này thƣờng đƣợc ghi lại ở máy khách chứ không tổ chức cơ sở dữ liệu trên máy chủ. Vì vậy, kẻ tấn công có thể sử dụng chiêu chức View Source của trình duyệt để đọc phần đầu đi này và từ đó có thể tìm ra các sơ hở của trang Web mà họ muốn tấn công. Từ đó, có thể tấn công vào hệ thống máy chủ. 54
  68. 3.1.1.3. Nghe trộm Các hệ thống truyền đạt thông tin qua mạng đôi khi không chắc chắn lắm và lợi dụng điều này, kẻ tấn công có thể truy cập vào các đƣờng dẫn dữ liệu để nghe trộm hoặc đọc trộm luồng dữ liệu truyền qua. Kẻ tấn công nghe trộm sự truyền đạt thông tin, dữ liệu sẽ chuyển đến kẻ trộm. Nó sẽ thu thập những thông tin quý giá về hệ thống nhƣ một gói chứa mật khẩu và tên ngƣời dùng của một ai đó. Các chƣơng trình nghe trộm còn đƣợc gọi là các sniffing. Các sniffing này có nhiệm vụ lắng nghe các cổng của một hệ thống mà kẻ tấn công muốn nghe trộm. Nó sẽ thu thập dữ liệu trên các cổng này và chuyển về cho kẻ tấn công 3.1.1.4. Tấn công Man-in-the-Middle – Giả mạo DNS Mỗi truy vấn DNS đƣợc gửi qua mạng đều có chứa một số nhận dạng duy nhất, mục đích của số nhận dạng này là để phân biệt các truy vấn và đáp trả chúng. Điều này có nghĩa rằng nếu một máy tính đang tấn công của chúng ta có thể chặn một truy vấn DNS nào đó đƣợc gửi đi từ một thiết bị cụ thể, thì tất cả những gì chúng ta cần thực hiện là tạo một gói giả mạo có chứa số nhận dạng đó để gói dữ liệu đó đƣợc chấp nhận bởi mục tiêu. Chúng ta sẽ hoàn tất quá trình này bằng cách thực hiện hai bƣớc với một công cụ đơn giản. Đầu tiên, chúng ta cần giả mạo ARP cache thiết bị mục tiêu để định tuyến lại lƣu lƣợng của nó qua các máy chủ đang tấn công của mình, từ đó có thể chặn yêu cầu DNS và gửi đi gói dữ liệu giả mạo. Mục đích của kịch bản này là lừa ngƣời dùng trong mạng mục tiêu truy cập vào website độc thay vì website mà họ đang cố gắng truy cập. Để rõ hơn chúng ta có thể tham khảo thêm hình tấn công bên dƣới. Việc tạo ra một kiểu tấn công mới là mục đích của các kẻ tến công. Trên mạng Internet hiện nay. 55
  69. 3.1.2. Phòng chống tấn công qua mạng bằng kĩ thuật mật mã 3.1.2.1. Phương pháp mã hóa Với phương pháp mã hóa thì trƣớc khi đƣợc truyền trên mạng, dữ liệu đã đƣợc mã hóa để đảm bảo trong quá trình truyền đi dữ liệu đó không bị xem trộm. Giao thức SSL (Secure Socket Layer) tổ hợp nhiều giải thuật mã hóa nhằm đảm bảo quá trình trao đổi thông tin trên mạng đƣợc bảo mật. Việc mã hóa dữ liệu diễn ra một cách trong suốt, hỗ trợ nhiều giao thức khác chạy trên nền giao thức TCP. Cơ chế hoạt động của giao thức SSL dựa trên nền tảng các ứng dụng mã hóa đã đƣợc kiểm chứng nhƣ: giải thuật mã hóa đối xứng nhƣ DES, 3 DES và mã hóa bất đối xứng nhƣ RSA, Elgamal, giải thuật băm (hash) một chiều, v.v 3.1.2.2. Phương pháp chứng thực khóa công khai Ví dụ, A muốn gửi thông điệp cho B và mã hóa theo phƣơng pháp khóa công khai. Lúc này A cần phải mã hóa thông điệp bằng khóa công khai của B. Trƣờng hợp khóa công khai bị giả mạo thì sao? Kẻ tấn công có thể tự sinh ra một cặp khóa gồm khóa công khai và khóa bí mật, sau đó đƣa cho A khóa công khai này và nói đây là khóa công khai của B. Nếu A dùng khóa công khai giả này mà tƣởng là của B thì dẫn đến hệ quả mọi thông tin A truyền đi đều bị kẻ tấn công đọc đƣợc. Vấn đề này đƣợc giải quyết nếu có một bên thứ ba đƣợc tin cậy, gọi là C, đứng ra chứng nhận khóa công khai. Những khóa công khai đã đƣợc C chứng nhận gọi là chứng nhận điện tử (public key certificate hay digital certificate). Một chứng nhận điện tử có thể đƣợc xem nhƣ là một “hộ chiếu” hay “chứng minh thƣ”. Nó đƣợc một tổ chức tin cậy (nhƣ VeriSign, Entrust, CyberTrust, v.v ) tạo ra. Tổ chức này đƣợc gọi là tổ chức chứng nhận khóa công khai Certificate Authority (CA). Một khi khóa công khai đã đƣợc CA chứng nhận thì có thể dùng khóa đó để trao đổi dữ liệu trên mạng với mức độ bảo mật cao. 56
  70. Cấu trúc của một chứng nhận điện tử gồm các thành phần chính nhƣ sau: + Tên của CA tạo ra chứng nhận. + Ngày hết hạn của chứng nhận. + Những thông tin về thực thể đƣợc chứng nhận. + Khóa công khai đƣợc chứng nhận. + Chữ kí: do khóa bí mật của CA tạo ra và đảm bảo giá trị của chứng nhận 57
  71. 3.2. TẤN CÔNG HỆ ĐIỀU HÀNH VÀ CÁCH PHÕNG CHỐNG 3.2.1. Một số dạng tấn công hệ điều hành 3.2.1.1. Tấn công vào hệ thống có cấu hình không an toàn Cấu hình không an toàn cũng là một lỗ hổng bảo mật của hệ thống. Các lỗ hổng này đƣợc tạo ra do các ứng dụng có các thiết lập không an toàn hoặc ngƣời quản trị hệ thống định cấu hình không an toàn. Chẳng hạn nhƣ cấu hình máy chủ web cho phép ai cũng có quyền duyệt qua hệ thống thƣ mục. Việc thiết lập nhƣ trên có thể làm lộ các thông tin nhậy cảm nhƣ mã nguồn, mật khẩu hay các thông tin của khách hàng. Nếu quản trị hệ thống cấu hình hệ thống không an toàn sẽ rất nguy hiểm vì nếu ngƣời tấn công duyệt qua đƣợc các tệp tin mật khẩu thì họ có thể tải về và giải mã ra, khi đó họ có thể làm đƣợc nhiều thứ trên hệ thống. 3.2.1.2. Tấn công mật khẩu cơ bản (Password-base Attact) Thông thƣờng, hệ thống khi mới cấu hình có tên ngƣời dùng và mật khẩu mặc định. Sau khi cấu hình hệ thống, một số ngƣời quản trị vẫn không đổi lại các thiết lập mặc định này. Đây là lỗ hổng giúp kẻ tấn công có thể thâm nhập vào hệ thống bằng con đƣờng hợp pháp. Khi đã đăng nhập vào, kẻ tấn công có thể tạo thêm ngƣời dùng, cài cửa sau (backboor) cho lần viếng thăm sau. 58
  72. 3.2.1.3. Tấn công từ chối dịch vụ (DoS) Tấn công từ chối dịch vụ (DoS) là cuộc tấn công trên hệ thống mạng nhằm ngăn cản những truy xuất tới một dịch vụ nhƣ là WEB, Email, Tấn công DoS phá huỷ dịch vụ mạng bằng cách làm tràn ngập số lƣợng kết nối, quá tải máy chủ hoặc chƣơng trình chạy trên máy chủ, tiêu tốn tài nguyên của máy chủ, hoặc ngăn chặn ngƣời dùng hợp lệ truy nhập tới các dịch vụ mạng. Cách phân loại phổ biến thƣờng dựa vào giao thức trong hình thức tấn công DoS, ví dụ nhƣ tràn ngập ICMP với Smurf, Ping of Death, khai thác điểm yếu của TCP trong hoạt động của giao thức và phân mảnh gói tin với SYN flood, hay các ứng dụng ở lớp ứng dụng nhƣ với Flash Crowds (hay tên gọi khác là X-flash). Phân loại theo phƣơng thức tấn công, DoS có thể đƣợc thực hiện bằng một vài gói tin đơn lẻ gửi thẳng tới server gây rối loạn hoạt động (nhƣ slammer worm), hoặc kích hoạt để gửi từ nhiều nguồn (tấn công từ chối dịch vụ phân tán DdoS). Tấn công có thể thực hiện trên mạng Internet (sử dụng ngay các web server), hoặc broadcast trong mạng từ bên trong (insider attacks nhƣ với Blaster worm), trên các mạng ngang hàng P2P (P2P index poinsioning) hay Wireless (WLAN authentication rejection attack- spoof sender). Tuy nhiên, có thể thấy các cách phân loại trên dựa chủ yếu vào cách nhìn từ sự phát sinh nguồn tấn công và vì thế, không hệ thống hoá đƣợc phƣơng thức phòng tránh. Zombie (hay còn gọi là daemons, slaves hoặc agent) là đối tƣợng đƣợc lợi dụng trở thành thành phần phát sinh tấn công. Một số trƣờng hợp điển hình nhƣ là thông qua rootkit (một dạng phần mềm đƣợc kích hoạt mỗi khi hệ thống khởi động, trƣớc cả khi hệ điều hành khởi động xong. Rootkit cho phép cài một file có thuộc tính ẩn, một tiến trình, hoặc một tài khoản ngƣời sử dụng lên hệ điều hành. Rootkit có khả năng chặn bắt dữ liệu từ các thiết bị đầu cuối, từ các kết nối mạng và từ bàn phím), hay các thành phần hoạt động đính kém trong email, hoặc trang Web. Để phòng chống, hệ thống mạng cần có những công cụ theo dõi và lọc bó nội dung (content filtering) nhằm ngăn ngừa việc tuyển mộ zombie của các tin tặc. 59
  73. Có rất nhiều các công cụ tấn công từ chối dịch vụ DoS, chủ yếu là tấn công từ chối dịch vụ phân tán DdoS nhƣ là TFN, TFN2000 (Trible Flood Network), tấn công dựa vào nguyên lý hoạt động của các giao thức nhƣ là Smurf, UDP, SYN, hay ICMP. Các công cụ này có đặc điểm là cần phải có các kênh phát động để zombie thực hiện tấn công tới một máy đích cụ thể. Hệ thống cần phải có các công cụ để giám sát và ngăn ngừa các kênh phát động đó. 1/. Ngăn chặn tấn công bằng băng thông Khi một cuộc tấn công DoS đƣợc phát động nó thƣờng đƣợc phát hiện dựa trên sự thay đổi đáng kể về băng thông của hệ thống mạng. Ví dụ, một hệ thống mạng bình thƣờng có thể có 80% lƣu lƣợng là của giao thực TCP, 20% lƣu lƣợng còn lại là của UDP. Thống kê này nếu có thay đổi rõ rệt có thể là dấu hiệu của một cuộc tấn cống DoS. Ví dụ nhƣ, sâu Slammer sẽ làm tăng lƣu lƣợng UDP, trong khi sâu Welchi sẽ tạo ra ICMP flood. Việc phân tán lƣu lƣợng gây ra bởi các sâu này gây tác hại lên bộ định tuyến, tƣờng lửa, hoặc hạ tầng mạng. Hệ thống cần phải có các công cụ giám sát và điều phối băng thông nhằm giảm thiểu tác hại của tấn công dạng này. 60
  74. 2/. Ngăn chặn tấn công qua cơ chế SYN/ACK SYN flood là một trong những cách tấn công DoS cổ nhất còn tồn tại cho đến thời điểm hiện tại, nhƣng tác hại của nó gây ra thì không giảm. Điểm căn bản để phòng ngừa cách tấn công DoS này là khả năng kiểm soát đƣợc số lƣợng yêu cầu SYN/ACK trong cơ chế kết nối bắt tay 3 bƣớc của giao thức TCP tới hệ thống mạng. 3/. Phát hiện và ngăn chặn tấn công tới hạn số kết nối Bản thân các máy chủ chỉ có thể đáp ứng đƣợc một số lƣợng nhất định các kết nối tới nó cùng một lúc. Ngay bản thân tƣờng lửa (đặc biệt với các tƣờng lửa có tính năng duyệt trạng thái), thì các kết nối luôn đƣợc gắn liền với bảng trạng thái có giới hạn dung lƣợng. Đa phần các cuộc tấn công đều sinh ra số lƣợng các kết nối ảo thông qua việc giả mạo. Để phòng ngừa tấn công dạng này, hệ thống cần phân tích và chống đƣợc việc giả mạo, và kiểm soát đƣợc số lƣợng kết nối từ một nguồn cụ thể tới máy chủ 4/. Phát hiện và ngăn chặn tấn công tới hạn tốc độ thiết lập kết nối Một trong những điểm mà các máy chủ thƣờng bị lợi dụng là khả năng các bộ đệm giới hạn dành cho tốc độ thiết lập kết nối, dẫn đến quá tải khi phải chịu sự thay đổi đột ngột về số lƣợng kết nối. Ở đây, việc áp dụng bộ lọc để giới hạn số lƣợng kết nối có một vai trò rất quan trọng. Một bộ lọc sẽ xác định ngƣỡng tốc độ kết nối cho từng thành phần của mạng. Trong một hệ thống, để đối phó với các cuộc tấn công từ chối dịch vụ, thì thành phần IPS đƣợc coi là quan trọng nhất. Các cuộc tấn công từ chối dịch vụ chủ yếu nhằm vào khả năng xử lý của hệ thống mạng mà đầu tiên là các thiết bị an ninh mạng. Năng lực xử lý của IPS là một trong những đặc điểm cần chú ý, đặc biệt là sự ổn định trong việc xử lý đồng thời các loại lƣu lƣợng hỗn tạp với kích thƣớc gói tin 61
  75. 3.2.2. Cách phòng chống tấn công hệ điều hành bằng kĩ thuật mật mã. 1/. Phòng chống bằng phƣơng pháp mã hóa: sử dụng các tài khoản đăng nhập phức tạp; mã hóa tài khoản ngƣời dùng. Các tệp tin, dữ liệu quan trọng của hệ thống nên bảo vệ bằng kĩ thuật mã hóa, giấu tin, nén tin, vv 2/. Lỗi chủ yếu đƣợc tìm thấy trên các ứng dụng chạy trên hệ điều hành phổ biến hiện nay là Windows, trên các chƣơng trình Webserver, DNS, hay SQL database. Cập nhật các bản vá là một trong những yêu cầu quan trọng cho việc phòng ngừa các điểm yếu của ứng dụng. 3/. Dùng phƣơng pháp mật mã để xác thực thực thể kết nối Ví dụ: Để phòng chống tấn công ARP (ARP chuyển từ địa chỉ IP sang địa chỉ MAC trong liên lạc mạng) có thể dùng chữ kí số để xác thực thực thể kết nối, chống giả mạo. 62
  76. 3.3. TẤN CÔNG CƠ SỞ DỮ LIỆU 3.3.1. Một số dạng tấn công cơ sở dữ liệu Ví dụ: tấn công cơ sở dữ liệu bằng phƣơng pháp tiêm vào SQL( SQL Injection ) 1/. SQL Injection là gì? SQL injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để "tiêm vào" (inject) và thi hành các câu lệnh SQL bất hợp pháp (không đƣợc ngƣời phát triển ứng dụng lƣờng trƣớc). Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy. Lỗi này thƣờng xảy ra trên các ứng dụng web có dữ liệu đƣợc quản lí bằng các hệ quản trị cơ sở dữ liệu nhƣ SQL Server, MySQL, Oracle, DB2, Sysbase. 2/. Các dạng tấn công bằng SQL Injection Có bốn dạng thông thƣờng bao gồm: vƣợt qua kiểm tra lúc đăng nhập (authorization bypass), sử dụng câu lện SELECT, sử dụng câu lệnh INSERT, sử dụng các thủ tục lƣu trữ (stored-procedures). a/. Dạng tấn công vƣợt qua kiểm tra đăng nhập - Với dạng tấn công này, tin tặc có thể dễ dàng vƣợt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web. - Xét một ví dụ điển hình, thông thƣờng để cho phép ngƣời dùng truy cập vào các trang web đƣợc bảo mật, hệ thống thƣờng xây dựng trang đăng nhập để yêu cầu ngƣời dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi ngƣời dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. - Trong trƣờng hợp này, ngƣời ta có thể dùng hai trang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía ngƣời dùng. 63
  77. Ví dụ: Trang login.htm Username: Password: Trang execlogin.asp 64
  78. Thoạt nhìn, đoạn mã trong trang execlogin.asp dƣờng nhƣ không chứa bất cứ một lỗ hổng về an toàn nào. Ngƣời dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không an toàn và là tiền đề cho một lỗi SQL injection. Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu nhập vào từ ngƣời dùng đƣợc dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ đƣợc thực hiện. Ví dụ, nếu ngƣời dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của trang login.htm là: ' OR ' ' = ' '. Lúc này, câu truy vấn sẽ đƣợc gọi thực hiện là: SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''='' - Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đoạn mã tiếp theo xử lí ngƣời dùng đăng nhập bất hợp pháp này nhƣ là ngƣời dùng đăng nhập hợp lệ. b/. Dạng tấn công sử dụng câu lệnh SELECT Dạng tấn công này phức tạp hơn. Để thực hiện đƣợc kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công. Xét một ví dụ rất thƣờng gặp trong các website về tin tức. Thông thƣờng, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này. Ví dụ: Mã nguồn cho chức năng này thƣờng đƣợc viết khá đơn giản theo dạng 65
  79. Thông thƣờng, đoạn mã này hiển thị nội dung của tin có ID trùng với ID đã chỉ định và hầu nhƣ không thấy có lỗi. Tuy nhiên, giống nhƣ ví dụ đăng nhập ở trƣớc, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó khởi đầu cho một cuộc tấn công bất hợp pháp. Ví dụ nhƣ: 0 OR 1=1 (nghĩa là, or 1=1). Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh: SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1 Một trƣờng hợp khác, ví dụ nhƣ trang tìm kiếm. Trang này cho phép ngƣời dùng nhập vào các thông tin tìm kiếm nhƣ Họ, Tên, Đoạn mã thƣờng gặp là: Tƣơng tự nhƣ trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để nhập vào trƣờng tên tác giả bằng chuỗi giá trị: ' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, ngoài câu truy vấn đầu không thành công, chƣơng trình sẽ thực hiện thêm lệnh tiếp theo sau từ khóa UNION nữa. Tất nhiên các ví dụ nói trên, dƣờng nhƣ không có gì nguy hiểm, nhƣng hãy thử tƣởng tƣợng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn lệnh nguy hiểm nhƣ lệnh DROPTABLE. 66
  80. Ví dụ nhƣ: ' DROP TABLE T_AUTHORS Chúng ta sẽ thắc mắc là làm sao biết đƣợc ứng dụng web bị lỗi dạng này đƣợc. Rất đơn giản, hãy nhập vào chuỗi (*) nhƣ trên, nếu hệ thống báo lỗi về cú pháp dạng: Invalid object name “OtherTable”; ta có thể biết chắc là hệ thống đã thực hiện câu SELECT sau từ khóa UNION, vì nhƣ vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh SELECT. Cũng sẽ có thắc mắc là làm thế nào có thể biết đƣợc tên của các bảng dữ liệu mà thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Cũng rất đơn giản, bởi vì trong SQL Server, có hai đối tƣợng là sysobjects và syscolumns cho phép liệt kê tất cả các tên bảng và cột có trong hệ thống. Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụ nhƣ: ' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có thể liệt kê đƣợc tên tất cả các bảng dữ liệu. c/. Dạng tấn công sử dụng câu lệnh INSERT Thông thƣờng các ứng dụng web cho phép ngƣời dùng đăng kí một tài khoản để tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, ngƣời dùng có thể xem và hiệu chỉnh thông tin của mình. SQL injection có thể đƣợc dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào. d/. Dạng tấn công sử dụng thủ tục lưu trữ (stored-procedures) Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng đƣợc thực thi với quyền quản trị hệ thống;. 67
  81. 3.3.2. Phòng chống tấn công CSDL bằng kĩ thuật mã hóa 1/. Giải pháp đơn giản nhất bảo vệ dữ liệu trong CSDL ở mức độ tập tin, chống lại sự truy cập trái phép vào các tập tin CSDL là hình thức mã hóa. Tuy nhiên, mã hóa dữ liệu ở mức độ này là giải pháp mang tính “đƣợc ăn cả, ngã về không”, giải pháp này không cung cấp mức độ bảo mật truy cập đến CSDL ở mức độ bảng (table), cột (column) và dòng (row). Một điểm yếu nữa của giải pháp này là bất cứ ai với quyền truy xuất CSDL đều có thể truy cập vào tất cả dữ liệu trong CSDL. Điều này phát sinh một nguy cơ nghiêm trọng, cho phép các đối tƣợng với quyền quản trị (admin) truy cập tất cả các dữ liệu nhạy cảm. Thêm vào đó, giải pháp này bị hạn chế vì không cho phép phân quyền khác nhau cho ngƣời sử dụng CSDL. 2/. Giải pháp thứ hai, đối nghịch với giải pháp mã hóa cấp tập tin nêu trên, giải quyết vấn đề mã hóa ở mức ứng dụng. Giải pháp này xử lý mã hóa dữ liệu trƣớc khi truyền dữ liệu vào CSDL. Những vấn đề về quản lý khóa và quyền truy cập đƣợc hỗ trợ bởi ứng dụng. Truy vấn dữ liệu đến CSDL sẽ trả kết quả dữ liệu ở dạng mã hóa và dữ liệu này sẽ đƣợc giải mã bởi ứng dụng. Giải pháp này giải quyết đƣợc vấn đề phân tách quyền an ninh và hỗ trợ các chính sách an ninh dựa trên vai trò (Role Based Access Control – RBAC). 68
  82. Tuy nhiên, xử lý mã hóa trên tầng ứng dụng đòi hỏi sự thay đổi toàn diện kiến trúc của ứng dụng, thậm chí đòi hỏi ứng dụng phải đƣợc viết lại. Đây là một vấn đề đáng kể cho các công ty có nhiều ứng dụng chạy trên nhiều nền CSDL khác nhau. Từ những phân tích hai giải pháp nêu trên, có thể dễ dàng nhận thấy một giải pháp bảo mật CSDL tối ƣu cần hỗ trợ các yếu tố chính sau: • Hỗ trợ mã hóa tại các mức dữ liệu cấp bảng, cột, hàng. • Hỗ trợ chính sách an ninh phân quyền truy cập đến mức dữ liệu cột, hỗ trợ RBAC. • Cơ chế mã hóa không ảnh hƣởng đến các ứng dụng hiện tại. Hai mô hình thỏa mãn các yêu cầu trên, đặc biệt là yêu cầu thứ ba. 1/. Xây dựng tầng CSDL trung gian Trong mô hình này, một CSDL trung gian (proxy) đƣợc xây dựng giữa ứng dụng và CSDL gốc (Sơ đồ 1). CSDL trung gian này có vai trò mã hóa dữ liệu trƣớc khi cập nhật vào CSDL gốc, đồng thời giải mã dữ liệu trƣớc khi cung cấp cho ứng dụng. CSDL trung gian đồng thời cung cấp thêm các chức năng quản lý khóa, xác thực ngƣời dùng và cấp phép truy cập. Giải pháp này cho phép tạo thêm nhiều chức năng về bảo mật cho CSDL. Tuy nhiên, mô hình CSDL trung gian đòi hỏi xây dựng một ứng dụng CSDL tái tạo tất cả các chức năng của CSDL gốc. Hiện tại, trên thị trƣờng sản phẩm mã hóa CSDL, Secure.Data của công ty Protegrity (www. Protegrity.com) sử dụng mô hình proxy nêu trên. 2/. Sử dụng cơ chế sẵn có trong CSDL Mô hình này giải quyết các vấn đề mã hóa cột dựa trên các cơ chế sau: • Các hàm Stored Procedure trong CSDL cho chức năng mã hóa và giải mã. • Sử dụng cơ chế View trong CSDL tạo các bảng ảo, thay thế các bảng thật đã đƣợc mã hóa. Trong mô hình này, dữ liệu trong các bảng gốc sẽ đƣợc mã hóa, tên của bảng gốc đƣợc thay đổi. Một bảng ảo (View) đƣợc tạo ra mang tên của bảng gốc, ứng dụng sẽ truy cập đến bảng ảo này. 69
  83. 3.4. TẤN CÔNG MÁY TÍNH 3.4.1. Một số dạng tấn công máy tính 1/. Lỗ hổng bảo mật vật lý Một lỗ hổng vật lý của máy tính sẽ hoàn toàn bị khai thác ngay cả khi phƣơng pháp nhận dạng phức tạp nhất, phƣơng pháp mã hóa bảo mật nhất. Một chƣơng trình theo dõi các thao tác trên bàn phím (keylogger), cả phần mềm lẫn phần cứng đƣợc cài đặt, khóa PGP bí mật của chúng ta sẽ bị lộ, do đó mọi dữ liệu mã hóa và tài khoản bị tổn hại. Bất chấp mật khẩu của chúng ta dài và bảo mật đến đâu thì lỗ hổng bảo mật vật lí là một trong những trƣờng hợp nguy hiểm nhất. 2/. Sự chia sẻ không chủ đích Một mật khẩu thƣờng đƣợc chia sẻ cho bạn bè, ông chủ, gia đình trong nhiều hoàn cảnh khác nhau. Một điểm lợi đó là sự thuận tiện cho hai hay nhiều ngƣời để biết một dữ liệu tài khoản nhất định để tiếp cận đƣợc một tài nguyên nào đó. Các mật khẩu có thể đƣợc chia sẻ trong các cuộc nói chuyện với các đồng nghiệp trong việc thảo luận chính sách mật khẩu mới nhất của công ty, hay cách họ chọn mật khẩu, cách họ duy trì chúng. Một trong các phƣơng pháp nguy hiểm và dễ dàng để đạt đƣợc các dữ liệu nhạy cảm bằng cách hỏi họ, bằng phƣơng pháp trực tiếp hay gián tiếp, cái này gọi là social engineering. (Social engineering có thể tóm gọn nhƣ sau: để có đƣợc tài khoản của ngƣời khác ngoài cách sử dụng máy móc hoặc phần mềm, thì có thể sử dụng con ngƣời. ví dụ trên diễn đàn có thể đăng lý do đang sửa chữa, nâng cấp mong chúng ta cung cấp lại tài khoản, hoặc chúng ta nhận đƣợc tin nhắn trúng tiền thƣởng mong hãy cung cấp tài khoản, v.v ) 70
  84. 3/. Bẻ khóa Trong các trƣờng hợp tấn công ngan hàng, các tập tin mật khẩu đƣợc mã hóa của công ty có thể đƣợc phơi bày trƣớc những kẻ tấn công. Nếu xảy ra, những kẻ tấn công bắt đầu bẻ khóa tập tin này, sử dụng tất cả các khả năng kết hợp với ý tƣởng tìm ra những mật khẩu yếu nhất để có thể có những đặc quyền sau này. Trong trƣờng hợp công ty lo ngại mật khẩu bị tổn hại, ngay lập tức công ty thông báo cho mọi nhân viên thay đổi mật khẩu của họ, do đó dù cho các mật khẩu yếu nhất bị lộ, thì nó không còn hiệu lực nữa. Tuy nhiên, nếu công ty không lo mật khẩu bị lộ, họ thƣờng xuyên tự bẻ khóa nhƣ cách những kẻ tấn công đã làm để lọc ra các mật khẩu yếu. 3.4.2. Phòng chống 1/. Sử dụng mật khẩu phức tạp, mã hóa dữ liệu, các file thông tin ngƣời dùng quan trọng trong máy tính. 2/. Sử dụng nhiều phần mềm mã hóa cùng lúc trên máy tính để bảo vệ cho từng loại dữ liệu chuyên biệt 3/. Tuyệt đối không sử dụng máy tính đang chứa những thông tin bí mật để lƣớt web một cách quá thoải mái. 4/. Thiết lập các chính sách bảo mật tổng thể, quản trị dễ dàng, đáp ứng các yêu cầu của ISO/IEC27001, ISMS, ITIL 5/. Xây dựng hệ thống tƣờng lửa vững chắc. 71
  85. 3.5. TẤN CÔNG PHẦN MỀM 3.5.1. Tấn công phần mềm. Lợi dụng sơ hở của những phần mềm ứng dụng để tấn công làm cho chƣơng trình thực thi bị sai hoặc lỗi không thể thi hành. 1/. Các lỗ hổng của Adobe Ngoài Microsoft, Adobe cũng là một hãng sản xuất phần mềm hoạt động trên các máy tính cài Windows. Mọi ngƣời có Flash, Acrobat Reader và Shockwave và chúng đƣợc phần mềm mã độc sử dụng nhƣ một cơ chế để phát tán các thứ độc hại cho ngƣời dùng (tƣơng tự chƣơng trình Adobe hoạt động trên HĐH khác nhƣng đích nhắm tới các máy PC Windows lại chiếm ƣu thế hơn). Nguy hiểm xảy ra đối với ngƣời dùng khi họ sử dụng các phiên bản của chƣơng trình không đƣợc cập nhật hay phiên bản hiện thời có chứa các lỗ hổng chƣa đƣợc vá và sẽ bị lợi dụng nhƣ các lỗ hổng an ninh. Cơ chế hoạt động của chúng là lừa cho ngƣời dùng kích vào một trang web quảng cáo Flash hoặc tài liệu PDF bị nhiễm mã độc tự động mở ra khi ghé thăm vào trang quảng cáo. 2/. Điểm yếu của Firefox Mối đe dọa: Phần mở rộng (add-on) của Firefox là một mối đe dọa bảo mật tiềm ẩn, tuy không đáng sợ nhƣ plug-in ActiveX của IE nhƣng vẫn có nguy cơ cao. Nhiều cuộc tấn công web nhắm vào Firefox, phá hủy các add-on và cấu trúc hỗ trợ cho chƣơng trình. Cơ chế: Hầu hết mối nguy hiểm đến từ add-on đều giả vờ là hợp pháp. Chẳng hạn nhƣ chúng giả vờ là chƣơng trình Adobe Flash Player và yêu cầu ngƣời dùng cập nhật. Điều đó đồng nghĩa với mã độc sẽ thâm nhập vào máy tính của nạn nhân. Hoặc thông qua các tập tin hỗ trợ, chỉnh sửa các chƣơng trình và viết lại truy cập tới các tập tin khác theo mục đích của tin tặc. 72
  86. 3/. Sự đầu độc DNS Mối đe dọa: Các máy chủ DNS có nhiệm vụ dịch các địa chỉ Internet thành tên miền thân thiện với ngƣời dùng. Tuy nhiên, thông tin cung cấp bởi các máy chủ DNS có thể bị tấn công hoặc bị định hƣớng sai. Điều này cho phép kẻ tấn công gửi cho ngƣời dùng bất cứ website nào mà chúng chọn. Cơ chế: Các cuộc tấn công DNS phổ biến nhất khai thác lỗ hổng trong phần mềm máy chủ DNS để cho phép làm giả dữ liệu phân giải tên miền gửi tới khách hàng. Điển hình là vụ đầu độc DNS vào năm 2008 khi nhà nghiên cứu máy tính Dan Kaminsky chứng minh, làm thế nào các tên miền có thể chuyển hƣớng đối với phiên bản BIND hiện nay. BIND là phần mềm đƣợc sử dụng trên hầu hết máy chủ thực hiện phân giải DNS. Kết quả cuối cùng là tin tặc có thể đánh cắp toàn bộ tên miền- bao gồm cả tên miền con của chúng, các máy chủ mail, các bán ghi SPF và mọi thứ khác có thể có trong tài nguyên DNS. 3.5.2. Phòng chống tấn công phần mềm 1/. Luôn cập nhật các bản vá lỗi mới nhất từ nhà sản xuất 2/. Mã hóa, cất giấu các tập tin dữ liệu quan trọng. 3/. Mã hóa phần mềm, xác thực phần mềm. 4/. Khai thác tối ƣu các tính năng bảo mật của mọi thành phần hệ thống. 5/. Cung cấp khả năng tự hồi phục đối với các tấn công 6/. Xây dựng hệ thống tƣờng lửa an toàn. 73
  87. Chương 4. CHƢƠNG TRÌNH THỬ NGHIỆM 4.1. Giao diện chƣơng trình 1/. Giao diện chính 2/. Giao diện chƣơng trình mã hóa tập tin 74
  88. 3/. Giao diện chƣơng trình giải mã tập tin text 75
  89. 4.2. Hƣớng dẫn chạy chƣơng trình 1/. Cài đặt chƣơng trình: Chạy file setup.exe và thực hiện các bƣớc cài đặt Mở chƣơng trình: Start → programe →Baomat_NHTrang → Baomat_NHTrang 2/. Các nút chức năng • Trong giao diện chương trình chính Tạo khóa cho RSA: nút này tạo ra khóa cho RSA để tham gia quá trình mã hóa tập tin khóa. Khi nhấn nút này thì 1 khóa bí mật và một khóa công khai của RSA đƣợc tạo ra. Mã hóa: mở ra giao diện chƣơng trình mã hóa tập tin Giải mã: mở ra giao diện chƣơng trình giải mã tập tin. Thoát: đóng toàn bộ chƣơng trình, kết thúc làm việc. • Trong giao diện chương trình mã hóa tập tin Chọn file text: chỉ đƣờng dẫn đến tập text cần mã hóa. Mã hóa DES: mã hóa tập tin text bằng hệ mã hóa DES. Mã hóa RSA: mã hóa tập tin khóa bí mật của hệ mã DES Thoát: đóng cửa sổ chƣơng trình mã hóa tập tin • Trong giao diện chương trình giải mã tập tin Chọn file text: chỉ đƣờng dẫn đến tập text cần giải mã. Giải mã RSA: giải mã tập tin khóa bí mật của hệ mã DES Giải mã DES: giải mã tập tin text đã đƣợc mã hóa bằng hệ mã hóa DES. Thoát: đóng cửa sổ chƣơng trình giải mã tin • Trong giao diện chương trình Nén dữ liệu Chọn file text: chỉ đƣờng dẫn đến tập text cần nén hoặc giải nén. Nén dữ liệu: nén tập tin text, trong khi nén có sử dụng mã hóa DES byte Giải nén: thực hiện chức năng giải nén tập tin đã nén. 76
  90. 4.3. Môi trƣờng chạy ứng dụng Hệ điều hành Window XP, Windows 7, Phần mềm viết ứng dụng: Microsoft Visual Basic 6.0 Sử dụng thƣ viện API Personal Edition và PKI Toolkit Trial Edition. 77
  91. KẾT LUẬN Trong suốt quá trình làm đồ án tốt nghiệp đƣợc sự giúp đỡ nhiệt tình của các thầy, cô khoa Công nghệ thông tin cùng các bạn trong lớp, đặc biệt là thầy Trịnh Nhật Tiến đã giúp đỡ em hoàn thành đề tài “Tìm hiểu một số dạng tấn công và phòng chống bằng kĩ thuật mật mã” đúng thời hạn. Do thời gian trình độ còn hạn chế và thời gian có hạn do đó bài luận văn của em không tránh khỏi sai sót. Em rất mong nhận đƣợc sự đóng góp ý kiến của thầy cô và các bạn để bài luận văn đƣợc hoàn chỉnh hơn. NHỮNG KẾT QUẢ ĐẠT ĐƢỢC 1/. Tìm hiểu và nghiên cứu lý thuyết: Một số dạng tấn công hệ thống thông tin (thông qua mạng máy tính, hệ điều hành, cơ sở dữ liệu .) • Một số kĩ thuật mật mã. • Nghiên cứu phƣơng pháp phòng chống tấn công bằng kĩ thuật mật mã 2/. Thử nghiệm Chƣơng trình DEMO phòng chống tấn công. 78
  92. TÀI LIỆU THAM KHẢO 1/. Giáo trình An toàn và bảo mật thông tin của PGS.TS Trinh Nhật Tiến. 2/. Tham khảo tài liệu tại các trang web nhƣ: 79