Giáo trình An toàn & bảo mật thông tin - Nguyễn Khanh Văn

pdf 56 trang phuongnguyen 3330
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình An toàn & bảo mật thông tin - Nguyễn Khanh Văn", để 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:

  • pdfgiao_trinh_an_toan_bao_mat_thong_tin_dai_hoc_bach_khoa_ha_no.pdf

Nội dung text: Giáo trình An toàn & bảo mật thông tin - Nguyễn Khanh Văn

  1. Giáo trình An toàn & Bảo mật Thông tin 2012 CHƯƠNG 1 Các khái niệm cơ sở và giới thiệu các hệ mật mã cổ điển 1. Các khái niệm cơ sở Mật mã là một lĩnh vực khoa học chuyên nghiên cứu về các phương pháp và kỹ thuật đảm bảo an toàn và bảo mật trong truyền tin liên lạc với giả thiết sự tồn tại của các thế lực thù địch, những kẻ muốn ăn cắp thông tin để lợi dụng và phá hoại. Tên gọi trong tiếng Anh, Cryptology được dẫn giải nguồn gốc từ tiếng Hy lạp, trong đó kryptos nghĩa là “che dấu”, logos nghĩa là “từ ngữ”. Cụ thể hơn, các nhà nghiên cứu lĩnh vực này quan tâm xây dựng hoặc phân tích (để chỉ ra điểm yếu) các giao thức mật mã (cryptographic protocols), tức là các phương thức giao dịch có đảm bảo mục tiêu an toàn cho các bên tham gia (với giả thiết môi trường có kẻ đối địch, phá hoại). Ngành Mật mã (cryptology) thường được quan niệm như sự kết hợp của 2 lĩnh vực con: 1. Sinh, chế mã mật (cryptography): nghiên cứu các kỹ thuật toán học nhằm cung cấp các công cụ hay dịch vụ đảm bảo an toàn thông tin 2. Phá giải mã (cryptanalysis): nghiên cứu các kỹ thuật toán học phục vụ phân tích phá mật mã và/hoặc tạo ra các đoạn mã giản nhằm đánh lừa bên nhận tin. Hai lĩnh vực con này tồn tại như hai mặt đối lập, “đấu tranh để cùng phát triển” của một thể thống nhất là ngành khoa học mật mã (cryptology). Tuy nhiên, do lĩnh vực thứ hai (cryptanalysis) ít được phổ biến quảng đại nên dần dần, cách hiểu chung hiện nay là đánh đồng hai thuật ngữ cryptography và cryptology. Theo thói quen chung này, hai thuật ngữ này có thể dùng thay thế nhau. Thậm chí cryptography là thuật ngữ ưa dùng, phổ biến trong mọi sách vở phổ biến khoa học, còn cryptology thì xuất hiện trong một phạm vi hẹp của các nhà nghiên cứu học thuật thuần túy. Mặc dù trước đây hầu như mật mã và ứng dụng của nó chỉ phổ biến trong giới hẹp, nhưng với sự phát triển vũ bão của công nghệ thông tin và đặc biệt là sự phổ biến của mạng Internet, các giao dịch có sử dụng mật mã đã trở nên rất phổ biến. Chẳng hạn, ví dụ điển hình là các giao dịch ngân hàng trực tuyến hầu hết đều được thực hiện qua mật mã. Ngày nay, kiến thức ngành mật mã là cần thiết cho các cơ quan chính phủ, các khối doanh nghiệp và cả cho cá nhân. Một cách khái quát, ta có thể thấy mật mã có các ứng dụng như sau: Với các chính phủ: bảo vệ truyền tin mật trong quân sự và ngoại giao, bảo vệ thông tin các lĩnh vực tầm cỡ lợi ích quốc gia. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 1
  2. Giáo trình An toàn & Bảo mật Thông tin 2012 Trong các hoạt động kinh tế: bảo vệ các thông tin nhạy cảm trong giao dịch như hồ sơ pháp lý hay y tế, các giao dịch tài chính hay các đánh giá tín dụng Với các cá nhân: bảo vệ các thông tin nhạy cảm, riêng tư trong liên lạc với thế giới qua các giao dịch sử dụng máy tính và/hoặc kết nối mạng. Những kỷ nguyên quan trọng trong ngành mật mã Thời kỳ tiền khoa học: Tính từ thượng cổ cho đến 1949. Trong thời kỳ này, khoa mật mã học được coi là một ngành mang nhiều tính thủ công, nghệ thuật hơn là tính khoa học. Các hệ mật mã được phát minh và sử dụng trong thời kỳ này được gọi là các hệ mật mã cổ điển. Sau đây ta làm quen với hai ví dụ hệ mã rất nổi tiếng của thời kỳ này. 1. Một phép mã hoá (cipher) trong thời kỳ này là của Xe-da (Caesar's cipher), cách đây 2000 năm: các chữ cái được thay thế bằng các chữ cái cách chúng 3 vị trí về bên phải trong bản alphabet: DASEAR FDHVDU 2. Vernam cipher (1926): người ta đem thực hiện phép XOR văn bản gốc (plaintext) với một chuỗi nhị phân ngẫu nhiên có độ dài bằng độ dài của văn bản gốc (chuỗi này là chính là khoá của phép mã hoá). Trong cipher loại này, khoá chỉ được dùng đúng một lần duy nhất. Vernam tin rằng cipher của ông là không thể phá được nhưng không thể chứng minh được. Kỷ nguyên mật mã được coi là ngành khoa học: được đánh dấu bởi bài báo nổi tiếng của Claude Shannon “Commication theory of secretcy systems” , được công bố năm 1949. Công trình này dựa trên một bài báo trước đó của ông mà trong đó ông cũng đã khai sáng ra ngành khoa học quan trọng khác, lý thuyết thông tin (inforrmation theory). Bài báo năm 1949 của Shannon đã nền móng cho việc áp dụng công cụ toán, cụ thể là xác suất, trong xây dựng mô hình và đánh giá tính mật của các hệ mã mật. Tuy nhiên sự bùng nổ thực sự trong lý thuyết về mật mã (Cryptology) chỉ bắt đầu từ bài báo của hai nhà bác học Diffie và Hellman, “New directions in cryptography”, được công bố vào năm 1976. Trong đó, các ông này đã chứng tỏ rằng trong truyền tin bí mật, không nhất thiết là cả hai bên đều phải nắm khoá bí mật (tức bên gửi phải làm cách nào đó chuyển được khoá mật cho bên nhận). Hơn nữa họ đã lần đầu tiên giới thiệu khái niệm về chữ ký điện tử (digital signature). Mặc dù mật mã có thể coi là một ngành toán học phát triển cao, đòi hỏi tư duy cao để nắm được các thành tựu hiện đại của nó, nhưng cơ sở xuất phát ban đầu của nó lại là một mô hình thực tiễn khá đơn giản như sau. Mô hình truyền tin mật cơ bản TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 2
  3. Giáo trình An toàn & Bảo mật Thông tin 2012 Y=EZ(X) Y X=DZ(Y) Sender S Receiver R Key Z Enemy E Key Z’ Chúng ta xem xét mô hình cơ bản của bài toán truyền tin mật. Khác với quan niệm truyền tin thông thường, mô hình này đưa thêm vào các yếu tố mới, đó là khái niệm kẻ địch ẩn giấu. Vì vậy giải pháp chống lại là sự đưa vào các khối xử lý mã hoá (encryption) và giải mã (decryption). Các hoạt động cơ bản được tóm tắt như sau. Người phát S (sender) muốn gửi một thông điệp (message) X tới người nhận R (receiver) qua một kênh truyền tin (communication channel). Kẻ thù E (enenmy) lấy/nghe trộm thông tin X. Thông tin X là ở dạng đọc được, còn gọi là bản rõ (plaintext). Để bảo mật, S sử dụng một phép biến đổi mã hoá (encryption), tác động lên X, để chế biến ra một bản mã Y (cryptogram, hay ciphertext), không thể đọc được. Ta nói bản mã Y đã che giấu nội dung của bản rõ X bản đầu. Giải mã (decryption) là quá trình ngược lại cho phép người nhận thu được bản rõ X từ bản mã Y. Để bảo mật, các khối biến đối sinh và giải mã là các hàm toán học với tham số khoá (key). Khóa là thông số điều khiển mà sở hữu kiến thức về nó thông thường là hạn chế. Thông thường khoá (Z) chỉ được biết đến bởi các bên tham gia truyền tin S và R. Chú ý: Một quá trình biến đổi không khoá (không phụ thuộc vào một khoá nào cả) chỉ được gọi là một mã (code). Ví dụ: Morse code, ASCII code. Sơ đồ mô hình nói trên cũng thể hiện một điều hết sức cơ bản là toàn bộ tính bảo mật của cơ chế phụ thuộc vào tính mật của khóa, chứ không phải là tính mật của thuật toán hàm sinh hay giải mã (encryption và decryption). Điều này được khẳng định trong Luật Kirchoff, một giả thiết cơ bản của mật mã: Toàn bộ cơ chế sinh mã và giải mã ngoại trừ thông tin về khoá là không bí mật với kẻ thù. Điều này đi ngược với suy luận đơn giản của đa phần những người bên ngoài lĩnh vực. Họ thường cho rằng các thuật toán mật mã cần được giữ bí mật đặc biệt để đảm bảo an toàn cho hệ thống. Câu hỏi: Tại sao? TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 3
  4. Giáo trình An toàn & Bảo mật Thông tin 2012 Như vậy khóa giữ vai trò trung tâm trong mô hình truyền tin mật. Những quan niệm về tổ chức quản lý khóa khác nhau sẽ đem đến những hệ thống mật mã có tính năng có thể hết sức khác nhau. Sau đây chúng ta sẽ xem xét hai hệ loại hệ thống mật mã cơ bản trong đó quan niệm tổ chức và sử dụng khóa là khá tương phản. Hệ thống mật mã đối xứng (Symmetric Key Cryptosystem - SKC). Loại hệ thống này còn gọi là hệ mật mã khóa bí mật (Sycret Key Crytosystem) . Trong mô hình của hệ thống này, khóa của hai thuật toán sinh mã và giải mã là giống nhau và bí mật đối với tất cả những người khác; nói cách khác, hai bên gửi và nhận tin chia sẻ chung một khóa bí mật duy nhật. Vai trò của hai phía tham gia là giống nhau và có thể đánh đổi vai trò, gửi và nhận tin, cho nên hệ thống được gọi là “mã hóa đối xứng”. Chúng ta sẽ sử dụng ký hiệu viết tắt theo tiếng Anh là SKC. Hệ thống mật mã khóa bí mật đối xứng có những nhược điểm lớn trên phương diện quản lý và lưu trữ, đặc biệt bộc lộ rõ trong thế giới hiện đại khi liên lạc qua Internet đã rất phát triển. Nếu như trong thế giới trước kia liên lạc mật mã chỉ hạn chế trong lĩnh vực quân sự hoặc ngoại giao thì ngày nay các đối tác doanh nghiệp khi giao dịch qua Internet đều mong muốn bảo mật các thông tin quan trọng. Với hệ thống khóa bí mật, số lượng khóa bí mật mà mỗi công ty hay cá nhân cần thiết lập với các đối tác khác có thể khá lớn và do đó rất khó quản lý lưu trữ an toàn các thông tin khóa riêng biệt này. Một khó khăn đặc thù khác nữa là vấn đề xác lập và phân phối khóa bí mật này giữa hai bên, thường là đang ở xa nhau và chỉ có thể liên lạc với nhau qua một kênh truyền tin thông thường, không đảm bảo tránh được nghe trộm. Với hai người ở xa cách nhau và thậm chí chưa từng biết nhau từ trước thì làm sao có thể có thể thiết lập được một bí mật chung (tức là khóa) nếu không có một kênh bí mật từ trước (mà điều này đồng nghĩa với tồn tại khóa bí mật chung)? Có vẻ như chẳng có cách nào ngoài sử dụng “thần giao cách cảm” để hai người nay có thể trao đổi, thiết lập một thông tin bí mật chung? Đây là một thách thức lớn đối với hệ thống mật mã khóa đối xứng. Tuy nhiên độc giả sẽ thấy câu hỏi này có thể được trả lời bằng giao thức mật mã thiết lập khóa mà sẽ được giới thiệu ở các chương sau này. Hệ thống mật mã khóa công khai hay phi đối xứng (Public Key Cryptosystem – PKC). Ý tưởng về các hệ thống mật mã loại này mới chỉ ra đời vào giữa những năm bảy mươi của thế kỷ 20. Khác cơ bản với SKC, trong mô hình mới này 2 khóa của thuật toán sinh mã và giải mã là khác nhau và từ thông tin khóa sinh mã, mặc dù trên lý thuyết là có thể tìm được khóa giải TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 4
  5. Giáo trình An toàn & Bảo mật Thông tin 2012 mã (có thể thử vét cạn) nhưng khả năng thực tế của việc này là hầu như bằng không (bất khả thi về khối lượng tính toán). Chúng ta sẽ làm quen cụ thể với mô hình này trong chương 3. Ý tưởng mới này cho phép mỗi thực thể cá nhân công ty chỉ cần tạo ra cho mình một cặp khóa, với hai thành phần: Thành phần khóa công khai, có thể đăng ký phổ biến rộng khắp, dùng để sinh mã hoặc để xác thực chữ ký điện tử (cụ thể trong chương 3). Thành phần khóa bí mật, chỉ dành riêng cho bản thân, dùng để giải mã hoặc tạo ra chữ ký điện tử. Chỉ với cặp khóa này, thực thể chủ có thể giao dịch bảo mật với quảng đại xã hội, trong đó việc quản lý và lưu trữ có thể được tổ chức chặt chẽ mà việc phải tự nhớ thông tin mật là tối thiểu (giống như việc chỉ nhớ 1 mật khẩu hay một số PIN tài khoản ngân hàng). Đánh giá tính bảo mật của các hệ mật mã. Các thuật toán, hệ thống mật mã được biết đến trên thế giới là không ít. Làm sao để ta có thể đánh giá được tính an toàn, hay tính bảo mật của mỗi một hệ mã đặt ra? Trên cơ sở nào chúng ta có thể thiết lập niềm tin nhiều hoặc không nhiều vào một hệ mã nào đó? Ta có thể kết luận một hệ mã mật là không an toàn (insecure), bằng việc chỉ ra cách phá nó trong một mô hình tấn công (khái niệm sẽ giới thiệu sau đây) phổ biến, trong đó ta chỉ rõ được các mục tiêu về ATBM (security) không được đảm bảo đúng. Tuy nhiên để kết luận rằng một hệ mã là an toàn cao thì công việc phức tạp hơn nhiều. Thông thường, người ta phải đánh giá hệ mật mã này trong nhiều mô hình tấn công khác nhau, với tính thách thức tăng dần. Để có thể khẳng định tính an toàn cao, cách làm lý tưởng là đưa ra một chứng mình hình thức (formal proof), trong đó người ta chứng minh bằng công cụ toán học là tính ATBM của hệ mã đang xét là tương đương với một hệ mã kinh điển, mà tính an toàn của nó đã khẳng định rộng rãi từ lâu. Như đã nói trên, người ta phủ định tính an toàn của một hệ mã mật thông qua việc chỉ ra cách phá cụ thể hệ mã này trên một mô hình tấn công (attack model) cụ thể. Mỗi mô hình tấn công sẽ định nghĩa rõ năng lực của kẻ tấn công, bao gồm năng lực tài nguyên tính toán, loại thông tin mà nó có khả năng tiếp cận để khai thác và khả năng tiếp xúc với máy mật mã (thiết bị phần cứng có cài đặt thuật toán sinh và giải mã). Các mô hình tấn công thường được sắp xếp theo thứ tự mạnh dần của năng lực kẻ tấn công. Nếu một hệ mật mã bị phá vỡ trong một mô hình tấn công căn bản (năng lực kẻ tấn công là bình thường) thì sẽ bị đánh giá là hoàn toàn không an toàn. Sau đây là một số mô hình tấn công phổ biến. Tấn công chỉ-biết-bản-mã (ciphertext-only attack). Ở đây kẻ địch E chỉ là một kẻ hoàn toàn bên ngoài, tìm cách nghe trộm trên đường truyền để lấy được các giá trị Y, bản mã của thông tin gửi TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 5
  6. Giáo trình An toàn & Bảo mật Thông tin 2012 đi. Mặc dù kẻ địch E chỉ biết các bản rõ Y, nhưng mục tiêu nó hướng tới là khám phá nội dung một/nhiều bản rõ X hoặc lấy được khóa mật Z (trường hợp phá giải hoàn toàn). Đây là mô hình tấn công căn bản nhất trong đó kẻ địch không có năng lực quan hệ đặc biệt (như một số hình thức tấn công sau), diện thông tin tiếp xúc chỉ là các bản mã. Rõ ràng nếu một hệ mã mà không đứng vững được trong mô hình này thì phải đánh giá là không đáng tin cậy. Tấn công biết-bản-rõ (known-plaintext attack). Mặc dù tên gọi hơi dễ hiểu nhầm, thực chất trong mô hình này ta chỉ giả thiết là E có thể biết một số cặp X-Y (bản rõ và bản mật tương ứng) nào đó. Nguyên nhân E thu được có thể hoàn toàn tình cờ hoặc nhờ một vài tay trong là nhân viên thấp cấp trong hệ thống. Tất nhiên mục tiêu của E là khám phá nội dung các bản rõ quan trọng khác và/hoặc lấy được khóa mật. Rõ ràng mô hình tấn công này làm mạnh hơn so với tấn công chỉ qua bản mã: Việc biết một số cặp X-Y sẽ làm bổ sung thêm đầu mối phân tích; đặc biệt từ bây giờ E có thể dùng phép thử loại trừ để vét cạn không gian khóa (exshautive key search) và tìm ra khóa đúng tức là sao cho Enc (K,X)=Y. Tấn công bản-rõ-chọn-sẵn (chosen-plaintext attack). Trong mô hình này, không những E thu nhặt được một số cặp X-Y mà một số bản rõ X do bản thân E soạn ra (chosen plaintext). Điều này thoạt nghe có vẻ không khả thi thực tế, tuy nhiên ta có thể tưởng tượng là E có tay trong là một thư ký văn phòng của công ty bị tấn công, ngoài ra do một qui định máy móc nào đó tất cả các văn bản dù quan trọng hay không đều được truyền gửi mật mã khi phân phát giữa các chi nhánh của công ty này. Có thể nhận xét thấy rằng, việc được tự chọn giá trị của một số bản rõ X sẽ thêm nhiều lợi ích cho E trong phân tích quan hệ giữa bản mã và bản rõ để từ đó lần tìm giá trị khóa. Một cách tương tự, người ta cũng sử dụng mô hình tấn công bản-mã-chọn-sẵn (chosen- ciphertext attack) trong đó kẻ địch có thể thu nhặt được một số cặp X-Y mà Y là giá trị được thiết kế sẵn. Trong thực tế điều này có thể xảy ra nếu như kẻ địch có thể truy nhập được vào máy mật mã 2 chiều (có thể sử dụng với cả 2 chức năng là sinh mã và giải mã). Tất nhiên cả hai dạng tấn công rất mạnh nói trên kẻ thù đều có thể khôn ngoan sử dụng một chiến thuật thiết kế bản rõ (hay bản mã) chọn sẵn theo kiểu thích nghi (adaptive), tức là các bản rõ chọn sau có thể thiết kế dựa vào kiến thức phân tích dựa vào các cặp X-Y đã thu nhặt từ trước. Để đánh giá tính an toàn của một hệ mã mật (khi đã áp vào 1 hay 1 số mô hình tấn công cụ thể) người ta có thể áp dụng một trong các mô hình đánh giá với các mức độ mạnh đến yếu dưới đây: Bảo mật vô điều kiện (unconditional security): Đây là mô hình đánh giá ATBM mức cao nhất, trong đó “vô điều kiện” được hiểu theo ý nghĩa của lý thuyết thông tin (information theory), TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 6
  7. Giáo trình An toàn & Bảo mật Thông tin 2012 trong đó các ý niệm về “lượng tin” được hình thức hóa thông qua các phép toán xác suất. Trong mô hình này, kẻ địch được coi là không bị hạn chế về năng lực tính toán, tức là có thể thực hiện bất kỳ khối lượng tính toán cực lớn nào đặt ra trong khoảng thời gian ngắn bất kỳ. Mặc dù có năng lực tính toán siêu nhiên như vậy, mô hình này chỉ giả thiết kẻ tấn công là người ngoài hoàn toàn (tức là ứng với mô hình tấn công chỉ-biết-bản-mã). Một hệ mật mã đạt được mức an toàn vô điều kiện, tức là có thể đứng vững trước sức mạnh của một kẻ địch bên ngoài (chỉ biết bản mã) có khả năng không hạn chế tính toán, được gọi là đạt đến bí mật tuyệt đối (perfect secretcy). Một cách khái quát, việc nghe trộm được bản mã đơn giản là chỉ cung cấp một lượng kiến thức zero tuyệt đối, không giúp gì cho việc phá giải mã của kẻ địch. Việc biết bản mã không đem lại chút đầu mối gì cho khả năng lần tìm ra khóa của hệ mã. Câu hỏi: Tại sao không thể đặt một giả thiết mạnh hơn nữa là kẻ địch có thể sử dụng tấn công biết-bản-rõ? Bảo mật chứng minh được (provable security): Đây cũng là một mô hình đánh giá mức rất cao, lý tưởng trong hầu hết các trường hợp. Một hệ mật mã đạt được mức đánh giá này đối với một mo hình tấn công cụ thể nào đó, nếu ta có thể chứng mình bằng toán học rằng tính an toàn của hệ mật là được qui về tính NP-khó của một bài toán nào đó đã được biết từ lâu (ví dụ bài toán phân tích ra thừa số nguyên tố, bài toán cái túi, bài toán tính logarit rời rạc ). Nói một cách khác ta phải chứng minh được là kẻ thù muốn phá được hệ mã thì phải thực hiện một khối lượng tính toán tương đương hoặc hơn với việc giải quyết một bài toán NP-khó đã biết. Bảo mật tính toán được, hay bảo mật thực tiễn (computational security hay practical security): Đây là một trong những mức đánh giá thường được áp dụng nhất trong thực tế (khi những mức bảo mật cao hơn được cho là không thể đạt tới). Khi đánh giá ở mức này với một hệ mã cụ thể, người ta lượng hóa khối lượng tính toán đặt ra để có thể phá hệ mã này, sử dụng kiểu tấn công mạnh nhất đã biết (thường kèm theo đó là mô hình tấn công phổ biến mạnh nhất). Từ việc đánh giá được khối lượng tính toán này cùng thời gian thực hiện (với năng lực kẻ địch mạnh nhất có thể trên thực tế), và so sánh với thời gian đòi hỏi đảm bảo tính mật trên thực tế, ta có thể đánh giá hệ mã có đạt an toàn thực tiễn cao hay không. Đôi khi, cơ sở đánh giá cũng dựa vào một bài toán khó nào đó mặc dù không đưa ra được một chứng minh tương đương thực sự. Ví dụ: Giả thiết một hệ mã X được sử dụng mã mật các loại văn bản hợp đồng có giá trị sử dụng trong 2 năm. Nếu như kẻ địch có năng lực tính toán mạnh nhất có thể cũng phải mất thời gian đến 20 năm để phá được (chẳng hạn sử dụng toàn bộ lực lượng tính toán của các công ty IT lớn TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 7
  8. Giáo trình An toàn & Bảo mật Thông tin 2012 như Microsoft hay Google), hệ mã X này có thể được đánh giá là đảm bảo mức an toàn thực tiễn. Bảo mật tự tác (ad hoc security): Một số hệ mật mã riêng được một số công ty hoặc cá nhân tự chế để phục vụ mục đích đặc biệt dùng nội bộ. Tác giả loại hệ mật mã có thể sử dụng những lập luận đánh giá hợp lý nhất định dựa trên việc ước đoán khối lượng tính toán của kẻ địch khi sử dụng những tấn công mạnh nhấn đã biết và lập luận về tính bất khả thi thực tiễn để thực hiện. Mặc dù vậy hệ mật mã này vẫn có thể bị phá bởi những tấn công có thể tồn tại mà chưa được biết tới đến thời điểm đó; vì vây, thực tế bảo mật ở mức này hàm nghĩa không có một chứng minh đảm bảo thực sự, nên không thể coi là tin cậy với đại chúng. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 8
  9. Giáo trình An toàn & Bảo mật Thông tin 2012 2. Một số hệ mật mã cổ điển Việc nghiên cứu các hệ mã mật (cipher) cổ điển là cần thiết để qua đó chúng ta có thể làm quen với các nguyên tắc cơ bản trong thiết kế và phân tích các hệ mật mã nói chung. Mật mã một bảng thế (Monoalphabetic cipher) Ở đây thuật toán dựa trên phép hoán vị trong một bảng chữ cái alphabet. Ví dụ 1.1. Một cipher dựa trên một bảng hoán vị của tiếng Anh như sau a b c d e x y z F G N T A K P L Qua bảng biến đổi có thể thấy a F, b G Qua đó sẽ có Plaintext: a bad day Ciphertext: F GFT TFP Như vậy khoá trong một cipher loại này là một bảng hoán vị (A F, b G, , z L) như trên, hoặc biểu diễn ngắn gọn hơn là bằngdòng thứ hai của phép biến đổi này, tức là FGNT PL. Dòng thứ nhất của bảng biến đổi này là bảng chữ cái gốc, vì nó là cố định nên không được tính tới trong khoá. Dòng thứ hai, được gọi là bảng thay thế (substitution alphabet). Chú ý rằng không nhất thiết phải dùng một bảng chữ cái mà ta có thể dùng bất cứ một thứ bảng ký hiệu nào đó. Ví dụ 1.2. Ở đây bảng chữ bản rõ, plaintext alphabet, là một tập hợp của các xâu nhị phân với độ dài là 3. Bảng biến đổi: p.text 000 001 010 011 100 101 110 111 c.text 101 111 000 110 010 100 001 011 Do đó xâu nhị phân plaintext 100101111 sẽ được mã hoá thành 010100011. Để giải mã một bản rõ nhận được từ thuật toán mật mã trên, người có bản mã ciphertext cần biết khóa, do đó yêu cầu một giao thức về trao khoá. Đơn giản nhất có thể thực hiện là người gửi tin ghi khoá ra đĩa và chuyển đĩa cho người nhận. Rõ ràng cách làm này đơn giản nhưng thực tế không an toàn. Trong thực tế người ta sử dụng nhiều giao thức phức tạp và tinh vi hơn. Nếu như kẻ thù không biết được khoá thì liệu chúng có thể đoán được không ? Hiển nhiên là điều đó phụ thuộc vào số lượng khoá có thể có (độ lớn của không gian khoá có thể có). Nếu TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 9
  10. Giáo trình An toàn & Bảo mật Thông tin 2012 kích thước của bảng alphabet là N thì số khoá có thể là N! =N(N-1) 1 và được tính xấp xỉ theo công thức: N! (2πn)1/2(n/e)n Cho N=26, ta có N!=26! 926. Chú ý rằng, số lượng bit được chuyển mật này được gọi là chiều dài của khoá. Ví dụ 1.3. Chiều dài khoá của một cipher loại đang xét là 26*5=130 bits, chính là số lượng bit tin cần dùng để chuyển đi dòng thứ hai trong bảng chuyển vị trên. (Dòng thứ nhất đã được ngầm định là ABC XYZ, nên không cần chuyển). Chú ý: Không phải tất cả các cipher như trên là che giấu được nội dung của thông tin. Ví dụ 1.4: Sau đây là một cipher hầu như không làm thay đổi plaintext. a b c d e x y z A B C D E X Z Y Mật mã cộng (Additive cipher) - Mật mã Xeda (Ceasar) Mật mã cộng (Additive cipher) là một mật mã một bảng thế đặc biệt trong đó, phép biến đổi mã được biểu diễn thông qua phép cộng đồng dư như sau. Giả sử ta gán các giá trị từ A-Z với các số 1-25,0. Thế thì một chữ plaintext X có thể mã thành ciphertext Y theo công thức: Y = X  Z, trong đó Z là giá trị của khoá,  là ký hiệu phép cộng đồng dư modulo 26. Ví dụ 1.5 Xét mật mã một bảng thế sau đây: a b c d e x y z DE F G H A B C Đây chính là mật mã Ceasar đã giới thiệu từ đầu chương, trong đó giá trị khóa là Z=3: D=a 3, E=b 3, A=x 3, B=y 3, C=z 3 Rõ ràng số lượng khoá có thể dùng được chỉ là 25 và số lượng bít cần thiết cho việc chuyển khoá là 5 (24 < 25<25). Có thể thấy rằng mật mã cộng có một không gian khoá rất nhỏ, do đó phép tìm kiếm vét cạn đương nhiên là khả thi. Trong phép tấn công này, địch thủ chỉ cần thử tất cả các khoá có thể (1-25) để thử giải mã và dễ dàng phát hiện ra khoá đúng khi giải ra một thông tin có nghĩa. Vì phép tìm kiếm này không cần sử dụng các quan sát tinh tế mà chỉ đơn giản là thử hết các khả năng, dựa vào sức mạnh tính toán của kẻ tấn công, nên nó cũng còn được biết với cái tên tấn công vũ lực (brute force attack) Mật mã nhân tính (multiplicative cipher) TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 10
  11. Giáo trình An toàn & Bảo mật Thông tin 2012 Bảng thế cũng có thể được xây dựng từ phép nhân đồng dư của chữ cái trong bảng gốc với giá trị của khóa: Y=XZ Trong đó  là phép nhân đồng dư với modul 26. Tuy nhiên chú ý rằng không phải tất cả các giá trị từ 1-25 đều có thể là khoá mà chỉ các giá trị nguyên tố cùng nhau với 26, tức là các số lẻ trừ 13. Do đó chỉ có 12 khoá cả thảy mà thôi. Ví dụ 1.6. Nếu ta dùng khóa Z=2 2  1 = 2 mod 26 tức là b c. nhưng 2  14 = 2 mod 26 tức là o c Rõ ràng khoá 2 không thoả mãn, vì không tạo ra ánh xạ 1-1 từ bảng chữ gốc sang bảng thay thế. Sự kiện đồng thời có b c, và o c sẽ làm cho ta không thể giải mã ciphertext c. Để tăng số lượng khoá có thể, người ta có thể kết hợp cả additive cipher và multiplicative cipher để tạo ra afine cipher: Y =  X  Z X, Y, Z { 0,1,2,3, 25} { 1,3,5,7,9,11,15,17,19,21,23,25} Như vậy số lượng khoá sẽ là 12 * 26 = 312; tuy nhiên vẫn quá nhỏ đối với phép tìm kiếm vét cạn. Qua những khảo sát trên ta có thể dễ dàng thấy các dạng đặc biệt của mật mã bảng thế (trong đó phép biến đổi mật mã là một hàm toán học đơn giản) là không an toàn ngay cả với tấn công tìm kiếm vét cạn. Tuy nhiên mật mã một bản thế tổng quát, sử dụng một hoán vị bất kỳ trên bảng chữ cái gốc, có không gian khóa là thường là đủ lớn để chống lại bất kỳ kẻ địch nào (ngay cả trong thế giới hiện đại) chỉ dùng tấn công vét cạn cụ thể là với bảng chữ cái tiếng Anh (26 chữ), số lượng hoán vị có thể (tức số lượng khóa cần vét cạn) sẽ lên tới 26! 926! Trong thời kỳ thiên nhiên kỷ đầu tiên (trước năm 1000), mật mã một bảng thế được coi là không thể phá được. Tuy nhiên sau đó, các nhà nghiên cứu thời đó đã dần dần tìm ra phương pháp phá giải tốt hơn việc thử vét cạn không gian khóa; phương pháp này dựa trên những quan sát mang tính thông kê, chẳng hạn về sự xuất hiện không đồng đều của các chữ cái trong ngôn ngữ tự nhiên. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 11
  12. Giáo trình An toàn & Bảo mật Thông tin 2012 Phân tích giải mã theo phương pháp thống kê ( Statistical cryptanalysis) Dễ dàng quan sát một đặc tính của ngôn ngữ tự nhiên là sự xuất hiện (tần xuất) không đều của các chữ cái được dùng khi diễn đạt một ngôn ngữ. Ví dụ 1.7 Hãy theo dõi một đoạn văn bản sau đây trong tiếng Anh. THIS IS A PROPER SAMPLE FOR ENGLISH TEXT. THE FREQUENCIES OF LETTERS IN THIS SAMPLE IS NOT UNIFORM AND VARY FOR DIFFERENT CHARACTERS. IN GENERAL THE MOST FREQUENT LETTER IS FOLLOWED BY A SECOND GROUP. IF WE TAKE A CLOSER LOOK WE WILL NOTICE THAT FOR BIGRAMS AND TRIGRAMS THE NONUNIFORM IS EVEN MORE. Ở đây ta dễ dàng thấy tần suất xuất hiện của chữ cái X và A: fx=1 và fA=15. Khái quát hơn, trong tiếng Anh căn cứ vào tần xuất xuất hiện của các chữ cái trong văn viết, ta có thể chia 26 chữ cái thành 5 nhóm theo thứ tự từ hay dùng hơn đến ít dùng hơn như sau: I e II t,a,o,i,n,s,h,r III d,l VI c,u,m,w,f,g,y,p,b V v,k,j,x,q,z Với những quan sát tương tự áp dụng cho các cặp (bigrams) hay bộ ba chữ (trigram), người ta thấy tần xuất cao nhất rơi vào các cụm phổ biến sau: Th, he, in, an, re, ed, on, es, st, en at, to The, ing, and, hex, ent, tha, nth, was eth, for, dth. Chú ý: Những quan sát này được phản ánh trên chính đoạn văn bản ví dụ tiếng Anh ở trên. Những quan sát này chỉ đúng với tiếng Anh và như vậy tiếng Việt của chúng ta sẽ có qui luật khác. Sau khi đã có các quan sát như trên, người ta có thể dùng phương pháp đoán chữ và giải mã dựa trên việc thống kê tần xuất xuất hiện các chữ cái trên mã và so sánh với bảng thống kê quan sát của plaintext. Ví dụ sau đây sẽ minh họa cụ thể phương pháp này Ví dụ 1.8 Giả sử ta thu được một đoạn mã một bảng thế như sau và cần phải giải tìm khóa của nó. YKHLBA JCZ SVIJ JZB TZVHI JCZ VHJ DR IZXKHLBA VSS RDHEI DR YVJV LBXSKYLBA YLALJVS IFZZXC CVI LEFHDNZY EVBLRDSY JCZ FHLEVHT HZVIDB RDH JCLI CVI TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 12
  13. Giáo trình An toàn & Bảo mật Thông tin 2012 WZZB JCZ VYNZBJ DR ELXHDZSZXJHDBLXI JCZ XDEFSZQLJT DR JCZ RKBXJLDBI JCVJ XVB BDP WZ FZHRDHEZY WT JCZ EVXCLBZ CVI HLIZB YHVEVJLXVSST VI V HXXIKSJ DR JCLI HZXZBJ YZNZXDFEZBJ LB JZXCBDSDAT EVBT DR JCZ XLFCZH ITIJZEIJCVJ PZHZ DBXZ XDBILYXHZYIZKHZ VHZBDP WHZVMVWSZ. Đoạn mã trên bao gồm 338 chữ, thống kế tần xuất như sau: Letter: A B C D E F G Frequency: 5 24 19 23 12 7 0 Letter: H I J K L M N Frequency: 24 21 29 6 21 1 3 Letter: O P Q R S T U Frequency: 0 3 1 11 14 8 0 Letter: V W X Y Z Frequency: 27 5 17 12 45 Quan sát Z là chữ mã có tần suất lớn hơn hẳn các chữ cái còn lại nên rút ra: e Z (tức là bản rõ của mã Z phải là e) Quan sát những chữ mã có tần suất cao tiếp theo fj = 29, fv = 27 Đồng thời chú ý đến bộ ba jcz có tần suất cao, dễ thấy fjcz = 8 t J, h C (suy luận jcz chính là từ bản rõ the) Ngoài ra tiếp tục quan sát ta sẽ thấy một số phát hiện dễ nhận: a V (đứng riêng, mạo từ a) Liệt kê nhóm II gồm các chữ mã có tần suất xuất hiện cao (nhóm 1 là chỉ gồm Z) J,V,B,H,D,I,L,C ứng với bản rõ của nhóm II: {t,a,o,i,n,s,h,r} t,a h Quan sát thấy có một cụm 3 là JZB ( teB), ta sẽ tìm nốt bản rõ của B bằng cách đơn giản sau: thay thế các khả năng nhóm 2 của B vào cụm này: teo ten JZB = te ? ter n B the tes Tương tự ta thực hiện một số quan sát và suy đoán khác VI = a ? as an s I (n đã có B rồi) VHZ = a ?e ate are r H (t đã có J rồi) TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 13
  14. Giáo trình An toàn & Bảo mật Thông tin 2012 JCLI = th?s i L, Cuối cùng còn lại trong nhóm II: o D a b c d e f g h i j V Z C L k l m n o p q r s t B D HI J u v w x y z Tiếp tục phân tích nhờ các cụm từ (bản mã) tương đối ngắn: DBXZ = on?e c X WZZB = ?een = b W YVJV = ?ata d Y Tuy nhiên cũng có trường hợp không chắc chắn: on: loại vì n B rồi DR = o ? of: or: loại vì r H rồi ox : Nhưng chưa rõ ràng: f, x R Tiếp tục một số luận đoán: WT = b ? y T BDP = no ? w P Bây giờ từ đầu tiên sẽ là YKHLBA = d-rin- u K, g A Rõ ràng qua ví dụ trên ta thấy hệ mật mã một bảng thế có thể khá dễ dàng bị phá khi nó vẫn tiếp tục “bảo tồn” trong bản mã những qui luật ngôn ngữ trong bản rõ. Những qui luật này biểu hiện bằng những đặc thù thống kê thu được khi phân tích mỗi ngôn ngữ tự nhiên. Một cách tổng quát, một hệ mã mật tốt cần phải tránh không cho các qui luật thống kê trong ngôn ngữ văn bản rõ bảo tồn ở một hình thức nào đó trong bản mã. Một cách lý tưởng, các bản mã của một hệ mã tốt sẽ không thể phân biệt được bằng thống kê khi với một mã sinh ngẫu nhiên. Phương pháp bằng phẳng hoá đồ thị tần suất Khoảng đầu thiên nhiên kỷ thứ hai, mật mã một bảng thế đã bị phá và các nhà khoa học đã dần nghĩ đến các nguyên tắc thiết kế mã tốt hơn, nhằm tránh bảo tồn các qui luật thống kê từ TIN sang MÃ (bản rõ sang bản mã). Ta sẽ xem xét một số mã như vậy sau đây. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 14
  15. Giáo trình An toàn & Bảo mật Thông tin 2012 Mã với bảng thế đồng âm (homophonic substitution ciphers) Trong các cipher loại này, ánh xạ chữ cái TIN- MÃ không còn là 1-1 nữa mà là một-nhiều. Tức là mỗi chữ của bảng chữ cái tin sẽ được mã hoá thành 1 chữ trong 1 tập con các chữ mã nào đó. Mỗi chữ mã trong tập con này được gọi là homophone, tạm dịch là đồng âm. VD1.9 Chữ tin Đồng âm A 17 11 25 64 2 19 4 31 I 22 95 14 21 79 54 L 12 93 71 N 64 13 O 65 28 15 P 23 73 36 53 20 T 41 E 64 7 8 47 (15 đồng âm) Như vậy có thể thấy đây là một bảng biến đổi từ chữ tin sang đồng âm mã. Tin P l a i n p i l o t Mã 27 12 11 53 64 36 79 71 15 41 Thông thường người ta bố trí số lượng đồng âm ứng với mỗi chữ tin tỷ lệ với tần xuất xuất hiện của chữ đó trong ngôn ngữ tự nhiên. Vì vậy đồ thị tần xuất của các chữ cái trong bản mã sẽ trở nên bằng phẳng. Mặc dù các cipher loại này là khó phá hơn nhưng chúng lại bị tăng thêm độ dư thừa so với tin gốc. BT. Hãy giải thích tại sao ĐTTX của các cipher loại này là bằng phẳng và tại sao mã lại có dư thừa. Sử dụng nhiều bảng thế (mã đa bảng thế) VD 1.10 Xét một hệ mã đơn giản với bảng chữ gồm 4 chữ cái {a,b,c,d} Giả sử tần xuất xuất hiện của mỗi chữ trong ngôn ngữ như sau: Pa = 0.5, Pb =0.05, Pc = 0.2, Pd = 0.25 Ta dùng hai bảng thế và một chuỗi khóa để quyết định thứ tự hòa trộn hai bảng thế này. Bảng thế 1 a b c d P.text alphabet B D A C C. text alphabet TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 15
  16. Giáo trình An toàn & Bảo mật Thông tin 2012 Bảng thế 2 P.text alph a b c d C.text alph D B C D Tạo mã bằng phương pháp trộn 2 bảng thế theo khóa “12” X : aba cada da ca baa Z : 121 2121 21 21 212 Y : BBB CBAB AB CB BBD Ở ví dụ trên người ta đã hoà trộn hai bảng thế liên tục kế tiếp nhau. Nhờ đó phân bố tần xuất xuất hiện của các chữ mã sẽ bị thay đổi so với tin và bằng phẳng hơn. Mã đa bảng thế (polyalphabetic cipher) Trong hệ mã thể loại này, người ta dùng nhiều bảng thế theo phương pháp vừa giới thiệu trên. Ta sẽ xét một hệ cipher cổ điển nổi tiếng loại này sau đây. Vigenere cipher Trong Vigenere Cipher, người ta dùng tất cả 26 bảng thế là sự thu được từ bảng gốc chữ cái tiếng Anh mà dịch đi từ 0-25 vị trí. Sự hoà trộn này có quy luật hoàn toàn xác định bởi khoá. Mỗi chữ của khoá sẽ xác định mỗi bảng thế được dùng. a b c d e f g h i j k l m n o p q r s t u v 0 A B C D E F G H I J K L M N O P Q R S T U V 1 B C D E F G H I J K L M N O P Q R S T U V W 2 C D E F G H I J K L M N O P Q R S T U V W X 3 D E F G H I J K L M N O P Q R S T U V W X Y 4 E F G H I J K L MN O P Q R S T U V W X Y Z 5 F G H I J K L MN O P Q R S T U V W X Y Z A 6 G H I J K L MN O P P R S T U V W X Y Z A B 24 Y Z A B C D E F G H I J K L MN O P Q R S T 25 Z A B C D E F G H I J K L MN O P Q R S T U Ví dụ 1.11 keyword : r a d i o r a d i o r a plaintext : c o d e b r e a k i n g ciphertext : T O G M P I E D S W E G Như ở ví dụ trên, tất cả các chữ đứng ở vị trí chia 5 dư 1 trong plaintext sẽ được mã hoá bởi bảng thế R (a thành R). Tất cả các chữ tin đứng ở vị trí chia 5 dư 2 trong TIN sẽ được mã hoá bởi bảng thế A, vv TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 16
  17. Giáo trình An toàn & Bảo mật Thông tin 2012 Mặc dù có thể làm bằng phẳng tần xuất rất tốt, mật mã đa bảng thế nói chung, Vigenère nói riêng, vấn có thể phá giải được. Phương pháp giải mã Vigenere. Ý tưởng của phương pháp này gồm 3 bước như sau: 1. Đi tìm chu kỳ p (độ dài khoá) 2. Chia tách MÃ thành p đoạn phân mã, mỗi đoạn bao gồm các chữ ở vị trí kp+i (k=1,2,3 ; i=0,p-1), tức là được mã hoá theo bảng thế với chữ khoá chỉ số i. 3. Dùng phương pháp một bảng thế đã biết để giải từng đoạn phân mã (cụ thể là với mã Vigenere chỉ cần một phép dịch đúng) Người ta sử dụng khái niệm IC (Index of Coincidence) để tính chu kỳ p. Theo định nghĩa, IC xác định qua công thức: 25  i=0 fi (fi -1) IC = n(n-1) Trong đó f là xác xuất của phép thử - nhặt ra 2 con chữ ngẫu nhiên bất kỳ từ trong một đoạn văn bản - để thu được cùng một chữ  cho trước. Số bảng thế (p) 1 2 3 4 5 10 IC 0.068 0.052 0.047 0.044 0.043 0.041 IC của văn bản tiếng Anh (p=1) đạt gia trị 0.068. Khi qua mã hoá, IC sẽ giảm dần đi khi tăng dần số lượng bảng thế (hay tăng chiều dài khoá). Qua đó ta thấy IC thể hiện độ không đồng đều của các tần xuất xuất hiện các chữ cái. Trong văn bản gốc, độ không đồng đều (lồi lõm) là lớn TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 17
  18. Giáo trình An toàn & Bảo mật Thông tin 2012 nhất nên IC là lớn nhất. Còn khi mã hoá với nhiều bảng thế, đồ thị tần xuất được làm "bằng phẳng hoá" nên tất nhiên IC giảm đi. Phương pháp thực hành 1. Đặt k=1 2. Kiểm tra xem p có phải nhận giá trị k hay không. 2.a. Chia Mã thành k phân mã và tính IC của các phân mã. 2.b. Nếu như chúng đều xấp xỉ nhau và đều xấp xỉ 0.068 thì p=k Nếu chúng khác nhau nhiều và nhỏ hơn nhiều so với 0.068 thì p>k 3. Tăng k lên một đơn vị và lặp lại bước 2. BT. Hãy so sánh IC của một bản rõ M và IC của một mã ngẫu nhiên R có cùng độ dài. Lập luận để giải thích chặt chẽ. One-time-pad (Vernam cipher) Mật mã One-time-pad được đề xuất bởi G. Vernam (1917); sau đó đã được chứng minh là đảm bảo bí mật tuyệt đối (perfect secretcy - 1949). Như tên gọi của nó, trong One-time-pad khóa được viết trên 1 băng (tape) dài, và sử dụng đúng 1 lần. Đồng thời chuỗi khóa là chuỗi văn bản sinh ngẫu nhiên, có độ dài bằng văn bản sử dụng hoặc hơn. Thao tác mã hóa đơn giản là phép dịch theo bảng thế ứng với chữ khóa tương ứng hoặc XOR nếu xử lý theo chuỗi nhị phân. Sinh mã: Y = X + Z (mod 26) Giải mã : X = Y - Z (mod 26) Vì vậy, One-time-pad có thể coi là mã Vigenere với khóa là một chuỗi ngẫu nhiên có độ dài đúng bằng văn bản, như ví dụ sau sẽ cho thấy VD 1.12 X: X n t f u h b z t Z: A s u n n y d a y Y: Y G O I I G F A S Ở đây A được hiểu là dịch 1 nên X+A=Y Chú ý rằng khóa chỉ được dùng đúng một lần, tức là vứt bỏ sau khi dùng. Nếu dùng lại thì không còn đảm bảo an toàn nữa. BT. Trong quá khứ đã có nhiều người muốn sử dụng One-time-pad với khóa chọn từ một quyển sách mà hai bên nhận và gửi đều có (mỗi lần mã lại chọn lại khóa). Như vậy có đảm bảo tính bí mật tuyệt đối? TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 18
  19. Giáo trình An toàn & Bảo mật Thông tin 2012 3. Phần đọc thêm Lý thuyết về sự bí mật tuyệt đối (Shannon) Bí mật tuyệt đối là gì? Tại sao chúng ta nói mật mã One-time-pad đảm bảo bí mật tuyệt đối? Claude Shannon đã trả lời những câu hỏi này trong một công trình khoa học đã đặt nền móng cho ngành khoa học mật mã hiện đại (Communication Theory of Secrecy Systems, 1949). Trong phần này, chúng ta sẽ làm quen với các khái niệm cơ bản quan trọng này. Như đã nói để khảo sát và phân tích các hệ mật mã, trước hết ta cần định nghĩa mô hình tấn công áp dụng. Ở đây, chúng ta sử dụng mô hình tấn công thông thường và khái quát nhất, mô hình chỉ-biết-bản-mã (ciphertext-only attack), trong đó kẻ tấn công Eve là người bên ngoài hoàn toàn nên chỉ có khả năng nghe trộm đường truyền. Khái niệm một hệ mật mã đạt được bí mật tuyệt đối được hiểu là hệ mật mã này đứng vững trong mô hình tấn công chỉ-biết-bản-mã dù kẻ địch Eve mạnh đến đâu: tức là có thể giả sử rằng Eve có phương tiện cực kỳ hùng hậu (coi như vô hạn) để có thể tiến hành được bất cứ phép tìm kiếm vét cạn không gian khóa (hữu hạn) nào trong khoảng thời gian ngắn tùy ý. Tất nhiên ta phải giả thiết rằng Eve có thể thu được (nghe trộm) một bản mã có độ dài tùy ý để có thể dùng phân tích tìm ra khóa mật mã. Yếu tố độ dài bản mã nghe trộm được là rất quan trọng. Các hệ mật mã dù không an toàn vẫn có thể không bị phá hoàn toàn, tức là Eve không thể tìm được khóa đúng duy nhất, nếu như độ dài bản mã bị nghe trộm là không đủ dài để phân tích. Các ví dụ sau đây sẽ minh họa rõ điều này. Ví dụ 1.12. Giả sử Eve nghe trộm một bản mã (cryptogram) Y được tạo ra từ một hệ mã hóa một bảng thế. Để tìm bản rõ tương ứng, Eve có thể sử dụng tìm kiếm thử - vét cạn không gian khóa (eshautive key search). Với Y ngắn ta có thể tìm được nhiều bản rõ X cùng có thẻ tạo ra mã Y với khóa khác nhau tương ứng (các phép thế khác nhau). Ví dụ ta có đoạn mã sau: AZNPTFZHLKZ Ta có thể tạo ra ít nhất là 2 đoạn bản rõ tương ứng bằng 2 bảng thế như sau: Ví dụ 1.13: Bảng thế một a b c d e f g h i j k l m n o p q r s t u v w x y z K B C D T E G I J M O L A Q R H S F N P U V W X Z Y Bảng thế hai TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 19
  20. Giáo trình An toàn & Bảo mật Thông tin 2012 a b c d e f g h i j k l m n o p q r s t u v w x y z L P H N Z K T A F E Do đó cùng đoạn mã này sẽ có 2 bản rõ tương ứng với 2 bảng thế trên: Mã: A Z N P T F Z H L K Z Bản rõ 1: m y s t e r y p l a y Bản rõ 2: r e d b l u e c a k e Cả hai chuỗi “mysteryplay” và “redbluecake” đều có thể giả định là 2 thông điệp có nghĩa hợp lý (đã loại bỏ bớt dấu trắng) Sau đây là một ví dụ khác Ví dụ 1.14. Với MÃ ‘HLKZ’ có thể dễ dàng tìm ra 4 TIN tương ứng: C.text: H L K Z P.text1: p l a y P.text2: c a k e P.text3: m i s t P.text4: W a s h bằng các bảng thế như sau: a b c d e f g h i j k l m n o p q r s t u v w x y z K L H Z L H Z K L H K Z (Bảng trên bỏ trắng những ký tự thay thế giống như gốc) Qua các ví dụ 1.13-14 có thể thấy được rằng đối với mã một-bảng-thế, khi bản mã còn tương đối ngắn thì luôn luôn tồn tại cùng lúc nhiều bản rõ có nghĩa tương ứng (với khoá dự đoán tương ứng). Tuy nhiên với bản mã có độ dài trên 50 trở lên thì sẽ chỉ có duy nhất một bản rõ plaintext thoả mãn, tức chính nó là bản rõ (với khóa tương ứng) cần tìm. Như vậy, nếu như Eve – nhà phân TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 20
  21. Giáo trình An toàn & Bảo mật Thông tin 2012 tích giải phá mã (cryptanalyst) – “tóm” được một đoạn mã có độ dài đủ lớn, thì nói chung luôn luôn có thể phá được mã loại một-bảng thế này. Trong ví dụ sau đây, ta sẽ quan sát một quá trình cụ thể giải phá mã cộng tính. Có 26 khoá là 26 khả năng để thử. Eve sẽ nghe trộm và lần lượt bắt được từng ký tự mã được phát trên đường truyền. Mỗi khi nghe được thêm một từ mã thì E tiến hành thử luôn cả 26 khả năng để tìm bản rõ có nghĩa luôn. Khi mới nghe trộm được từ mã đầu tiên thì khả năng của cả 26 khoá đều ngang ngửa nhau (xác xuất đoán đúng đều nhỏ, cỡ nhỏ hơn 0.1), khi nghe trộm được từ khoá 2,3 thì các xác xuất sẽ thay đổi, hầu hết là tiếp tục giảm đi, trừ trường hợp với khoá 15. Khi nghe được từ mã 5 thì xác suất ứng với khoá 15 sẽ là 1 trong khi các xác suất khác đều là không; tức là khoá 15 là khoá đúng (chữ consi ứng với nó là đoạn đầu của một số từ có nghĩa trong tiếng Anh như consider, consideration ). Ví dụ 1.15. Hãy xét một hệ mã cộng với 26 khóa khác biệt (“đẩy” 0 – 25 vị trí). Giả sử ta bắt được MÃ = “sdchx”. Ta sẽ thử cả 26 khóa để phá mã này. Bảng đưới đây minh họa phép thử vét cạn này, với n là độ dài đoạn mã “bị tóm” tính đến thời điểm tương ứng. Shift Decruption N = 1 n = 2 n = 3 n = 4 n = 5 0 rdchx 0.060 0.070 25 sediy 0.063 0.257 0.427 0.182 24 tfejz 0.091 0.003 23 ugfka 0.28 0.052 22 vhglb 0.010 21 wihmc 0.024 0.128 20 xjind 0.002 19 ykjoe 0,020 18 zlkpf 0.001 0.001 17 amlqg 0.082 0.072 0.004 16 bnmrh 0.015 15 consi 0.028 0.202 0.515 0.818 1 14 dpotj 0.043 13 eqpuk 0.127 0.044 12 frqvl 0.022 0.058 11 gsrwm 0.020 0.015 10 htsxn 0.061 0.052 0.046 9 iutyo 0.070 0.001 8 jvuzp 0.002 7 kwvaq 0.008 TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 21
  22. Giáo trình An toàn & Bảo mật Thông tin 2012 6 lxwbr 0.040 5 myxcs 0.024 0.028 4 nzydt 0.067 0.028 3 oazeu 0.075 0.014 2 pbafv 0.019 1 qcbgw 0.001 Phần sau đây sẽ trình bày một định nghĩa tương đối chặt chẽ về khái niệm bí mật tuyệt đối. Khái niệm bí mật tuyệt đối Qua ví dụ 1.15 ở trên, dễ thấy rằng khi độ dài đoạn mã nghe trộm tăng lên thì phân phối xác xuất của tính khả thi của mối ứng cử viên bản rõ/khóa sẽ thay đổi liên tục: hầu hết các xác suất sẽ giảm và chỉ có một sẽ tăng (để trở thành 1 sau này). Điều này rõ ràng cho thấy tính không an toàn của mật mã. Ngược lại, nó cho tạm một cảm nhận về mật mã an toàn: phân phối xác suất của các ứng viên bản rõ phải thay đổi ít hoặc không thay đổi khi Eve thu nhận thêm các đoạn mã nghe trộm được. Vậy, khái niệm bí mật tuyệt đối có thể được định nghĩa như sau. Trong hệ thống đảm bảo bí mật tuyệt đối, bản mã bị tiết lộ cho kẻ thù không hề đem lại một ý nghĩa nào cho phân tích tìm khóa phá mã. Sự kiện nghe trộm bản mã (có độ dài bất kỳ) sẽ không làm thay đổi phân phối xác xuất ban đầu của plaintext. Hay là, một hệ thống là có bí mật tuyệt đối nếu: P(X) = P(X/Y)  TIN X VÀ MÃ Y Định lý Shannon. Trong hệ thống có BMTĐ, số lượng khoá có thể (độ lớn không gian khoá) phải lớn hơn hoặc bằng số lượng thông báo có thể (độ lớn không gian TIN). Điều này cho thấy để đạt được BMTĐ thì khoá phải rất dài, do đó việc trao chuyển khoa giữa hai bên truyền tin sẽ làm cho hệ thống trở nên phi thực tế. Như vậy, nhìn chung chúng ta không thể đạt được bí mật tuyệt đối mà chỉ có thể có được các hệ thống với mức an toàn thực tế (Practical security) được cài đặt tuỳ theo giá trị của thông tin cần bảo vệ và thời gian sống của nó. Đánh giá mức độ bảo mật của một cipher. Shannon đưa ra một khái niệm, unicity distance, để “đo” mức an toàn của một hệ mã: Unicity distance, ký hiệu N0, là độ dài tối thiểu của bản mã nghe trộm được để có thể xác định được khóa đúng duy nhất. Unicity distance có thể được tính theo công thức: log E N 2 0 d TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 22
  23. Giáo trình An toàn & Bảo mật Thông tin 2012 Trong đó d là độ dư thừa của ngôn ngữ sử dụng của TIN. Ví dụ 1.16. Câu tốc ký sau đây thực tế có thể khôi phục được về dạng đầy đủ một cách duy nhất: Mst ids cn b xprsd n fwr ltrs, bt th xprsn s mst nplsnt Most ideas can be expressed in fewer letters, but the expression is most unpleasant. Điều này chứng tỏ những chữ đã bị mất trong câu ban đầu là dư thừa về mặt biểu diễn thông tin (nhưng cần thiết để bảo đảm tính dễ hiểu, đọc nhanh). Khái niệm độ dư thừa có thể được định nghĩa thông qua công thức: d = R - r bits Trong đó R: absolute rate và r: true rate của ngôn ngữ. R được định nghĩa như là số lượng bit được sử dụng để biểu thị một chữ cái trong bảng chữ với giả sử các chữ có tần xuất xuất hiện như nhau: R = log2A bits với A là kích thước của bảng chữ Ví dụ 1.17. Đối với tiếng Anh ta có R = log226 4.7 bits. Đại lượng true rate r được định nghĩa như là số lượng bit trung bình để biểu thị một chữ cái khi văn bản được biểu diễn ở dạng tối giản: xử lý theo kiểu tốc ký, gạt bỏ các chữ không cần thiết (hoặc áp dụng kỹ thuật nén trên cơ sở các thuộc tính thống kê của văn bản) mà vẫn không làm mất thông tin chuyển tải. Ví dụ 1.18. Đối với văn bản tiếng Anh, tính trung bình, r nằm trong khoảng 1 - 1,5 bit Độ dư thừa có thể coi là một thước đo của tính cấu trúc và tính “dễ đoán” (predictability) của ngôn ngữ. Độ dư thừa cao hơn chứng tỏ tính cấu trúc và tính “dễ đoán” cao hơn. Một nguồn phát tin thực sự ngẫu nhiên sẽ không có dư thừa. Trong tiếng Anh, độ dư thừa nằm trong khoảng từ 3.2 đến 3.7 bits (gây nên bởi sơ đồ tần xuất ký tự “lồi lõm” và các mẫu tự bộ 2-chữ, 3-chữ phổ biến) Sử dụng Unicity distance ta có thể so sánh độ an toàn của các thuật toán mã hóa khác nhau. Ví dụ 1.19. Với mã 1-bảng thế, ta quan sát thấy E= |Z| = 26! P(Z) =1/26! log2E = log2(26!) 88.4 bits N0 88.4 / 3.7 23.9 ký tự Như vậy các MÃ chứa 24 ký tự trở lên sẽ có thể bị giải mã một cách duy nhất. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 23
  24. Giáo trình An toàn & Bảo mật Thông tin 2012 Ví dụ 1.20. Với mã one-time-pad: X = không gian khóa = {tập hợp các đoạn văn bản tiếng Anh có độ dài k} Z = không gian khóa = {tập các chuỗi chữ độ dài k trông bảng chữ cái tiếng Anh} Giả thiết các khóa được chọn một cách ngẫu nhiên với xác xuất đồng nhất N0 = log2E/d k k E= 26 log2(26 ) = k log2264.7k N0 = (4.7k)/3.7 = 1.37k Do đó, thậm chí nếu E nghe trộm toàn bộ tất cả các chữ cái của đoạn MÃ, cô ta vẫn không thể giải phá mã (tìm được TIN tương ứng duy nhất). Ta có thể “tăng” tính mật của một hệ mã cho trước hay không? 1. Tăng độ lớn không gian khóa 2. Giảm tính dư thừa của ngôn ngữ văn bản TIN: tiền xử lý qua 1 bước thuật toán nén Chú ý: một thuật toán nén lý tưởng có thể đem lại độ dư thừa 0, do đó N0  0 3. Có thể chèn thêm một đoạn văn bản ngẫu nhiên để “phẳng hóa“ độ thị tần xuất của văn bản TIN. Ta sẽ xét cụ thể biện pháp này dưới đây M L Văn bản TIN gốc Chuỗi ngẫu nhiên chèn Công thức sau cho biết độ dư thừa của văn bản mới (sau khi chèn thêm chuỗi ký tự ngẫu nhiên) ~ M d d L M TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 24
  25. Giáo trình An toàn & Bảo mật Thông tin 2012 CHƯƠNG 2 Mật mã khối và mật mã khóa đối xứng 1. Các khái niệm và nguyên lý thiết kế cơ sở Các hệ mật mã cổ điển được giới thiệu trong chương trước đều thuộc loại mật mã dòng (stream cipher), trong đó phép biển đổi mật mã thực hiện trên từng ký tự độc lập. Tuy nhiên ngày nay được ưa chuộng sử dụng hơn là một kiểu mật mã khác – mật mã khối (block cipher) trong đó từng khối nhiều ký tự được mã hóa cùng một lúc. Trong mật mã khối, các tham số quan trọng là kích thước (độ dài khối) và kích thước khóa. Các khái niệm này được minh họa qua ví dụ sau đây. Ví dụ 2.1 Bảng sau đây biểu diễn một thuật toán mã hóa theo khối key 000 001 010 011 100 101 110 111 0 001 111 110 000 100 010 101 011 1 001 110 111 100 011 010 000 101 2 001 000 100 101 110 111 010 011 3 100 101 110 111 000 001 010 011 4 101 110 100 010 011 001 011 111 Theo bảng này, dữ liệu plaintext 010100110111 sẽ đươc mã hóa thành: 010 100 110 111 111 011 000 101 theo key=1 010 100 110 111 100 011 011 111 theo key=4 Ở đây số lượng khóa là 5, do 22 < 5 < 23 nên cần 3 bit để biểu diễn và lưu giữ khóa, tức là kich thước khóa là 3. Đồng thời kích thước khối cũng là 3. Cũng qua ví dụ đơn giản này (chỉ có tính chất minh họa), ta thấy rằng nếu các tham số kích thước khối và khóa qua nhỏ thì mật mã rất dễ bị phá bằng các tấn công thông qua phân tích thống kê. Chẳng hạn trong ví dụ trên, nếu kẻ thù nhận được một khối mã ciphertext 001 thì nó có thể dễ dàng suy ra plaintext tương ứng chỉ có thể là 000 hoặc 101 (nhờ thống kê trên bảng biến đổi mã). Vì vây, các điều kiện cần cho mật mã khối an toàn là: TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 1
  26. Giáo trình An toàn & Bảo mật Thông tin 2012 Kích thước khối phải đủ lớn để chống lại các loại tấn công phá hoại bằng phương pháp thống kê. Tuy nhiên cần lưu ý rằng kích thước khối lớn sẽ làm thời gian trễ lớn. Không gian khóa phải đủ lớn (tức là chiều dài khóa phải đủ lớn) để chống lại tìm kiếm vét cạn.Tuy nhiên mặt khác, khóa cần phải đủ ngắn để việc làm khóa, phân phối và lưu trữ được hiệu quả. Về các nguyên lý thiết kế mật mã khối, người ta đã ghi nhận 2 nguyên tắc cơ sở sau để có bảo mật cao, đó là việc tạo ra confusion (tính hỗn loạn, rắc rối) và diffusion (tính khuếch tán). Confusion. (Hỗn loạn, rắc rối) Sự phụ thuộc của bản mã đối với bản rõ phải thực phức tạp để gây rắc rối, cảm giác hỗn loạn đối với kẻ thù có ý định phân tích tìm qui luật để phá mã. Quan hệ hàm số của mã-tin là phi tuyến (non-linear). Diffusion. (Khuếch tán) Làm khuếch tán những mẫu văn bản mang đặc tính thống kê (gây ra do dư thừa của ngôn ngữ) lẫn vào toàn bộ văn bản. Nhờ đó tạo ra khó khăn cho kẻ thù trong việc dò phá mã trên cơ sở thống kê các mẫu lặp lại cao. Sự thay đổi của một bit trong một khối bản rõ phải dẫn tới sự thay đối hoàn toàn trong khối mã tạo ra. Một cách đơn giản nhất, confusion có thể được thực hiện bằng phép thay thế (substitution) trong khi diffusion được tạo ra bằng các phép chuyển đổi chỗ (transposition/permutation) hay hoán vị. Toàn bộ sơ đồ biến đổi mật mã sẽ là một lưới các biến đổi thay thế-hoán vị (substitution- permutation network). Ví du 2.2: Phép hoán vị cột: Để mã hóa “computer security”, ta viết lại thành nhiều hàng 5 cột c o m p u t e r s e c u r i t y. Mã tạo ra bằng cách viết lại theo cột: C T C Y O E U M R R P S I U E T Bên cạnh các nguyên tắc tạo tính bảo mật nói trên, việc thiết kế mật mã khối cũng đề cao các nguyên tắc cài đặt hiệu quả.: Cài đặt cho phần mềm cần đảm bảo tính mềm dẻo và giá thành thấp. Cài đặt cho phần cứng cần đảm bảo tốc độ cao và tính kinh tế. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 2
  27. Giáo trình An toàn & Bảo mật Thông tin 2012 Để đáp ứng tốt các nguyên lý thiết kế đã nêu trên, các thuật toán mật mã khối thường được tổ chức như một cấu trúc nhiều vòng lặp. Khái niệm vòng lặp Một cách phổ biến, các hệ mã khối thường được thiết kế theo cấu trúc nhiều vòng lặp với mỗi vòng lặp lại gọi thực hiện một hàm f cơ sở (nhưng với các tham số khác nhau). Theo đó, đầu vào của một vòng lặp là đầu ra của vòng lặp trước và một khóa con phát sinh từ khóa đầy đủ dựa trên một thuật toán lập lịch khóa (key scheduler), hay cũng gọi là thuật toán sinh khóa con. Giải mã sẽ là một quá trình ngược, trong đó các khóa con sử dụng tại mỗi vòng lặp sẽ được lập lịch để sử dụng theo thứ tự ngược. Hình 2.1 Sơ đồ minh họa một cấu trúc 16 vòng lặp, với đầu vào và ra đều có kích thức 64 bits (Nguồn: Wikipedia). Có hai khối hoán vị đầu và cuối (IP và FP). Hàm F cơ sở chỉ nhận đầu vào 32 bits, nhưng tác động của nó sẽ rộng khắp qua chỉ 2 vòng nhờ sự hoán vị 2 nửa trái và phải. Thông thường, hàm cơ sở vòng lặp f được thiết kế có một tính chất đặc biệt là tính đối hợp hàm (involution), tức là nó bằng hàm ngược của nó: f = f-1 hay là f(f(x)) = x Ví dụ 2.3 Ta xét phép biến đổi f với miền xác định: x {tập các chuỗi nhị phân độ dài 3} TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 3
  28. Giáo trình An toàn & Bảo mật Thông tin 2012 123 f (bit thứ nhất và thứ hai đổi chỗ cho nhau, bit thứ ba giữ nguyên). 213 Như thế ta có f là một hàm có tính đối hợp, chẳng hạn cụ thể là: f(101) = 011; từ đó f(f(101)) = 101 Chúng ta sẽ tìm hiểu chi tiết một hệ mã khối điển hình, đó là chuẩn mật mã DES (Data Encryption Standard); chuẩn này ra đời vào năm 1977 và đã thống trị ứng dụng mật mã suốt 2 thập kỷ sau đó. Tuy nhiên chuẩn mật mã này đã trở nên lạc hâu, kém an toàn và được thay thế bởi chuẩn mới AES (Advanced Encryption Standard). 2. Chuẩn mật mã DES Lịch sử của DES Vào những năm đầu thập kỷ 70, nhu cầu có một chuẩn chung về thuật toán mật mã đã trở nên rõ ràng. Các lý do chính là: Sự phát triển của công nghệ thông tin và của nhu cầu an toàn & bảo mật thông tin: sự ra đời của các mạng máy tính tiền thân của Internet đã cho phép khả năng hợp tác và liên lạc số hóa giữa nhiều công ty, tổ chức trong các dự án lớn của chính phủ Mỹ. Các thuật toán ‘cây nhà lá vườn’ (ad hoc) không thể đảm bảo được tính tin cậy đòi hỏi cao. Các thiết bị khác nhau đòi hỏi sự trao đổi thông tin mật mã thống nhất, chuẩn. Một chuẩn chung cần thiết phải có với các thuộc tính như: 1. Bảo mật ở mức cao 2. Thuật toán được đặc tả và công khai hoàn toàn, tức là tính bảo mật không được phép dựa trên những phần che giấu đặc biệt của thuật toán. 3. Việc cài đặt phải dễ dàng để đem lại tính kinh tế 4. Phải mềm dẻo để áp dụng được cho muôn vàn nhu cầu ứng dụng Năm 1973, Cục quản lý các chuẩn quốc gia của Mỹ đã có văn bản cổ động cho việc tạo lập các hệ mật mã chuẩn ở cơ quan đăng ký liên bang của Mỹ. Điều này đã dẫn đến sự công bố vào năm 1977 của cục An ninh Quốc gia Mỹ (NSA) về Data Encryption Standard, viết tắt là DES. Thực chất, DES được phát triển bởi IBM như là sự sửa đổi của một hệ mã trước kia được biết với cái tên Lucipher. Trong khoảng 2 thập kỷ tiếp theo, DES là hệ mã được dùng rộng rãi nhất và cũng là gây ra nhiều nghi ngờ, tranh cãi trong lĩnh vực này: xung quanh các nguyên tắc thiết kế đảm bảo tính mật, chiều dài khóa tương đối ngắn và khả năng NSA còn che giấu cửa sau TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 4
  29. Giáo trình An toàn & Bảo mật Thông tin 2012 (backdoor) để có thể bẻ khóa, phá mã ít tốn kém hơn thông thường. Thuật toán và lưu đồ hoạt động của DES Các hình vẽ sau cung cấp sơ đồ khái quát và chi tiết của thuật toán sinh mã trong DES. X 1 Y1 X Y 2 2   DES   X 64 Y64 Z1Z 2 Z 56 Hình 2.2 Sơ đồ cơ bản của DES: đầu vào của DES là khối độ dài 64 bits, đầu ra 64 bits và khóa là 56 bits. INPUT 64 Bits 32 Bits 32 Bits L0 R0 K f 1 32 Bits 32 Bits R L  f (R , K ) L1 R0 1 0 0 1 f K 2 32 Bits 32 Bits R L  f (R , K ) L2 R1 2 1 1 2 f K i 32 Bits 32 Bits L15 R14 R15 L14  f (R14 , K15 ) f K16 32 Bits 32 Bits L16 L15 f (R15 , K16 ) R16 R15 64 Bits OUTPUT Hình 2.3 Sơ đồ giải thuật sinh mã DES với cấu trúc 16 vòng lặp Sơ đồ hình vẽ 2.3 cho thấy DES được cấu tạo bởi 16 bước lặp với bước lặp cơ sở gọi hàm TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 5
  30. Giáo trình An toàn & Bảo mật Thông tin 2012 chuyển đổi phi tuyến f; 16 bước lặp này được kẹp vào giữa hai tác tử giao hoán IP và IP-1. Hai tác từ này không có ý nghĩa gì về mặt bảo mật mà hoàn toàn nhằm tạo điều kiện cho việc cài đặt phần cứng, ‘chip hóa’ thuật toán DES. Hàm cơ sở f là nguồn gốc của sức mạnh bảo mật trong thuật toán DES này. Sự lặp lại nhiều lần các bước lặp với tác dụng của f là nhằm tăng cường tính confusion và diffusion đã có trong f. Thuật toán sinh khóa con 16 vòng lặp của DES cùng gọi thực hiện f nhưng với các tham số khóa khác nhau. Tất cả 16 khóa khác nhau này, được gọi là khóa con, cùng sinh ra từ khóa chính của DES bằng một thuật toán sinh khóa con. Trong thuật toán sinh khóa con này (lập lịch khóa), khóa chính K, 64 bit, đi qua 16 bước biến đổi, tại mỗi bước này một khóa con được sinh ra với độ dài 48 bit. Hình 2.4 Sơ đồ thuật toán sinh khóa con (Key Scheduler) – Nguồn: Wikipedia Qua sơ đồ thuật toán sinh khóa con có thể thấy rằng thực sự chỉ có 56 bit của khóa chính được sử dụng, 8 bit còn lại là mã kiểm tra chẵn lẻ (parity bits) và bị lọc ra ở biến đổi PC1. Các bộ biến đổi PC1 và PC2 chỉ đơn giản là các bộ vừa chọn lọc vừa hoán vị (PC = permuted choice = lựa chọn có hoán vị). Các biến đổi R1 và R2 (left rotate 1 bit và 2 bit) tương ứng là các phép đẩy bit trái 1 và 2 vị trí. Cấu trúc vòng lặp DES Mỗi vòng lặp của DES thực hiện trên cơ sở công thức sau: (Li,Ri) = (Ri-1, Li-1  f (Ri-1,Ki)) TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 6
  31. Giáo trình An toàn & Bảo mật Thông tin 2012 trong đó, (Li,Ri) là 2 nửa trái và phải thu được từ biến đổi của vòng lặp thứ i. Ta cũng có thể viết lại (Li,Ri) = T F (Ri-1,Ki)) Trong đó F là phép thay thế Li-1 bằng Li-1  f (Ri-1,Ki), còn T là phép đổi chỗ hai thành phần L và R. Tức là mỗi biến đổi vòng lặp của DES có thể coi là một tích hàm số của F và T (trừ vòng cuối cùng không có T). Ta có thể viết lại toàn bộ thuật toán sinh mã DES dưới dạng công thức tích hàm số như sau: -1 DES = (IP) F16TF15T F2TF1 (IP) Thuật toán giải mã DES được xây dựng giống hệt như thuật toán sinh mã nhưng có các khóa con được sử dụng theo thứ tự ngược lại, tức là dùng khóa K16 cho vòng lặp 1, khóa K15 cho vòng lặp 2 Vì vậy, thuật toán giải mã có thể được viết lại dưới dạng công thức sau: -1 -1 DES = (IP) F1TF2T F15TF16 (IP) Bây giờ chú ý rằng mỗi hàm T hoặc F đều là các hàm có tính chất đối hợp (f=f-1, hay f(f(x) =x). Do đó nếu ta thực hiện phép tích hàm DES-1DES hay DES DES-1 thì sẽ thu được phép đồng nhất. Điều đó giải thích tại sao thuật toán giải mã lại giống hệt như sinh mã chỉ có khác về thứ từ trong chuỗi khóa con. Bài tập. Bạn đọc hãy tự chứng minh tính đối hợp của T và F đồng thời chỉ rõ tại sao x= DES ( DES-1 (x) với mọi x là chuỗi nhị phân 64 bit. Cấu trúc cụ thể hàm f Sơ đồ biến đổi cụ thể của hàm f được minh họa trong hình 2.5. Trước hết, 32 bit của thành phần Ri-1 được mở rộng thành 48 bit thông qua biến đổi E (expansion: mở rộng với sự lặp lại một số bit) rồi đem XOR với 48 bit của khóa Ki. Tiếp theo, 48 bit kết quả sẽ được phân thành 8 nhóm 6 bit. Mỗi nhóm này sẽ đi vào một biến đổi đặc biệt gọi là biến đổi S-box (có 8 S-box khác nhau ứng với mỗi nhóm 6 bit) và cho ra kết quả là 8 nhóm 4 bit. Từ đó, 32 bit hợp thành (sau khi qua 8 S-box khác nhau) sẽ được hoán vị lại theo hàm hoán vị P để đưa ra kết quả cuối cùng của hàm f (tức nhân của Fi). TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 7
  32. Giáo trình An toàn & Bảo mật Thông tin 2012 Hình 2.5 Cấu trúc của biến đổi hàm f, bước lặp cơ sở của DES. Nguồn: Wikipedia Cấu trúc của các S-Box Như ta biết mỗi một trong 8 nhóm 6 bit sẽ đi vào mỗi trong 8 bộ biến đổi S1,S2 S8. Mỗi S-box bao gồm 4 bảng biến đổi dòng, thực chất là một biến đổi hoán vị cho 16 tổ hợp của 4 bits. Trong 6 bits đầu vào thì hai bit ngoài cùng (bit 1 và 6) được dùng để chỉ định 1 trong 4 bảng biến đổi dòng này; vì thế chúng được gọi là các bit điều khiển trái và phải (CL và CR). Còn lại 4 bit chính (các bit 2-5) của nhóm 6 bit đầu vào sẽ là tổ hợp 4 bits bị biến đổi. Middle 4 bits of input S 5 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 00 0010 1100 0100 0001 0111 1010 1011 0110 1000 0101 0011 1111 1101 0000 1110 1001 Outer 01 1110 1011 0010 1100 0100 0111 1101 0001 0101 0000 1111 1010 0011 1001 1000 0110 bits 10 0100 0010 0001 1011 1010 1101 0111 1000 1111 1001 1100 0101 0110 0011 0000 1110 11 1011 1000 1100 0111 0001 1110 0010 1101 0110 1111 0000 1001 1010 0100 0101 0011 Hình 2.6 Bảng biến đổi S5: đầu vào 6 bits 011011 sẽ được biến đổi thành 1001 (ô vàng) Các thuộc tính của S-Box Các nguyên tắc thiết kế của 8 S-box được đưa vào lớp thông tin mật ‘Classified information’ ở Mỹ. Mặc dù vây, NSA đã tiết lộ 3 thuộc tính của S-boxes, những thuộc tính này bảo đảm tính confusion & diffusion của thuật toán. 1. Các bít vào (output bit) luôn phụ thuộc không tuyến tính vào các bít ra (input bit). 2. Sửa đổi ở một bit vào làm thay đổi ít nhất là hai bit ra. 3. Khi một bit vào được giữ cố định và 5 bit con lại cho thay đổi thì S-boxes thể hiện một tính TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 8
  33. Giáo trình An toàn & Bảo mật Thông tin 2012 chất được gọi là ‘phân bố đồng nhất ‘ (uniform distribution): so sánh số lượng bit số 0 và 1 ở các đầu ra luôn ở mức cân bằng. Tính chất này khiến cho việc áp dụng phân tích theo lý thuyết thông kê để tìm cách phá S-boxes là vô ích. Rõ ràng, 3 tính chất này đảm bảo tốt confusion & diffusion. Thực tế, sau 8 vòng lặp tất cả các bit ra của DES sẽ chịu ảnh hưởng của tất cả các bit vào và tất cả các bit của khóa. Hơn nữa sự phụ thuộc này là rất phức tạp. Tuy nhiên sau này một số tấn công mới đã được đề xuất và cho thấy 8 vòng lặp này là chưa đủ để bảo mật (điều này cho thấy NSA đã biết trước các dạng tấn công này nên mới qui định số vòng lặp là 16 ngay từ đầu). Chính cấu tạo của S-box đã gây tranh luận mạnh mẽ trong các thập kỷ 70-90 về khả năng cơ quan NSA (National Security Agency), Mỹ, vẫn còn che dấu các một số đặc tính của S-box hay cài bên trong những cửa bẫy (trapdoor) mà qua đó họ có thể dễ dàng phá giải mã hơn người bình thường (biết các bí mật này có thể giản lược không gian khóa 256 để tìm kiếm vét cạn nhanh hơn). Sự phát hiện sau đó của các tấn công mới, rất mạnh như tấn công vi phân, đã củng cố sự nghi ngờ của giới khoa học. Các điểm yếu của DES 1.Tính bù. Ký hiệu u là phần bù của u (ví dụ 0100101 và 1011010 là bù của nhau) thì DES có tính chất sau: y = DES (x) z y DESz (x) Cho nên nếu biết MÃ y được mã hóa từ TIN x với khóa z thì ta suy ra y được mã hóa từ TIN x với khóa z . Tính chất này chính là một điểm yếu của DES bởi vì nhờ đó kẻ địch có thể loại trừ một nửa số khóa cần phải thử khi tiến hành phép thử-giải mã theo kiểu tìm kiếm vét cạn không gian khóa. 2. Khóa yếu Các khóa yếu là các khóa mà theo thuật toán sinh khóa con thì tất cả 16 khóa con đều như nhau Z1 = Z2 = Z3 = =Z15 = Z16 điều đó khiến cho phép sinh mã và giải mã đối với các khóa yếu này là giống hệt nhau -1 DESz = DES z Có tất cả 4 khóa yếu như sau: 1) [00000001 00000001 00000001] TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 9
  34. Giáo trình An toàn & Bảo mật Thông tin 2012 2) [11111110 11111110 11111110] 3) [11100000 11100000 11100000 11100000 11110001 11110001 11110001 11110001] 4) [00011111 00011111 00011111 00011111 00001110 00001110 00001110 00001110] Đồng thời có 10 khóa yếu với thuộc tính là tồn tại Z, Z’ sao cho -1 -1 DES z = DESz’ hay là DES z’ = DESz Tấn công bằng phương pháp vét cạn (hay là brute-force attack) DES có 256=1017 khóa. Nếu như biết một cặp plaintext-ciphertext thì chúng ta có thể thử tất cả 1017 khả năng này để tìm ra khóa cho kết quả khớp. Giả sử như một phép thử mất quãng 10-6s (trên một máy PC thông thường), thì chúng ta sẽ thử mất 1011s tức là 7300 năm! Nhưng nhớ rằng đấy mới chỉ là sử dụng các máy tính thông thường, còn có các máy tính được chế tạo theo nguyên lý xử lý song song. Chẳng hạn nếu như làm được một thiết bị với 107 con chip mật mã DES chạy song song thì bây giờ mỗi con chip chỉ phải chịu trách nhiệm tính toán với 1010 phép thử. Chip mã DES ngày nay có thể xử lý tới tốc độ là 4.5 x 107bits/s tức là có thể làm được hơn 105 phép mã DES trong một giây. Diffie và Hellman (1977) đã ước lượng rằng có thể chế được một máy tính chuyên dụng để vét cạn không gian khóa DES trong1/2 ngày với cái giá cho chiếc máy này là 20 triệu đô la. Cái giá này được tính toán lại và giảm xuống $200,000 vào năm 1987. Vì vậy DES đã bị phê bình ngay từ khi ra đời vì có kích thước khóa quá ngắn! Hiện nay đã có những thiết kế cụ thể cho loại máy tính chuyên dụng phá khóa này dựa trên kỹ thuật xử lý song song tiên tiến và cho biết một thiết bị kiểu này có giá khoảng $10,000 có thể cho kết quả trong 1 ngày. Sau đây là một đoạn trích, tham khảo từ nguồn Wikipedia (theo từ khóa DES): In academia, various proposals for a DES-cracking machine were advanced. In 1977, Diffie and Hellman proposed a machine costing an estimated US$20 million which could find a DES key in a single day. By 1993, Wiener had proposed a key-search machine costing US$1 million which would find a key within 7 hours. However, none of these early proposals were ever implemented—or, at least, no implementations were publicly acknowledged. The vulnerability of DES was practically demonstrated in the late 1990s. In 1997, RSA Security sponsored a series of contests, offering a $10,000 prize to the first team that broke a message encrypted with DES for the contest. That contest was won by the DESCHALL Project, led by Rocke Verser, Matt Curtin, and Justin Dolske, using idle cycles of thousands of computers across the Internet. The feasibility of cracking DES quickly was demonstrated in 1998 when a custom DES-cracker was built by theElectronic Frontier Foundation (EFF), a cyberspace civil rights group, at the cost of approximately US$250,000 (see EFF DES cracker). Their motivation was to show that DES was breakable in practice as well as in theory: "There are many people who will not believe a truth until they can see it with their own eyes. Showing them a physical machine that can crack DES in a few days is the only way to convince some people that they really cannot trust their security to DES." The machine brute-forced a key in a little more than 2 days search. Tăng kích thước khóa của DES Nếu như ta dùng nhiều khối DES nối tiếp thì có thể làm tăng kích thước của khóa. Tuy nhiên chú ý rằng nếu nối hai khối DES với hai khóa khác nhau thì không vì thế kích thước khóa của TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 10
  35. Giáo trình An toàn & Bảo mật Thông tin 2012 cả hệ thống được tăng gấp đôi thành 56 *2 =112 bits mà chỉ là 57 bit. Bài tập. Hãy giải thích tại sao. Sơ đồ 3-DES dưới đây, trái lại, thực sự cung cấp một hệ mã với độ dài khóa là 112 bits TIN DES DES-1 DES MÃ K1 K2 K3 Hình 2.7 Sơ đồ 3-DES (Triple-DES) Các dạng tấn công khác Differential Cryptanalysis. Được công bố lần đầu bởi E. Biham và A. Shamir vào cuối những năm 80 (thế kỷ trước), tuy nhiên thực tế đã được biết đến từ lâu nhưng không công bố bởi IBM và NSA (Cục An ninh Quốc gia Mỹ). Để phá được DES với đầy đủ 16 vòng lặp, tấn công này cần tới 249 bản rõ chọn trước (chosen plaintext). Để có được khối lượng bản rõ này là không thể xảy ra trên thực tế, điều đó cũng cho thấy là DES đã được thiết kế ban đầu để tránh được tấn công này. Linear Cryptanalysis. Tấn công này được phát hiện bởi Matsui vào năm 1994, và cần 243 bản rõ chọn trước. 3. Các hệ mật mã khối khác Các mật mã khối khác (Cho đến năm 1999) Qua thời gian, có nhiều thuật toán mật mã khối khác nhau được đề xuất bởi cộng đồng khoa học mật mã như FEAL (-4, -8, -N, -NX), NewDES, LOKI91, Blowfísh, RC2, MMB, IDEA Tuy nhiên, khá nhiều trong số đó đã bị phá giải hoặc chỉ ra có những điểm yếu nhất định. Điều đó chứng tỏ đề xuất thuật toán mã khối tốt có thể thay thế được DES không phải là đơn giản. Trong số nói trên IDEA (1990) có thể được xem là thuật toán có độ an toàn cao nhất, cho đến giờ vẫn chưa có một công bố nào nói lên một điểm yếu đáng kể nào của DES, mặc dù kể từ năm 1990 đã có nhiều loại tấn công rất mạnh được sử dụng để thử phá giải. IDEA chính là một trong các thuật toán được dùng trong PGP (Pretty Good Privacy) - một giải pháp bảo mật không thương mại gần như duy nhất cho phép các người dùng trên Internet sử dụng cho các nhu cầu thỏa mãn bí mật riêng như e-mail. IDEA làm việc với dữ liệu khối 64 bit, nhưng với khóa128 bit nên việc thay thế sử dụng IDEA cho DES là một khó khăn lớn. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 11
  36. Giáo trình An toàn & Bảo mật Thông tin 2012 Mật mã AES Vào năm 2000, cơ quan quản lý về chuẩn và công nghệ của Mỹ, NIST (National Institute of Standard and Technology), đã tổ chức một cuộc thi để chọn một hệ mật mã mới thay thế cho DES. Hệ mã Rijndael đã được chọn và được công bố (2002) như là chuẩn mật mã mới thay thế cho DES, với tên gọi là Advanced Encryption Standard (AES). Vào đến vòng trong còn có các ứng viên khác là RC6, Serpent, MARS và Twofish. Hệ mã này được phát triển bởi 2 nhà khoa học Bỉ, Joan Daemen và Vincent Rijnmen (vì vậy tên gọi Rijndael được tạo ra từ việc ghép tiền tố tên họ 2 ông này) AES được xây dựng trên nguyên lý thiết kế lưới giao hoán – thay thế (substitution-permutation network). Đây là một hệ mã có tốc độ tốt trong cả cài đặt phần mềm cũng như phần cứng. Khác với DES, AES không theo mẫu thiết kế mạng Feistel. Thay vào đó các thao tác cơ bản được thực hiện trên các khối ma trận dữ liệu 4*4 (bytes), được gọi là các trạng thái (state). Số vòng lặp của AES là một tham số xác định trên cơ sở kích thước khóa: 10 vòng lặp cho khóa 128bit, 12 cho 192 bit, 14 cho 256bit. Giáo trình này sẽ không đi sâu tìm hiểu về AES. Sinh viên được khuyến khích tìm đọc thêm từ các tài liệu tham khảo về AES. 4. Các chế độ sử dụng Mã khối Thuật toán mã khối có đầu vào và đầu ra là các khối có độ dài xác định (như ở DES là 64bit). Để mã hóa một dữ liệu có độ dài tùy ý thì ta phải cắt dữ liệu thành nhiều khối đơn vị và áp dụng thuật toán mã nhiều lần, rồi sau sẽ kết hợp các khối dữ liệu thu được theo một sơ đồ nào đó. Có nhiều loại sơ đồ, hay còn gọi là chế độ mật mã khác nhau, với ưu nhược điểm khác nhau và được áp dụng cho các nhu cầu khác nhau. Sau đây là một số chế độ hay dùng. Chế độ bảng tra mã điện tử (Electronic code book - ECB) Trong chế độ này, các khối được tạo mật mã riêng biệt, độc lập. Do đó, những khối tin giống nhau sẽ được mã hóa thành những khối mã giống nhau. Điều này trở nên nguy hiểm, tạo miếng đất màu mỡ cho kẻ địch vận dụng tấn công replay cũng như thao tác biên tập theo khối.Kẻ thù có thể nghe trộm và tìm cách thu thập các mẫu tin-mã phổ biến, sau đó cắt ghép và trộn lẫn để tạo ra các bản mã giả mã bên nhận không phát hiện được. Ví dụ: Nếu ECB được sử dụng trong truyền tin mật trong giao dịch ngân hàng, kẻ địch có thể tấn công làm giả thông báo, lệnh chuyển tài khoản. Nhược điểm nói trên khiến cho việc truyền tin mật theo chế độ mã này là không có lợi, tuy nhiên chế độ này thường được dùng trong mã hóa thông tin lưu trữ, ví dụ như các cơ sở dữ liệu vì nó cho phép từng đơn vị dữ liệu được mã hóa độc lập và do đó có thể cập nhật thay đổi dễ TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 12
  37. Giáo trình An toàn & Bảo mật Thông tin 2012 dàng từng phần mà không động chạm đến các phần khác của cơ sở dữ liệu. Hình 2.8 Sơ đồ chế độ mật mã ECB Chế độ mã móc xích (Cipher Block Chaining - CBC) Trong chế độ này, mỗi khối tin trước khi được mã hóa thì được XOR với khối mã sinh ra từ bước trước đó. X1 = X1’  IV X2 = X2’  Y1 Xi = Xi’  Yi-1 Như vậy các khối mã đều phụ thuộc rất chặt vào nhau theo kiểu “móc xích”. Cũng qua đó có thể thấy rằng CBC sẽ tạo ra các khối bản mã khác nhau khi các khối tin đưa vào là giống nhau tức là che giấu được các mẫu tin-mã phổ biến khỏi sự theo dõi của kẻ thù, chặn đứng khả năng phá hoại bằng tấn công replay và biên tập nói trên. Tại bước đầu tiên, khi chưa có khối mã sinh ra từ bước trước, khối tin đầu sẽ được XOR với một vecto khỏi đầu, chọn ngẫu nhiên, ký hiệu là IV (initial vector). X i E E Xi X’i Yi . . . . . . . Yi X’i IV IV Hình 2.9 Sơ đồ chế độ mật mã CBC Tính chất phụ thuộc lẫn nhau của các khối bản mã còn đem lại một ưu thế nữa là ngăn chặn kẻ thù sửa đổi cắt xén mã truyền tin, vì dù chỉ thay đổi 1 bit trên mã cùng làm ảnh hưởng đến toàn bộ thông tin mà được giải mã từ đó, đến mức người nhận có thể phát hiện được dễ dàng do đoạn thông tin giải mã sẽ bị hoàn toàn vô nghĩa. TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 13
  38. Giáo trình An toàn & Bảo mật Thông tin 2012 Tuy nhiên tính chất đó cũng đem lại một mối hại là nếu như mã truyền đi bị sai 1 ít do nhiễu thì giải mã sẽ bị ảnh hưởng lan truyền nhiều, dẫn đến phải phát lại. Ngoài ra chế độ CBC mặc định sự xử lý tuần tự, do đó không thể thực hiện tính toán song song, tức là không thể cải tiến được tốc độ cho hệ máy tính song song. Liệu có tồn tại một cơ chế tấn công khác, thông minh hơn loại đã áp dụng cho ECB, để phá mã hoặc lợi dụng CBC? Lý luận về sự phụ thuộc móc xích mới chỉ cho ta một cảm giác an toàn chứ chưa phải là một chứng minh chặt chẽ. Tuy nhiên tính an toàn trong truyền tin mật của chế CBC đã được chứng minh chặt chẽ bằng phương pháp toán học Bài tập. Hãy so sánh 2 dạng sơ đồ mật mã dưới đây từ đó liên hệ giữa CBC với mật mã one- time-pad Sơ đồ A: Sử dụng một chuỗi ngẫu nhiên làm khóa chung Sơ đồ B: biểu diễn lại CBC Chế độ Mã phản hồi k-bit (k-bit Cipher Feedback Mode - CFB) Với một số ứng dụng thời gian thực yêu cầu dòng dữ liệu truyền đến phải liên tục hơn là gián đoạn (như là chuỗi ký tự truyền giữa host và terminal phải tạo thành dòng ký tự liên tục). Do đó các chế độ mật mã khối xử lý và truyền theo từng khối một trở nên không thích hợp; các mã stream cipher với đơn vị xử lý là ký tự - khối 8 bit sẽ là thích hợp hơn với dạng ứng dụng này. Chế độ CFB là một cải tiến cho phép tạo ra khả năng truyền khối nhỏ k-bit (với k tùy ý) trong khi vẫn dùng thuật toán mã khối. Dòng tin đi vào được ‘múc’ bằng từng ‘gầu’ với dung lượng k bit mà k là tham số thay đổi được. Thuật toán mật mã khối E chạy liên tục như một lò nấu: ở mỗi bước người ta lấy k bit (bên trái nhất) của vector đầu ra từ E để bỏ vào ‘gầu’ k bit tin, chúng được XOR với nhau. Kết TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 14
  39. Giáo trình An toàn & Bảo mật Thông tin 2012 quả k bit vừa được đem truyền đi, vừa được bỏ lại vào đầu vào của thuật toán mã khối: vecto đầu vào được dịch trái k vị trí và k bit phải nhất sẽ được thay thế bởi k bit lấy từ gầu tin. Như vậy có thể thấy rằng thuật toán mã khối được thực hiện như một hàm sinh các số giả ngẫu nhiên k-bit, các gía trị này lại được XOR với các phần tử k-bit tin lấy vào để tạo ra mã truyền đi. Qua trình giải mã thì được tiến hành theo nguyên tắc đối xứng. Rõ ràng chế độ này cũng cung cấp các khả năng như của chế độ CBC, thêm vào đó nó cho phép truyền tin với khối ngắn tùy ý, đảm bảo các ứng dụng về truyền-xử lý liên tục. l k l k E E l k l k i i Ptxt Ctxt Ptxt i i Hình 2.10 Sơ đồ chế độ mật mã CFB Chế độ mật mã kết quả phản hồi (Output Feedback Mode – OFB) Chế độ này cũng khá gần với hai chế độ trên đây, nhưng các phép XOR để tạo ra khối ciphertext là độc lập riêng rẽ, chứ không có sự phụ thuộc (móc xích) như trước. Các khối plaintext được XOR với các đầu ra – output – của các hàm sinh mã (thuật toán mật mã khối) mà riêng các phần tử output của hàm mã hóa này là vẫn phụ thuộc móc xích (nên được gọi là output feedback). Tuy nhiên chuỗi móc xích này có thể được thực hiện off-line thông qua tiền xử lý, trước khi thực sự có thông tin văn bản cần gửi đi. Chính vì vậy khả năng thời gian tính toán có thể được rút ngắn nhiều. Ngoài ra, chế độ này cũng cho phép mã khối nhỏ, như stream cipher, giống như với chế độ CFB vậy. Hình 2.11 Sơ đồ chế độ mật mã OFB TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 15
  40. Giáo trình An toàn & Bảo mật Thông tin 2012 Chế độ mật mã con đếm (Counter mode – CTR) Đây là chế độ mật mã mới được phát minh không lâu lắm (2000) và được cho là ưu tú nhất. Sơ đồ của nó đơn giản một cách đáng ngạc nhiên! Sự móc xích (feedback) giữa các khối đã được loại trừ hoàn toàn, làm cho CTR có những hiệu năng tính toán cao đáng mong ước Có thể xử lý song song dễ dàng vì các khối tính toán hòan tòan độc lập; ngoài ra cũng cho phép tiền xử lý để tính toán trước chuỗi phần tử output của hàm sinh mã (chẳng qua là chuỗi mã hóa của dãy số tự nhiên liên tiếp từ giá trị IV ban đầu). Không có sự phụ thuộc lẫn nhau nên có thể dùng vào mã hóa dữ liệu lưu trữ giống như với ECB: cho phép truy nhập ngẫu nhiên (random access) thay vì truy nhập tuần tự như với CBC chẳng hạn. Mặc dù có sơn đồ tính toán rất đơn giản, tính an toàn của chế độ này đã được chứng minh đầy đủ bằng công cụ toán học hình thức, trên cơ sở thông qua so sánh với mật mã one-time-pad (đạt bí mật tuyệt đối. Hình 2.12 Sơ đồ chế độ mật mã CTR TS. Nguyễn Khanh Văn Viện CNTT-TT, ĐHBKHN Page 16
  41. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh CHƯƠNG 3 Hê thông mât mã khóa công khai 1. Giới thiệu Như đã nêu, các hệ thống mật mã đã giới thiệu cho đến giờ đều được gọi là các hệ mật mã khóa đối xứng (Symmtric Key Cryptosystems) do vai trò hai bên gửi và nhận tin đều như nhau vì đều sở hữu chung một khoá bí mật. Cũng có nhiều cách gọi khác đối với các hệ mật mã này, sử dụng tùy vào các ngữ cảnh phù hợp: Hệ mã với khóa sở hữu riêng (Private Key Cryptosystems) Hệ mã với khóa bí mật (Secret Key Cryptosystems) Hệ mã truyền thống (Conventional Cryptosystems) Chúng ta sẽ sử dụng ký hiệu viết tắt cho hệ mật mã đối xứng là SKC. B KAB A KCD KAD KAC KBC C D KCD Tuy nhiên các hệ mã đối xứng có những nhược điểm cơ bản như sau: Vấn đề quản lý khoá (tạo, lưu mật, trao chuyển ) là rất phức tạp khi sử dụng trong môi trường trao đổi tin giữa rất nhiều người dùng. Với số lượng NSD là n thì số lượng khoá cần tạo lập là n(n-1)/2. Mỗi người dùng phải tạo và lưu n-1 khoá bí mật để làm việc với n-1 người khác trên mạng. Như vậy rất khó khăn và không an toàn khi n tăng lớn. Thứ hai là, trên cơ sở mã đối xứng, ta không thể thiết lập được khái niệm chữ ký điện tử (mà thể hiện được các chức năng của chữ ký tay trong thực tế) và cũng do đó không có dịch vụ non-repudiation1 (không thể phủ nhận được) cho các giao dịch thương mại trên mạng. Vấn đề là ở chỗ trong hệ SKC, thông tin mật được chia sẻ chung bởi cả hai bên Alice và Bob, do đó Alice có thể làm được bất kỳ cái gì mà Bob làm và ngược lại. Giải pháp duy nhất cho vấn đề này là phải có thêm một thành phần thứ ba trong bất cứ giao dịch nào giữa Alice và Bob, tức là một người có thẩm quyền (trusted authority) mà cả Alice và Bob đều 1 Non-repudiation là được đảm bảo cho một quá trình giao dịch giữa Alice (A) và Bob (B) nếu trong mọi trường hợp mỗi bên đều có bằng chứng để chứng gian những trường hợp phía bên kia chối bỏ một giao dịch nào đó, ví dụ A có thể chối không thực hiện một giao dịch X nào đó với B bằng việc lấy cớ là có kẻ đã mạo nhận A để làm bậy. Chương III - 1 -
  42. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh tin tưởng là trung thực. Người này sẽ làm chứng và trọng tài trong trường hợp xảy ra tranh cãi giữa hai bên trung thực. Người này sẽ làm chứng và trọng tài trong trường hợp xảy ra tranh cãi giữa hai bên Alice và Bob. Tuy nhiên công việc của người trọng tài này sẽ rất nặng vì phải tham gia vào tất cả các giao dịch của các bên, và sớm muộn cũng sẽ trở thành điểm quá tải về giao thông truyền tin cũng như tốc độ xử lý điểm tắc ngẽn cổ chai (bottleneck). Sớm nhận thức những vấn đề đó, Diffie & Hellman trong công trình nổi tiếng của mình (1976) đã đề xuất những tư tưởng về một loại hệ mã với nguyên tắc mới, xây dựng xoay quanh một NSD – chủ nhân hệ thống – chứ không phải là xoay quanh một cặp NSD như trong bài toán kênh truyền tin mật truyền thống. Trong hệ thống mới này, mỗi NSD có hai khoá, một được gọi là khoá bí mật (secret key hay private key) và một được gọi là khoá công khai (public key). Khoá thứ nhất chỉ mình user biết và giữ bí mật, còn khoá thứ hai thì anh ta có thể tự do phổ biến công khai. Khoá thứ nhất thường đi liền với thuật toán giải mã, còn khoá thứ hai thường đi liền với thuật toán sinh mã, tuy nhiên điều đó không phải là bắt buộc. Ta hãy ký hiệu chúng là z (khóa riêng) và Z (khóa công khai) Hoạt động của chúng là đối xứng X = D(z, E(Z, X)) (1) và X = E(Z, D(z, X)) (2) Trong đó hệ thức (1) biểu tượng cho bài toán truyền tin mật: bất kỳ NSD nào khác như B,C,D muốn gửi tin cho A chỉ việc mã hoá thông tin với khoá công khai (ZA) của A rồi gửi đi. Chỉ có A mới có thể khoá riêng để giải mã (zA) và đọc được tin; kẻ nghe trộm Eve không thể giải mã để lấy được tin vì không có khoá zA. Còn hệ thức (2) sẽ được sử dụng để xây dựng các hệ chữ ký điện tử như sau này ta sẽ nghiên cứu, trong đó thao tác Ký chính là thực hiện E(ZA) còn kiểm định chữ ký là thông qua gọi D(zA). Hệ mật mã theo nguyên tắc nói trên được gọi là hệ mã với khoá công khai (public key cryptosystems) hay còn được gọi là mã khóa phi đối xứng (asymmetric key cryptosystems). Ta sẽ viết tắt hệ thống kiểu này bằng PKC. Nguyên tắc cấu tạo một hệ PKC sử dụng cửa bẫy (trapdoor) Một hệ mã PKC có thể được tạo dựng trên cơ sở sử dụng một hàm một chiều (one-way). Một hàm f được gọi là một chiều nếu: 1. Đối với mọi X tính ra Y = f(X) là dễ dàng. 2. Khi biết Y rất khó để tính ngược ra X. Chương III - 2 -
  43. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh Ví dụ 3.1. Cho n số nguyên tố p1, p2, pn ta có thể dễ dàng tính được N = p1 * p2 * * pn, tuy nhiên khi biết N, việc tìm các thừa số nguyên tố của nó là khó khăn hơn rất nhiều, đặc biệt là khi N lớn và các thừa số nguyên tố của nó cũng lớn. Tuy nhiên, chúng ta cần một hàm một chiều đặc biệt có trạng bị một cửa bẫy (trap door) sao cho nếu biết sử dụng nó thì việc tìm nghịch đào của f là dễ dàng, còn nếu không (không biết bí mật cửa bẫy) thì vẫn khó như thường. Một hàm một chiều có cửa bẫy như thế có thể dùng để tạo ra một hệ mã PKC như sau. Lấy EZ (hàm sinh mã) là hàm một chiều có cửa bẫy này. Như vậy bí mật cửa bẫy chính là khóa bí mật z, mà nếu biết nó thì có thể dễ dàng tính được cái nghịch đảo của EZ tức là biết Dz, còn nếu không biết thì rất khó (chỉ còn cách thử vét cạn, thực tế sẽ là bất khả thi vì khối lượng tính toán quá lớn). Sau đây chúng ta sẽ khảo sát hai ví dụ về việc xây dựng hàm một chiều có cửa bẫy. Ví dụ đầu tiên là một cố gắng nhưng thất bại, hệ Trapdoor Knapsack. Ví dụ thứ hai là một hệ đã thành công và rất nổi tiếng, đó là hệ RSA. 2. Merkle-Hellman Trapdoor Knapsack (Cửa bẫy dựa trên bài toán đóng thùng) Vào năm 1978, hai ông Merkle và Hellman đã đề xuất một thuật toán mã hoá theo mô hình PKC dựa trên bài toán ĐÓNG THÙNG (hay còn gói là bài toán “cái túi”, hay “ba lô”) như sau: Cho 1 tập hợp các số dương ai, 1 i n và một số T dương. Hãy tìm một tập hợp chỉ số S  1,2, ,n  sao cho:  i S ai = T Bài toán này là một bài toán khó (NP-khó), theo nghĩa là chưa tìm được thuật toán nào tốt hơn là thuật toán thử-vét cạn và như vậy thời gian xử lý sẽ là hàm mũ (trong khi bài toán được quan niệm là dễ theo nghĩa tin học nếu có thuật toán thời gian đa thức). Ví dụ 3.2 (a1, a2, a3, a4) = (2, 3, 5, 7) T = 7. Như vậy ta có 2 đáp số S = (1, 3) và S = (4). Từ bài toán Đóng thùng này chúng ta sẽ khảo sát các khả năng vận dụng để tạo ra thuật toán mã khối PKC. Sơ đồ đầu tiên như sau: Chọn một vector a = (a1, a2, , an) - được gọi là vector mang (cargo vector) Với một khối tin X = (X1,X2,X3 , Xn), ta thực hiện phép mã hoá như sau: T=  aiXi (*) i=1,n Việc giải mã là: Cho mã T, vector mang a, tìm các Xi sao cho thoả mãn (*). Chương III - 3 -
  44. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh Sơ đồ này đã thể hiện một hàm một chiều mà dùng làm sinh mã thì tính toán dễ dàng nhưng việc giải mã, tức tính hàm ngược của nó, là rất khó. Bây giờ ta sẽ tiếp tục tìm cách đưa vào một cửa bẫy (trapdoor) để việc giải mã có thể làm được dễ dàng (nếu biết cửa bẫy bí mật). Merkle áp dụng một mẹo dựa trên sử dụng vector mang đặc biệt là vector siêu tăng (super- increasing) như sau. Một vectơ là siêu tăng nếu thành phần i+1 là lớn hơn tổng giá trị của các thành phần đứng trước nó (1i). Khi sử dụng một vector siêu tăng làm vector mang thì sẽ thấy việc tính ngược, tức là giải bài toán đóng thùng là dễ dàng nhờ một giải thuật thăm ăn đơn giản. Điều này được minh họa qua ví dụ bằng số sau. Ví dụ 3.3 Vector mang siêu tăng: a=(1,2,4,8) Cho T=14, ta sẽ thấy việc tìm X=(X1,X2,X3,X4) sao cho T=  aiXi là dễ dàng: Đặt T=T0 X4=1 T1=T0-X4=6 (X1 X2 X3 1) X3=1 T2=T1-X3=2 (X1 X2 1 1) X2=1 T3=T2-2=0 (X1 1 1 1) X1= 0 (0 1 1 1) Ở bước i, tổng đích là Ti (tức là phải tìm các aj để tổng bằng Ti). Ta đem so sánh Ti với thành phần lớn nhất trong phần còn lại của vector, nếu lớn hơn thì thành phần này được chọn tức là Xi tương ứng bằng 1, còn ngược lại thì Xi tương ứng bằng 0. Sau đó tiếp tục chuyển sang bước sau với Ti+1 = Ti-Xi. Mặc dù ta đã thấy sử dụng vector siêu tăng là vector mang cho phép giải mã dễ dàng nhưng, tất nhiên, ta còn phải làm thế nào để cho chỉ có người chủ mới biết được và sử dụng nó còn kẻ thù thì không. Tóm lại, cần tạo ra một bí mật cửa bẫy thông qua việc người chủ phải chủ động “nguỵ trang” vector siêu tăng để chỉ có anh ta mới biết còn người ngoài không thể lần ra được. Sơ đồ sau đây sẽ trình bày một cơ chế nguỵ trang như vậy. Vector a’ là một vector siêu tăng bí mật, sẽ được “ngụy trang”, tức là biến đối thông qua một hàm g được chọn sẵn để tạo thành vector a không hề có tính siêu tăng (thậm chí là có thể giảm); vector a này sẽ được sử dụng làm vector mang. Trong quá trình giải mã, người chủ (Alice) sẽ thực hiện một biến đổi vào dữ liệu, trên cơ sở áp dụng hàm ngược g-1, chuyển việc giải mã thành giải một bài toán đóng thùng với vector siêu tăng là vector mang. Phép biến đổi g được chọn chính là phép nhân đồng dư với một giá trị khóa bí mật. Chương III - 4 -
  45. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh Tạo khoá: 1. Alice chọn một vector siêu tăng: a’ = (a1’,a2’, ,an’) a’ được giữ bí mật tức là một thành phần của khoá bí mật 2. Sau đó chọn một số nguyên m >  ai’, gọi là mo-dul đồng dư và một số nguyên ngẫu nhiên , gọi là nhân tử, sao cho nguyên tố cùng nhau với m. Khoá công khai của Alice sẽ là vector a là tích của a’ với nhân tử : a = (a1,a2, ,an) ai= ai’ (mod m); i=1,2,3 n Còn khoá bí mật sẽ là bộ ba (a’, m, ) Sinh mã: Khi Bob muốn gửi một thông báo X cho Alice, anh ta tính mã theo công thức: T= aiXi Giải mã: Alice nhận được T, giải mã như sau: 1. Để bỏ lớp nguỵ trang cô ta trước hết tính -1 (là giá trị nghịch đảo của , tức là  -1 =1 mod m, sẽ giới thiệu thuật toán tính sau), rồi tính T’=T -1 (mod m) 2. Alice biết rằng T’ = a’. X nên cô ta có thể dễ dàng giải ra được X theo siêu tăng a’. Chú thích: ở đây ta có -1 -1 -1 -1 -1 T’ = T  =  aiXi =  ai’Xi =  (ai’ )Xi =  ai’Xi = a’.X Như vậy chúng ta đã xem xét xong sơ đồ cụ thể của Merkle-Hellman về một hệ PKC dựa trên bài toán đóng thùng. Tấn công vũ lực (Brute Force Attack) Ban đầu tấn công vũ lực được xem là cách duy nhất để phá hệ thống mật mã này. Với những kẻ không biết trapdoor (a’, m, ), phá giải mã đòi hỏi phải tìm kiếm vét cạn qua 2n khả năng của X. Vì vậy với n được chọn đủ lớn tấn công vũ lực là bất khả thi về khối lượng tính toán. Tuy nhiên tấn công vũ lực không phải là cách duy nhất. Sự đổ vỡ của giải pháp dùng Knapsack (1982-1984). Shamir-Adleman đã chỉ ra chỗ yếu của giải pháp này bằng cách đi tìm 1 cặp (’,m’) sao cho nó có thể biến đổi ngược a về a’ (tính được khóa bí mật - Private key – từ khóa công khai). Năm 1984, Brickell tuyên bố sự đổ vỡ của hệ thống Knapsack với dung lượng tính toán khoảng 1 giờ máy Cray -1, với 40 vòng lặp chính và cỡ 100 trọng số. Thuật toán tìm giá trị nghịch đảo theo modul đồng dư Việc xây dựng Knapsack với cửa bẫy đòi hỏi phải tính giá trị nghịch đảo của  theo modul m. Thuật toán tìm x = -1 mod m, sao cho x. = 1 (mod m) được gọi là thuật toán GCD Chương III - 5 -
  46. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh mở rộng hay Euclide mở rộng (GCD - Greatest common divior - ước số chung lớn nhất). Sở dĩ như vậy là vì trong khi đi tìm ước số chung lớn nhất của hai số nguyên n1 và n2, người ta sẽ tính luôn các giá trị a,b sao cho GCD(n1, n2) = a*n1 + b*n2. Từ đó suy ra nếu ta đã biết (n1,n2)=1 thì thuật toán này sẽ cho ta tìm được a, b thoả mãn a*n1 + b*n2=1, tức là n1 chính là nghịch đảo của a theo modulo n2 (tức là m) Sau đây là sơ đồ thuật toán và một ví dụ áp dụng bằng số Start n1, n2 n1>0 Initialization: UPDATE: a1=1, b1=0 a2 = 0, b2 = 1 n1=n2 n2 = r t=a2 Compute quotient q and remainder r a2 = a1 - q* a2 when n1 is divided by n2 a1 = t g = n2 t=b2 No Yes r=0 a = a2 b2=b1-q*b2 b = b2 b1 = t g,a,b Ví dụ 3.4. Tìm ngịch đảo của 39 theo modulo 11 Đặt n1=39, n2=11 ta có bảng tính minh họa các bước như sau: n1 n2 r q a1 b1 a2 b2 39 11 6 3 1 0 0 1 11 6 5 1 0 1 1 -3 6 5 1 1 1 -3 -1 4 5 1 -1 4 2 -7 Dễ thấy a=a2=2 chính là nghịch đảo của 39 theo modulo 11 Kể từ năm 1976, nhiều giải pháp cho PKC đã được nêu ra nhưng khá nhiều trong số đó đã bị phá vỡ hoặc bị chê là không thực dụng do dung lượng tính toán lớn hoặc thông tin nở ra quá lớn khi mã hoá. Chương III - 6 -
  47. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh Một hệ thống PKC có thể sử dụng vào 2 mục đích cơ bản: (1) Bảo mật thông tin và truyền tin (2) Chứng thực và chữ ký điện tử. Hai thuật toán đáp ứng các ứng dụng trên thành công nhất là RSA và Elgamal. Nói chung thuật toán PKC là chậm và không thích hợp cho mật mã trên dòng (online) với truyền tin tốc độ cao, vì vậy chỉ thường được sử dụng khi cần đến tính an toàn cao và chấp nhận tốc độ chậm. Ngoài ra người ta thường sử dụng kết hợp PKC và SKC (symmetric key cryptosystems) với PKC có tác dụng “khởi động mồi” cho SKC: dùng PKC để thiết lập thuật toán tạo ra khoá bí mật thống nhất chung giữa hai bên truyền tin sau đó sử dụng khoá bí mật trên cho pha truyền tin chính bằng SKC sau đó. 3. Hệ thống khóa công khai RSA RSA là hệ mật mã khóa công khai phổ biến và cũng đa năng nhất trong thực tế, phát minh bởi Rivest, Shamir & Adleman (1977). Nó là chuẩn mật mã bất thành văn đối với PKC, cung cấp đảm bảo tính mật, xác thực và chữ ký điện tử. Cơ sở thuật toán RSA dựa trên tính khó của bài toán phân tích các số lớn ra thừa số nguyên tố: không tồn tại thuật toán thời gian đa thức (theo độ dài của biểu diễn nhị phân của số đó) cho bài toán này. Chẳng hạn, việc phân tích một hợp số là tích của 2 số nguyên tố lớn hàng trăm chữ số sẽ mất hàng ngàn năm tính toán với một máy PC trung bình có CPU khoảng trên 2Ghz. Ý tưởng (Motivation) Các nhà phát minh có lựa chọn khá giản dị là xây dựng thuật toán sinh/giải mã trên cơ sở phép toán lấy luỹ thừa đồng dư trên trường Zn = {0,1,2, n-1}. Chẳng hạn, việc sinh mã cho tin X sẽ được thực hiện qua: Y = X e n Ở đây ta dùng ký hiệu a = b + n nghĩa là a = b + k* n với a Zn còn k = 1,2,3, , ví dụ 7 = 33 + 10) còn việc giải mã: X = Y d n (e – khóa sinh mã, d – khóa giải mã) Như vậy để hai hàm sinh mã và giải mã này là hàm ngược của nhau, e và d phải được chọn sao cho: Xed = X+ n Người ta đã tìm được cách xây dựng cặp số (e,d) này trên cơ sở công thức như sau: X  (n) 1+ n (định lý Ơ - le) Trong đó (n) hàm số cho biết số lượng các số thuộc Zn mà nguyên tố cùng nhau với n. Người ta cần chọn e*d sao cho chia (n) dư 1, hay d= e-1 +  (n), khi đó ta sẽ có điều cần thiết: Xed = Xk.(n)+1 =(X(n))d * X = 1*X =X Chương III - 7 -
  48. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh (n) có thể tính được khi đã biết công thức phân tích thừa số nguyên tố của n, cụ thể là nếu đã biết n = p*q (p.q là số nguyên tố) thì (n) = (p-1) (q-1). Nói cách khác nếu như cho trước một số e thì nếu đã biết công thức phân tích thừa số nguyên tố của n ta có thể dễ dàng tìm được d sao cho d = e-1 + (n) hay là Xed = X + n, còn nếu không biết thì rất khó. Vừa rồi là phần trình bày dẫn dắt về cội nguồn của thuật toán, sau đây là thuật toán cụ thể. Thuật toán RSA Xây dựng: Chọn các tham số 1. Chọn hai số nguyên tố lớn p và q. Tính n = p x q và m = (n) = (p = 1) x (q-1). 2. Chọn e, 1 e m -1, sao cho gcd (e, m) = 1. 3. Tìm d sao cho e * d = 1 (mod m), tức là tính d = e-1 (mod m), giải theo thuật toán gcd mở rộng đã trình bày ở phần trước. Khóa công khai (Public key) là (e, n) Khoá dùng riêng (Private key) là d, p, q) Giả sử X là một khối tin gốc (plaintext), Y là một khối mã tương ứng của X, và (z A , Z A ) là các thành phần công khai và riêng của khoá của Alice Mã hoá. Nếu Bob muốn gửi một thông báo mã hoá cho Alice thì anh ta chỉ việc dùng khoá công khai của Alice để thực hiện: Y E (X ) X e n Z A Giải mã: Khi Alice muốn giải mã Y, cô ta chỉ việc dùng khoá riêng zA = d để thực hiện như sau: D (Y ) Y d n zA Ví dụ 3.5 Chọn p = 11 và q = 13 n=11*13=143 m= (p-1)(q-1) =10 *12=120 e=37 gcd (37,120) =1 Sử dụng thuật toán gcd để tìm sao cho e * d =1 120, ta tìm được d= 13 (e*d =481) Để mã hoá một xâu nhị phân, ta phải “bẻ” ra thành nhiều đoạn độ dài là u bit, sao cho 2u ≤ 142. Do đó u = 7. Mỗi đoạn như vậy sẽ là một con số nằm trong khoản 0 - 127 và ta có thể tính mã Y theo công thức: Y X e 120 Chẳng hạn với X = (0000010) =2, ta có 37 EZ (X ) X 12 143 Y= (00001100) Giải mã như sau: 13 X Dz (Y ) 12 2 143 Chương III - 8 -
  49. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh Để tiện cho việc giao dịch trên mạng có sử dụng truyền tin mật, người ta có thể thành lập các Public Directory (thư mục khoá công khai), lưu trữ các khoá công khai của các user. Thư mục này được đặt tại một điểm công cộng trên mạng sao cho ai cũng có thể truy nhập tới được để lấy khoá công khai của người cần liên lạc. User (n,e) Alice (85,23) Bob (117,5) Cathy (4757,11) . . . . . . Một số ứng dụng cơ bản (của các hệ thống mật mã khóa công khai nói chung) a. Bảo mật trong truyền tin (Confidentiality) EZ (X ) A sẽ gửi B cho B. B dễ dàng giải mã bằng khóa bí mật zB b. Chứng thực + Alice ký lên tin cần gửi bằng cách mã hoá với khoá bí mật của cô ta D (X ) và gửi z A (X , S) (X , D (X )) cho Bob z A + Khi Bob muốn kiểm tra tính tin cậy của tin nhận được, anh ta chỉ việc tính X ' E (X ) E (D (X )) và kiểm tra nếu X = X’ thì xác thực được tính tin cậy Z A Z A zA (authenticity) của X. Chú ý 1: Trong quá trình này cả việc kiểm tra (i) tính toàn vẹn của thông báo và việc (ii) xác thực danh tính của người gửi được thực hiện cùng một lúc. Ta có (i) là vì chỉ cần một bit của tin mà bị thay đổi thì sẽ lập tức bị phát hiện ngay do chữ ký không khớp. Ngoài ra có (ii) vì không ai có thể tạo ra được thông báo đó ngoài Alice, người duy nhất biết zA. Chú ý 2: Alice có thể ký vào giá trị băm (hash) của X thay vì ký thẳng lên X. Khi đó toàn bộ mã mà Alice sẽ chuyển cho Bob là (X , D (H (X ))) . H là một hàm băm công khai. z A Phương pháp này là hiệu quả hơn do tiết kiệm (hàm băm luôn cho ra một xâu độ dài cố định và thông thường ngắn hơn rất nhiều so với xâu đầu vào). c. Kết hợp tính mật và tin cậy. Chúng ta có thể làm như sau để kết hợp cả hai khả năng a và b như trên. A gửi Y E (D (X )) cho B Z B zA B phục hồi X như sau: X E (D (Y)) E (D (E (D (X )))) Z A zB Z A zB ZB zA Để có bằng chứng nhằm đối phó với việc Alice có thể sau này phủ nhận đã gửi thông báo (non-repudiation) thì Bob phải lưu giữ D (X ) z A Một số vấn đề xung quanh thuật toán RSA Vấn đề chọn p và q: + p và q phải là những số nguyên tố lớn, ít nhất là cỡ 100 chữ số. Chương III - 9 -
  50. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh + p và q phải lớn cỡ xấp xỉ nhau ( về độ dài cùng 100 chữ số chẳng hạn). Bài tập: Tại sao lại có điều kiện thứ 2? Một vài con số về tốc độ thuật toán trong cài đặt: So sánh với DES thì RSA: + Có tốc độ chậm hơn rất nhiều. Thường thì, RSA chậm ít nhất là 100 lần khi cài đặt bằng phần mềm, và có thể chậm hơn từ 1000 đến 10,000 lần khi cài đặt bằng phần cứng (còn tùy cách cài đặt) + Kích thước của khoá mật lớn hơn rất nhiều. Nếu như p và q cần biểu diễn cỡ 300 bits thì n cần 600 bits. Phép nâng lên luỹ thừa là khá chậm so với n lớn, đặc biệt là nếu sử dụng phần mềm (chương trình). Người ta thấy rằng thực hiện một phép nhân cỡ m + 7 nhịp Clock khi kích thước n là m bit. Về bài toán phân tích ra thừa số nguyên tố Giải thuật tốt nhất vẫn là phương pháp sàng số. Một ước lượng về thời gian thực hiện của giải thuật là: 1 9.7 log n L(n) 10 50 2 Trong đó log2n cho số biết số bit cần để biểu diễn n, số cần phân tích ra thừa số nguyên tố. Từ đó rút ra, nếu tăng n lên thêm 50 bit (quãng 15 chữ số thập phân) thì thời gian làm phân tích ra thừa số nguyên tố tăng lên 10 lần. Vào những năm cuối của thế kỷ 20, người ta đã ước lượng thấy, với n=200, L(n) 55 ngàn năm. Đối với khả năng thực hiện bằng xử lý song song, một trong các kết quả tốt nhất về phân tích TSNT với số lớn cho biết đã phân tích một số có 129 chữ số, phân bố tính toán trên toàn mạng Internet và mất trọn 3 tháng. Như đã nêu, những số nguyên khó phân tích thừa số nhất là những hợp số là tích của 2 số nguyên tố có độ lớn xấp xỉ nhau (vì vậy các số nguyên tố p và q thường được chọn như vậy trong RSA). Từ điển Bách khoa mở, Wikipedia trên Internet, cho biết số nguyên có dạng như vậy lớn nhất cho đến nay mà được phân tích thừa số thành công, ký hiệu là RSA- 768, có 768 bit hay 232 chữ số thập phân. Nó được phân tích thành công vào ngày 12/12/2009 nhờ sự cộng tác của nhiều cơ sở nghiên cứu hiện đại trong vòng 2 năm trời. Lượng tính toán thực hiện trên nguyên lý xử lý song song được so sánh tương đương với 2000 năm chạy liên tục của một cấu hình xử lý 2.2 GHz AMD Opteron RSA-768 = 12301866845301177551304949583849627207728535695953347921973224521517264005 07263657518745202199786469389956474942774063845925192557326303453731548268 50791702612214291346167042921431160222124047927473779408066535141959745985 6902143413 RSA-768 = 33478071698956898786044169848212690817704794983713768568912431388982883793 878002287614711652531743087737814467999489 Chương III - 10 -
  51. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh × 36746043666799590428244633799627952632279158164343087642676032283815739666 511279233373417143396810270092798736308917 Vấn đề đi tìm số nguyên tố lớn: Một thuật toán để tạo ra tất cả các số nguyên tố là không tồn tại, tuy nhiên có những thuật toán khá hiệu quả để kiểm tra xem một số cho trước có phải là nguyên tố hay không (bài toán kiểm tra tính nguyên tố). Thực tế, việc tìm các số nguyên tố lớn cho RSA là một vòng lặp như sau: 1. Chọn một số ngẫu nhiên p nằm trong một khoảng có độ lớn yêu cầu (tính theo bit) 2. Kiểm tra tính nguyên tố của p, nếu là nguyên tố thì dừng lại, nếu không thì quay lại bước 1. Những thuật toán tất định để kiểm tra tính nguyên tố là khá tốn thời gian và đòi hỏi được thực hiện trên máy tính có tốc độ cao. Tuy nhiên người ta cũng còn sử dụng các thuật toán xác suất, có khả năng ‘đoán’ rất nhanh xem một số có phải nguyên tố không. Các thuật toán xác suất này không đưa ra quyết định đúng tuyệt đối, nhưng cũng gần như tuyệt đối; tức là xác suất báo sai có thể làm nhỏ tùy ý, chỉ phụ thuộc vào thời gian bỏ ra. Xét ví dụ một thuật toán xác suất, dựa trên phương pháp sau đây của Lehmann. Phương pháp Lehmann: Giả sử n là một số lẻ, với mỗi số nguyên a ta hãy ký hiệu: n 1 G(a,n) = a 2 n Ví dụ: Với n=7, ta có 23=1, 33=6, 43=1, 53=6, 63=1; tức là G= 1,6. Theo Lehmann, nếu n là một số lẻ thì G(a,n)= 1,n-1 với mọi a nguyên khi và chỉ khi n là số nguyên tố. Tuy nhiên với n hợp số, khả năng G(a,n)= 1,n-1 vẫn xảy ra với xác suất 50% cho mỗi số nguyên a nguyên tố cùng nhau với n lựa chọn bất kỳ. Từ kết quả này, ta có phép thử như sau khi cần xác định tính nguyên tố của một số nguyên n: * 1. Chọn ngẫu nhiên một số a Zn 2. If (gcd(a,n) >1) return (“là hợp số”) else n 1 n 1 3. If ( If (a 2 1|| a 2 1) return (“ có thể là nguyên tố”) else return (“là hợp số”) Nếu như thực hiện phép thử này 100 lần và luôn thu được câu trả lời “có thể là nguyên tố” thì xác suất n không phải là số nguyên tố (‘đoán nhầm’) sẽ chỉ là 2-100. Chương III - 11 -
  52. Nguyễn Khanh Văn & Mật mã và An toàn Thông tin ĐHBKHN-2012 Trần Đức Khánh Để có thể tìm được số lớn với tính nguyên tố chắc chắn tuyệt đối, người ta có thể sử dụng phương pháp xác suất này để loại bỏ nhanh chóng các hợp số và chỉ thực hiện phép kiểm tra tất định cuối cùng với các số đã đáp ứng tốt ở phép thử. Giải thuật tính luỹ thừa nhanh Luỹ thừa có thể được tính như thông thường bằng phép nhân liên tục tuy nhiên tốc độ sẽ chậm. Luỹ thừa trong trường Zn (modulo n) có thể tính nhanh hơn nhiều bằng giải thuật sau đây. Giải thuật này sử dụng hai phép tính là tính bình phương và nhân. Để tính X (modul n): 1. Xác định các hệ số i trong khai triển của trong hệ nhị phân: 0 1 2 k = 02 + 12 + 22 + + k2 i 2. Dùng vòng lặp k bước để tính k giá trị X 2 n, với i=1,k : X 2 X X X 4 X 2 X 2 k k 1 k 1 X 2 X 2 X 2 i 3. Từ bước 1, ta tính được X n bằng cách đem nhân với nhau các giá trị X 2 n đã tính ở bước 2 nếu như i tương ứng của nó là 1: i 1, i 0 (X 2 ) i 2i X , i 1 Ví dụ 3.6: Xét RSA với n =179, e =73. Với X= 2 ta có Y= 273 179 73 = 64+8+1 = 26+23+20. Y=264+8+1 = 264 28 21 Điểm yếu của giải thuật RSA Trong hệ RSA, không phải tất cả các thông tin đều được che giấu tốt, tức là mọi khoá đều tốt và đều làm bản rõ thay đổi hoàn toàn. Ví dụ 3.7: n = 35 = 5 x 7, m = 4 x 6 e = 5 (GCD (5,24) = 1) X = 8 Y = Xe 35 = 8 = X! Đối với bất kỳ khoá nào tồn tại ít nhất 9 bản rõ bị ‘phơi mặt’, tuy nhiên đối với n 200 điều đó không còn quan trọng. Mặc dù vậy phải chú ý là nếu e không được chọn cẩn thận thì có thể gần đến 50% bản rõ bị lộ. Chương III - 12 -