Vì bản gửi đi thường được chuyển qua các con đường công khai nên người ngoài có thể "lấy trộm" được, nhưng do đó là bản mật mã nên không đọc hiểu được, còn A có thể tạo ra bản mã mật và
Trang 1LỜI CAM ĐOAN
Tôi xin cam đoan toàn bộ nội dung của luận văn và các số liệu là công trình nghiên cứu của tôi dưới sự hướng dẫn của PGS.TS Phan Trung Huy giảng viên Viện Toán ứng dụng và Tin học, Trường Đại học Bách khoa Hà Nội
Trang 2MỤC LỤC
Trang
DANH MỤC CÁC HÌNH ẢNH 4
PHẦN MỞ ĐẦU 5
CHƯƠNG 1: TỔNG QUAN VỀ CÁC HỆ MÃ 9
1.1 Sơ lược lịch sử về mật mã 9
1.2 Các hệ thống mật mã 13
1.2.1 Sơ đồ hệ thống mật mã 13
1.2.2 Mã hóa theo khối và mã theo dòng 15
1.3 Các bài toán về an toàn thông tin 17
1.4 Thám mã và tính an toàn của các hệ mật mã 18
1.4.1 Vấn đề thám mã 18
1.4.2 Tính an toàn của một hệ mật mã 19
1.5 Sơ lược về hệ mã Affine 21
1.5.1 Nghiên cứu mã Affine trên vành Z26 21
1.5.2 Thám mã với hệ mã Affine 26
CHƯƠNG 2: HỆ MÃ LUÂN PHIÊN 28
2.1 Tích không nhập nhằng 29
2.2 Mã luân phiên và đặc trưng của mã luân phiên 33
2.3 Thuật toán kiểm tra mã luân phiên chẵn, mã luân phiên 37
CHƯƠNG 3: KỸ THUẬT TẤN CÔNG, PHƯƠNG PHÁP PHÒNG CHỐNG VÀ CHƯƠNG TRÌNH MÃ HÓA, GIẢI MÃ 39
3.1 Kỹ thuật tấn công 39
3.1.1 Tổng quan các kỹ thuật tấn công 39
3.1.2 Các giai đoạn cơ bản tấn công website gồm: 40
3.2 Phương pháp phòng chống 42
3.2.1 Đối với hệ thống 42
3.2.2 Đối với những người tham gia 47
Trang 33.3.1 Sơ đồ mã hóa và giải mã với hệ mã Affine 52
3.3.2 Sơ đồ mã hóa và giải mã với hệ mã kết hợp ALT - Affine 53
3.3.3 Chương trình ứng dụng 55
3.3.4 Các bước chạy chương trình mã hóa và giải mã ALT - Affine 56
KẾT LUẬN 63
TÀI LIỆU THAM KHẢO 65
PHỤ LỤC 68
Trang 4DANH MỤC CÁC HÌNH ẢNH
Trang
Hình 2.1 Các bao trùm của hai phân tích của từ w 31
Hình 3.1 Sơ đồ mã hóa với hệ mã Affine 52
Hình 3.2 Sơ đồ giải mã với hệ mã Affine 52
Hình 3.3 Sơ đồ mã hóa với hệ mã kết hợp ALT - Affine 53
Hình 3.4 Sơ đồ giải mã với hệ mã kết hợp ALT - Affine 54
Hình 3.5 Giao diện chính của chương trình 55
Hình 3.6 Thông báo việc tạo và ghi mã thành công 56
Hình 3.7 Hộp thoại Open dùng để chọn tệp khóa 57
Hình 3.8 Hộp thoại Open dùng để chọn tệp tin cần mã hóa 57
Hình 3.9 Giao diện chính của chương trình 58
Hình 3.10 Thông báo thực hiện việc mã hóa thành công 58
Hình 3.11 Hộp thoại Open dùng để chọn tệp khóa 59
Hình 3.12 Hộp thoại Open dùng để chọn tệp tin cần giải mã 60
Hình 3.13 Giao diện chính của chương trình 60
Hình 3.14 Hộp thoại Save As dùng để lưu tệp tin sau khi giải mã 61
Hình 3.15 Thông báo thực hiện việc giải mã thành công 61
Trang 5PHẦN MỞ ĐẦU
1 Lý do chọn đề tài
Sự phát triển mạnh mẽ của công nghệ thông tin, việc ứng dụng mạng máy tính để trao đổi thông tin là rất lớn Thông tin được trao đổi
và chia sẻ một cách dễ dàng Các thông tin về kinh tế, chính trị, khoa học
xã hội được trao đổi rộng rãi Tuy nhiên vấn đề về an toàn thông tin được mọi đơn vị, cá nhân rất quan tâm, nếu những thông tin quan trọng
bị đánh cắp thì sẽ để lại hậu quả khó có thể lường trước được
Để vừa đảm bảo tính bảo mật của thông tin mà lại không làm giảm
sự phát triển của việc trao đổi thông tin thì giải pháp tốt nhất là Mã hóa thông tin Ta có thể hiểu sơ lược mã hóa thông tin là che đi thông tin của mình, làm cho kẻ tấn công nếu chặn được thông tin trên đường truyền thì cũng không thể đọc được thông tin đó và phải có một giao thức giữa người gửi và người nhận để có thể trao đổi thông tin, đó là cơ chế mã hóa và giải mã thông tin
Ngày nay việc mã hóa đã trở nên phổ cập và ngày càng có nhiều nghiên cứu và xây dựng các công cụ, thuật toán mã hóa để áp dụng cho thực tế
Qua đó, một cơ chế mới trong mã hóa mà tôi chọn làm luận văn là
“Đề xuất sơ đồ mã hóa và giải mã cho bảo mật dữ liệu nhờ mã luân phiên”
2 Mục đích nghiên cứu
Luận văn tập trung nghiên cứu về sơ đồ mã hóa và giải mã cho
Trang 6mã ALT và hệ mã Affine để tạo ra một ứng dụng bảo mật dữ liệu tổng hợp
3 Đối tượng nghiên cứu
Tìm hiểu về hệ mã ALT, hệ mã Affine, cài đặt chương trình mã hóa và giải mã bằng ngôn ngữ lập trình C#
4 Giả thuyết khoa học
Nếu ta sử dụng hệ mã ALT kết hợp với một hệ mã cổ điển (ví dụ
là hệ mã Affine) để mã hóa hai lớp thì dữ liệu sẽ được mã hóa hai lần, làm cho các phần mềm thám mã khó có thể thám mã được dữ liệu
5 Nhiệm vụ nghiên cứu
- Nghiên cứu về hệ mã Affine: Nghiên cứu mã Affine trên vành Zm, thám mã với hệ mã Affine
- Nghiên cứu về hệ mã ALT: Tích không nhập nhằng, mã luân phiên và đặc trưng của mã luân phiên, thuật toán kiểm tra mã luân phiên chẵn, mã luân phiên
- Nghiên cứu về sơ đồ mã hóa kết hợp giữa mã ALT và hệ mã Affine
- Đưa ra chương trình mã hóa và giải mã với hệ mã kết hợp ALT – Affine
6 Phạm vi nghiên cứu
Luận văn tập trung nghiên cứu các kiến thức có liên quan, các cơ
sở lý thuyết: các hệ thống mật mã, các bài toán về an toàn thông tin, thám mã và tính an toàn của các hệ mật mã, hệ mã Affine, hệ mã ALT,
Trang 77 Phương pháp nghiên cứu
Nghiên cứu về lý luận: Nghiên cứu về hệ mã Affine, nghiên cứu
mã Affine trên vành Zm, thám mã với hệ mã Affine; nghiên cứu về hệ mã ALT: Tích không nhập nhằng, mã luân phiên và đặc trưng của mã luân phiên, thuật toán kiểm tra mã luân phiên chẵn, mã luân phiên; nghiên cứu về sơ đồ mã hóa kết hợp giữa mã luân phiên và hệ mã Affine
Nghiên cứu về thực tiễn: viết chương trình Mã hóa và giải mã với
hệ mã kết hợp ALT – Affine bằng ngôn ngữ lập trình C#
Luận văn gồm có phần mở đầu, 3 chương, phần kết luận, tài liệu tham khảo và phụ lục Trong đó:
Chương 1 Tổng quan về các hệ mã: trình bày sơ lược lịch sử về mật mã, các hệ thống mật mã, các bài toán về an toàn thông tin, thám mã
và tính an toàn của các hệ mật mã, sơ lược về hệ mã Affine
Chương 2 Hệ mã luân phiên: trình bày về tích không nhập nhằng,
mã luân phiên và đặc trưng của mã luân phiên, thuật toán kiểm tra mã luân phiên chẵn, mã luân phiên
Chương 3 Kỹ thuật tấn công, phương pháp phòng chống và chương trình mã hóa, giải mã: trình bày về các kỹ thuật tấn công và các phương pháp phòng chống tấn công website; chương trình Mã hóa và giải mã với hệ mã kết hợp ALT – Affine
Phần phụ lục trình bày chương trình Mã hóa và giải mã với hệ mã kết hợp ALT – Affine được viết bằng ngôn ngữ lập trình C#
Trong suốt quá trình học tập và hoàn thành luận văn này, tôi đã nhận được sự hướng dẫn, giúp đỡ quý báu của lãnh đạo, các thầy cô, các
Trang 8anh chị, các em và các bạn đồng nghiệp Với lòng kính trọng và biết ơn sâu sắc tôi xin được bày tỏ lời cảm ơn chân thành tới: Ban giám hiệu, Viện đào tạo sau đại học, Viện Toán ứng dụng và Tin học, các thầy, cô giáo của trường Đại Học Bách Khoa Hà Nội, Viện Nghiên cứu và Đào tạo nguồn nhân lực Quốc tế đã tạo mọi điều kiện thuận lợi giúp đỡ tôi trong quá trình học tập và hoàn thành luận văn
Tôi xin gửi lời cảm ơn sâu sắc nhất đến PGS.TS Phan Trung Huy giảng viên khoa Toán ứng dụng và Tin học, Trường Đại học Bách khoa
Hà Nội, người đã trực tiếp hướng dẫn, định hướng chuyên môn, quan tâm, giúp đỡ tận tình và tạo mọi điều kiện thuận lợi nhất trong quá trình thực hiện luận văn
Tôi xin chân thành cảm ơn tiến sỹ Hồ Ngọc Vinh, trưởng khoa Công nghệ thông tin, Trường Đại học sư phạm kỹ thuật Vinh đã quan tâm và giúp đỡ tôi hoàn thành tốt luận văn
Xin gửi lời cảm ơn tới bạn bè, đồng nghiệp, các anh chị em trong lớp Cao học Toán Tin, các thành viên trong gia đình đã động viên và giúp đỡ tôi trong quá trình học tập và những lúc tôi gặp khó khăn
Trang 9CHƯƠNG 1: TỔNG QUAN VỀ CÁC HỆ MÃ
1.1 Sơ lược lịch sử về mật mã
Như đã giới thiệu trong lời mở đầu, nhu cầu sử dụng mật mã đã xuất hiện từ rất sớm, khi con người biết trao đổi và truyền đưa thông tin cho nhau, đặc biệt khi các thông tin đó đã được thể hiện dưới hình thức ngôn ngữ, thư từ Lịch sử cho ta biết, các hình thức mật mã sơ khai đã được tìm thấy từ khoảng bốn nghìn năm trước trong nền văn minh Ai cập cổ đại Trải qua hàng nghìn năm lịch sử, mật mã đã được sử dụng rộng rãi trên khắp thế giới từ Đông sang Tây để giữ bí mật cho việc giao lưu thông tin trong nhiều lĩnh vực hoạt động giữa con người và các quốc gia, đặc biệt trong các lĩnh vực quân sự, chính trị, ngoại giao Mật mã trước hết là một loại hoạt động thực tiễn, nội dung chính của nó là để giữ
bí mật thông tin (chẳng hạn dưới dạng một văn bản) từ một người gửi A đến một người nhận B, A phải tạo cho văn bản đó một bản mã mật tương ứng, và thay vì gửi văn bản rõ thì A chỉ gửi cho B bản mã mật, B nhận
được bản mã mật và sẽ có cách từ đó khôi phục lại văn bản rõ để hiểu
được thông tin mà A muốn gửi cho mình Vì bản gửi đi thường được
chuyển qua các con đường công khai nên người ngoài có thể "lấy trộm"
được, nhưng do đó là bản mật mã nên không đọc hiểu được, còn A có thể tạo ra bản mã mật và B có thể giải bản mã mật thành bản rõ để hiểu được
là do giữa hai người đã có một thỏa thuận về một chìa khóa chung, chỉ
với chìa khóa chung này thì A mới tạo được bản mã mật từ bản rõ, và B
mới từ bản mã mật khôi phục lại được bản rõ Sau này ta sẽ gọi đơn giản
Trang 10chìa khóa chung đó là khóa mật mã Tất nhiên để thực hiện được một phép mật mã, ta còn cần có một thuật toán biến bản rõ, cùng với khóa mật mã, thành bản mã mật, và một thuật toán ngược lại, biến bản mã mật, cùng với khóa mật mã, thành bản rõ Các thuật toán đó được gọi tương ứng là thuật toán lập mật mã và thuật toán giải mật mã Các thuật toán này thường không nhất thiết phải giữ bí mật, mà cái cần được giữ tuyệt mật luôn luôn là khóa mật mã
Trong thực tiễn, đã có hoạt động bảo mật thì cũng có hoạt động ngược lại là khám phá bí mật từ các bản mã mật "lấy trộm" được, ta thường gọi hoạt động này là mã thám, hoạt động này quan trọng không kém gì hoạt động bảo mật! Vì các thuật toán lập mật mã và giải mật mã không nhất thiết là bí mật, nên mã thám thường được tập trung vào việc tìm khóa mật mã, do đó cũng có người gọi công việc đó là phá khóa Suốt mấy nghìn năm lịch sử, các thông báo, thư từ được truyền đưa
và trao đổi với nhau thường là các văn bản, tức là có dạng các dãy ký tự trong một ngôn ngữ nào đó; vì vậy, các thuật toán lập mật mã thường cũng đơn giản là thuật toán xáo trộn, thay đổi các ký tự được xác định bởi các phép chuyển dịch, thay thế hay hoán vị các ký tự trong bảng ký
tự của ngôn ngữ tương ứng; khóa mật mã là thông tin dùng để thực hiện phép lập mật mã và giải mật mã cụ thể, ví dụ như số vị trí đối với phép chuyển dịch, bảng xác định các cặp ký tự tương ứng đối với phép thay thế hay hoán vị, Mật mã chưa phải là một khoa học, do đó chưa có nhiều kiến thức sách vở để lại, tuy nhiên hoạt động bảo mật và thám mã trong lịch sử các cuộc đấu tranh chính trị, ngoại giao và quân sự thì hết
Trang 11sức phong phú, và mật mã đã có nhiều tác động rất quan trọng đưa đến những kết quả lắm khi có ý nghĩa quyết định trong các cuộc đấu tranh
đó Do trong một thời gian dài, bản thân hoạt động mật mã cũng được xem là một bí mật, nên các tài liệu kỹ thuật về mật mã được phổ biến đến nay thường chỉ ghi lại các kiến thức kinh nghiệm, thỉnh thoảng mới
có một vài "phát minh" như các hệ mật mã Vigenère vào thế kỷ 16 hoặc
hệ mật mã Hill ra đời năm 1929 là các hệ mã thực hiện phép chuyển dịch (đối với mã Vigenère) hay phép thay thế (mã Hill) đồng thời trên một nhóm ký tự chứ không phải trên từng ký tự riêng rẽ Vấn đề thám mã, ngược lại, khi thành công thường đưa đến những cống hiến nổi trội và ấn tượng trong những tình huống gay cấn của các cuộc đấu tranh, và cũng thường đòi hỏi nhiều tài năng phát hiện với những kinh nghiệm và suy luận tinh tế hơn, nên để lại nhiều chuyện hấp dẫn hơn Nhiều câu chuyện
kỳ thú của lịch sử thám mã đã được thuật lại trong quyển sách nổi tiếng của David Kahn The Codebreakers The Story of Secret Writing , xuất bản năm 1967 (sách đã được dịch ra nhiều thứ tiếng, có bản dịch tiếng Việt Những người mã thám, 3 tập, xuất bản tại Hà nội năm 1987)
Bước sang thế kỷ 20, với những tiến bộ liên tục của kỹ thuật tính toán và truyền thông, ngành mật mã cũng đã có những tiến bộ to lớn Vào những thập niên đầu của thế kỷ, sự phát triển của các kỹ thuật biểu diễn, truyền và xử lý tín hiệu đã có tác động giúp cho các hoạt động lập
và giải mật mã từ thủ công chuyển sang cơ giới hóa rồi điện tử hóa Các văn bản, các bản mật mã trước đây được viết bằng ngôn ngữ thông thường nay được chuyển bằng kỹ thuật số thành các dãy tín hiệu nhị
Trang 12chuyển thành các phép biến đổi trên các dãy bit, hay các dãy số, việc thực hiện các phép lập mã, giải mã trở thành việc thực hiện các hàm số
số học Toán học và kỹ thuật tính toán bắt đầu trở thành công cụ cho việc phát triển khoa học về mật mã
Khái niệm trung tâm của khoa học mật mã là khái niệm bí mật Đó
là một khái niệm phổ biến trong đời sống, nhưng liệu có thể cho nó một nội dung có thể định nghĩa được một cách toán học không? Khái niệm bí mật thoạt đầu được gắn với khái niệm ngẫu nhiên, rồi về sau trong những thập niên gần đây, với khái niệm phức tạp, cụ thể hơn là khái niệm độ phức tạp tính toán Việc sử dụng lý thuyết xác suất và ngẫu nhiên làm cơ sở để nghiên cứu mật mã đã giúp C.Shannon đưa ra khái niệm bí mật hoàn toàn của một hệ mật mã từ năm 1948, khởi đầu cho một lý thuyết xác suất về mật mã Trong thực tiễn làm mật mã, các dãy bit ngẫu nhiên được dùng để trộn với bản rõ (dưới dạng một dãy bit xác định) thành ra bản mật mã Làm thế nào để tạo ra các dãy bit ngẫu nhiên? Có thể tạo ra bằng phương pháp vật lý đơn giản như sau: ta tung đồng xu lên, nếu đồng xu rơi xuống ở mặt sấp thì ta ghi bit 0, ở mặt ngữa
thì ta ghi bit 1; tung n lần ta sẽ được một dãy n bit, dãy bit thu được như
vậy có thể được xem là dãy bit ngẫu nhiên Nhưng tạo ra theo cách như vậy thì khó có thể sử dụng một cách phổ biến, vì không thể tìm ra quy luật để theo đó mà sinh ra dãy bit ngẫu nhiên được Ở đây ta gặp một khó khăn có tính bản chất: nếu có quy luật thì đã không còn là ngẫu nhiên nữa rồi! Như vậy, nếu ta muốn tìm theo quy luật, thì không bao giờ có thể tìm ra các dãy bit ngẫu nhiên, mà cùng lắm cũng chỉ có thể
Trang 13chục năm nay, người ta đã nghiên cứu đề xuất nhiều thuật toán toán học
để sinh ra các dãy bit giả ngẫu nhiên, và cũng đã đưa ra nhiều thuộc tính
để đánh giá một dãy bit giả ngẫu nhiên có đáng được xem là "gần" ngẫu nhiên hay không Một vài thuộc tính chủ yếu mà người ta đã đề xuất là:
cho một dãy bit X = (x1, x2, , x n, ); dãy đó được xem là giả ngẫu nhiên
"tốt" nếu xác suất xuất hiện bit 0 hay bit 1 trong toàn dãy đó cũng như trong mọi dãy con bất kỳ của nó đều bằng 1/2; hoặc một tiêu chuẩn khác:
nếu mọi chương trình sinh ra được đoạn đầu n bit của dãy đều phải có độ phức tạp (hay độ dài) cỡ n ký tự! Về sau này, khi lý thuyết về độ phức
tạp tính toán đã được phát triển thì tiêu chuẩn về ngẫu nhiên cũng được
quy về tiêu chuẩn phức tạp tính toán, cụ thể một dãy bit X được xem là giả ngẫu nhiên "tốt" nếu mọi thuật toán tìm được bit thứ n(xn) khi biết các bit trước đó (x1, x2, , x n-1) với xác suất đúng > 1/2 đều phải có độ phức tạp tính toán thuộc lớp NP-khó!
1.2 Các hệ thống mật mã
1.2.1 Sơ đồ hệ thống mật mã
Mật mã được sử dụng để bảo vệ tính bí mật của thông tin khi thông tin được truyền trên các kênh truyền thông công cộng như các kênh bưu chính, điện thoại, mạng truyền thông máy tính, mạng Internet, Giả sử
một người gửi A muốn gửi đến một người nhận B một văn bản (chẳng hạn, một bức thư) p, để bảo mật A lập cho p một bản mật mã c, và thay cho việc gửi p, A gửi cho B bản mật mã c, B nhận được c và "giải mã" c
Trang 14ngược lại c thành p , A và B phải thỏa thuận trước với nhau các thuật toán lập mã và giải mã, và đặc biệt một khóa mật mã chung K để thực
hiện các thuật toán đó Người ngoài không biết các thông tin đó (đặc
biệt, không biết khóa K), cho dù có lấy trộm được c trên kênh truyền thông công cộng, cũng không thể tìm được văn bản p mà hai người A, B
muốn gửi cho nhau Sau đây ta sẽ cho một định nghĩa hình thức về sơ đồ mật mã và cách thức thực hiện để lập mật mã và giải mật mã
Định nghĩa 1.1 Một sơ đồ hệ thống mật mã là một bộ năm thành phần:
S = (P , C , K , E , D) (1) thỏa mãn các điều kiện sau đây:
P là một tập hữu hạn các ký tự bản rõ,
C là một tập hữu hạn các ký tự bản mã,
K là một tập hữu hạn các khóa,
E là một ánh xạ từ K × P vào C, được gọi là phép lập mật mã; và D
là một ánh xạ từ K × C vào P, được gọi là phép giải mã Với mỗi k K,
ta định nghĩa e k : P → C, d k : C→ P là hai hàm cho bởi:
x P : e k (x) = E (k, x) ; y C : d k (y) = D (k, y)
ek và d k được gọi lần lượt là hàm lập mã và hàm giải mã ứng với
khóa mật mã k Các hàm đó phải thỏa mãn hệ thức:
Trang 15Trong định nghĩa này, phép lập mật mã (giải mã) được định nghĩa cho từng ký tự bản rõ (bản mã) Trong thực tế, bản rõ của một thông báo
thường là một dãy ký tự bản rõ, tức là phần tử của tập P*, và bản mật mã
cũng là một dãy các ký tự bản mã, tức là phần tử của tập C*, việc mở
rộng các hàm e k và d k lên các miền tương ứng P* và C* để được các thuật toán lập mật mã và giải mã dùng trong thực tế sẽ được trình bày trong tiết sau
Các tập ký tự bản rõ và bản mã thường dùng là các tập ký tự của ngôn ngữ thông thường như tiếng Việt, tiếng Anh (ta ký hiệu tập ký tự
tiếng Anh là A tức A = {a, b, c, , x, y, z} gồm 26 ký tự; tập ký tự nhị phân B chỉ gồm hai ký tự 0 và 1; tập các số nguyên không âm bé hơn một số n nào đó (ta ký hiệu tập này là Zn tức Zn = {0, 1, 2, , n - 1}) Chú ý rằng có thể xem B = Z2 Để thuận tiện, ta cũng thường đồng nhất
tập ký tự tiếng Anh A với tập gồm 26 số nguyên không âm đầu tiên
Z26 = {0, 1, 2, , 24, 25} với sự tương ứng sau đây:
13 14 15 16 17 18 19 20 21 22 23 24 25 Đôi khi ta cũng hay dùng với tư cách tập ký tự bản rõ hay bản mã
là các tập tích của các tập nói trên, đặc biệt là các tập A m , B m , Z m n
1.2.2 Mã hóa theo khối và mã theo dòng
Theo định nghĩa 1.1 về sơ đồ mật mã, cứ mỗi lần truyền tin bảo
mật, cả người gửi A và người nhận B phải cùng thỏa thuận trước với
Trang 16thông báo gửi đi, và người nhận dùng d k để giải mã bản mật mã nhận
được Người gửi và người nhận cùng có một khóa chung k, được giữ như
bí mật riêng của hai người, dùng cả cho lập mật mã và giải mã, ta gọi những hệ mật mã với cách sử dụng đó là mật mã khóa đối xứng, đôi khi cũng gọi là mật mã truyền thống, vì đó là cách đã được sử dụng từ hàng ngàn năm nay
Tuy nhiên, về nguyên tắc hai hàm lập mã và giải mã là khác nhau, không nhất thiết phải phụ thuộc cùng một khóa Nếu ta xác định mỗi
khóa k gồm có hai phần k = (k' , k'' ), k' dành cho việc lập mật mã (và ta
có hàm lập mã e k'), k'' dành cho việc giải mã (và có hàm giải mã dk''), các hàm lập mã và giải mã thỏa mãn hệ thức d k''(ek'(x)) = x với mọi x p thì
ta được một hệ mật mã khóa phi đối xứng Như vậy, trong một hệ mật
mã khóa phi đối xứng, các khóa lập mã và giải mã (k' và k'') là khác
nhau, nhưng tất nhiên có quan hệ với nhau Trong hai khóa đó, khóa cần
phải giữ bí mật là khóa giải mã k'', còn khóa lập mã k' có thể được công
bố công khai; tuy nhiên điều đó chỉ có ý nghĩa thực tiễn khi việc biết k' tìm k'' là cực kỳ khó khăn đến mức hầu như không thể thực hiện được
Một hệ mật mã khóa phi đối xứng có tính chất nói trên, trong đó khóa
lập mật mã k' của mỗi người tham gia đều được công bố công khai, được
gọi là hệ mật mã khóa công khai
Khái niệm mật mã khóa công khai mới được ra đời vào giữa những năm 1970, và ngay sau đó đã trở thành một khái niệm trung tâm của khoa học mật mã hiện đại
Trang 171.3 Các bài toán về an toàn thông tin
Chúng ta đang sống trong một thời đại bùng nổ thông tin Nhu cầu trao đổi thông tin và các phương tiện truyền đưa thông tin phát triển một cách nhanh chóng Và cùng với sự phát triển đó, đòi hỏi bảo vệ tính bí mật và an toàn của thông tin cũng càng ngày càng to lớn và có tính phổ biến
Có nhiều bài toán khác nhau về yêu cầu an toàn thông tin tùy theo những tình huống khác nhau, nhưng có một số bài toán chung nhất mà ta thường gặp trong thực tiễn là những bài toán sau đây:
- Bảo mật: giữ thông tin được bí mật đối với tất cả mọi người, trừ một ít người có thẩm quyền được đọc, biết thông tin đó;
- Toàn vẹn thông tin: bảo đảm thông tin không bị thay đổi hay xuyên tạc bởi những kẻ không có thẩm quyền hoặc bằng những phương tiện không được phép;
- Nhận thực một thực thể: xác nhận danh tính của một thực thể, chẳng hạn một người, một máy tính cuối trong mạng, một thẻ tín dụng,
- Nhận thực một thông báo: xác nhận nguồn gốc của một thông báo được gửi đến;
- Chữ ký: một cách để gắn kết một thông tin với một thực thể, thường dùng trong bài toán nhận thực một thông báo cũng như trong nhiều bài toán nhận thực khác;
- Ủy quyền: chuyển cho một thực thể khác quyền được đại diện hoặc được làm một việc gì đó;
Trang 18- Cấp chứng chỉ: cấp một sự xác nhận thông tin bởi một thực thể được tín nhiệm;
- Báo nhận: xác nhận một thông báo đã được nhận hay một dịch vụ
- Thu hồi: rút lại một giấy chứng chỉ hay ủy quyền đã cấp;
Cơ sở của các giải pháp cho các bài toán kể trên là các phương pháp mật mã, đặc biệt là mật mã khóa công khai
1.4 Thám mã và tính an toàn của các hệ mật mã
1.4.1 Vấn đề thám mã
Mật mã được sử dụng trước hết là để bảo đảm tính bí mật cho các thông tin được trao đổi, và do đó bài toán quan trọng nhất của thám mã cũng là bài toán phá bỏ tính bí mật đó, tức là từ bản mật mã có thể thu được dễ dàng (trên các kênh truyền tin công cộng) người thám mã phải phát hiện được nội dung thông tin bị che giấu trong bản mật mã đó, mà tốt nhất là tìm ra được bản rõ gốc của bản mật mã đó Tình huống thường gặp là bản thân sơ đồ hệ thống mật mã, kể cả các phép lập mã và
Trang 19toán quy về việc tìm chìa khóa mật mã k, hay chìa khóa giải mã k'', nếu
hệ mật mã có khóa phi đối xứng Như vậy, ta có thể quy ước xem bài
toán thám mã cơ bản là bài toán tìm khóa mật mã k (hay khóa giải mã k'') Để giải bài toán đó, giả thiết người thám mã biết thông tin về sơ đồ
hệ mật mã được dùng, kể cả các phép lập mã và giải mã tổng quát E và
D Ngoài ra, người thám mã có thể biết thêm một số thông tin khác, tùy
theo những thông tin được biết thêm này mà ta có thể phân loại bài toán thám mã thành các bài toán cụ thể như sau:
- Bài toán thám mã chỉ biết bản mã: là bài toán phổ biến nhất, khi
người thám mã chỉ biết một bản mật mã Y;
- Bài toán thám mã khi biết cả bản rõ: người thám mã biết một bản
mật mã Y cùng với bản rõ tương ứng X;
- Bài toán thám mã khi có bản rõ được chọn: người thám mã có thể
chọn một bản rõ X, và biết bản mật mã tương ứng Y Điều này có thể xẩy
ra khi người thám mã chiếm được (tạm thời) máy lập mã;
- Bài toán thám mã khi có bản mã được chọn: người thám mã có
thể chọn một bản mật mã Y, và biết bản rõ tương ứng X Điều này có thể
xẩy ra khi người thám mã chiếm được tạm thời máy giải mã
1.4.2 Tính an toàn của một hệ mật mã
Tính an toàn của một hệ thống mật mã phụ thuộc vào độ khó khăn của bài toán thám mã khi sử dụng hệ mật mã đó Người ta đã đề xuất một số cách hiểu cho khái niệm an toàn của hệ thống mật mã, để trên cơ
sở các cách hiểu đó nghiên cứu tính an toàn của nhiều hệ mật mã khác nhau, sau đây ta giới thiệu vài cách hiểu thông dụng nhất:
Trang 20- An toàn vô điều kiện: giả thiết người thám mã có được thông tin
về bản mã Theo quan niệm lý thuyết thông tin, nếu những hiểu biết về bản mã không thu hẹp được độ bất định về bản rõ đối với người thám
mã, thì hệ mật mã là an toàn vô điều kiện, hay theo thuật ngữ của C.Shannon, hệ là bí mật hoàn toàn Như vậy, hệ là an toàn vô điều kiện, nếu độ bất định về bản rõ sau khi người thám mã có được các thông tin (về bản mã) bằng độ bất định về bản rõ trước đó;
- An toàn được chứng minh: một hệ thống mật mã được xem là có
độ an toàn được chứng minh nếu ta có thể chứng minh được là bài toán thám mã đối với hệ thống đó khó tương đương với một bài toán khó đã biết, ví dụ bài toán phân tích một số nguyên thành tích các thừa số nguyên tố, bài toán tìm logarit rời rạc theo một modul nguyên tố, (khó tương đương có nghĩa là nếu bài toán này giải được thì bài toán kia cũng giải được với cùng một độ phức tạp như nhau);
- An toàn tính toán: hệ mật mã được xem là an toàn (về mặt) tính toán, nếu mọi phương pháp thám mã đã biết đều đòi hỏi một nguồn năng lực tính toán vượt mọi khả năng (kể cả phương tiện thiết bị) tính toán của một kẻ thù giả định An toàn theo nghĩa này, nói theo ngôn ngữ của
lý thuyết về độ phức tạp tính toán, là bao hàm cả khái niệm an toàn theo nghĩa "được chứng minh" nói trên
Tính an toàn theo nghĩa được chứng minh hay tính toán được sử dụng nhiều trong việc nghiên cứu các hệ thống mật mã hiện đại, đặc biệt
là các hệ thống mật mã khóa công khai Ở mục 1.3 ta đã giới thiệu một
số bài toán về an toàn thông tin nói chung Các bài toán đó đều có hạt nhân là tính an toàn của một hệ mật mã nào đó, cho nên việc nghiên cứu
Trang 21tính an toàn của các hệ mật mã cũng góp phần giải quyết các vấn đề an toàn thông tin kể trên
1.5 Sơ lược về hệ mã Affine
Định nghĩa 1.2 Hệ mã Affine là hệ mã gồm năm thành phần
(P, C, K, E, D) trong đó P = C = Zm, K = {(a,b) Zm × Zm UCLN(a, 26) = 1},
các ánh xạ E và D được cho bởi:
ek (x) = ax + b mod m,
dk (y) = a-1(y - b) mod m, với mọi x P , y C , k = (a, b) K
1.5.1 Nghiên cứu mã Affine trên vành Z26
Trong mã Affine, ta giới hạn chỉ xét các hàm mã có dạng:
e(x) = ax + b mod 26, với a, b Z26 Các hàm này được gọi là các hàm Affine
Để việc giải mã có thể thực hiện được, yêu cầu cần thiết là hàm
Affine phải là đơn ánh Nói cách khác, với bất kỳ y Z26, ta muốn có
đồng nhất thức sau: ax + b ≡ y (mod 26) phải có nghiệm x duy nhất Đồng dư thức này tương đương với: ax ≡ y -b (mod 26) Vì y thay đổi trên
Z26 nên y –b cũng thay đổi trên Z26 Bởi vậy, ta chỉ cần nghiên cứu phương trình đồng dư:
ax ≡ y (mod 26) (y Z26)
Trang 22Ta biết rằng, phương trình này có một nghiệm duy nhất đối với mỗi
y khi và chỉ khi UCLN(a, 26) = 1 (ở đây hàm UCLN là ước chung lớn
nhất của các biến của nó)
Trước tiên ta giả sử rằng, UCLN(a, 26) = d >1 Khi đó, đồng dư thức ax ≡ 0 (mod 26) sẽ có ít nhất hai nghiệm phân biệt trong Z26 là x = 0
và x = 26 / d Trong trường hợp này, e(x) = ax + b mod 26 không phải là
một hàm đơn ánh và bởi vậy nó không thể là hàm mã hoá hợp lệ Ví dụ,
do UCLN(4, 26) = 2 nên 4x + 7 không là hàm mã hoá hợp lệ: x và x + 13
sẽ mã hoá thành cùng một giá trị đối với bất kỳ x Z26
Ta giả thiết UCLN(a, 26) = 1 Giả sử với x1 và x2 nào đó thảo mãn:
ax1 ≡ ax2 (mod 26)
Khi đó, a(x1 - x2) ≡ 0 (mod 26) Bởi vậy, 26 | a(x1 - x2)
Bây giờ ta sẽ sử dụng một tính chất của phép chia sau:
Nếu UCLN(a, b) = 1 và a | bc thì a | c Vì 26 | a(x1 - x2) và
UCLN(a, 26) = 1 nên ta có: 26 | (x1 - x2) tức là x1 ≡ x2 (mod 26)
Tới đây ta chứng tỏ rằng, nếu UCLN(a, 26) = 1 thì một đồng dư thức dạng ax ≡ y (mod 26) chỉ có (nhiều nhất) một nghiệm trong Z26 Do
đó, nếu ta cho x thay đổi trên Z26 thì ax mod 26 sẽ nhận được 26 giá trị khác nhau theo modul 26 và đồng dư thức ax ≡ y (mod 26) chỉ có một nghiệm y duy nhất Không có gì đặc biệt đối với số 26 trong khẳng định
này Bởi vậy, bằng cách tương tự ta có thể chứng minh được kết quả sau:
Định lý 1.3 Đồng dư thức ax ≡ b mod m chỉ có một nghiệm duy nhất
x | Zm với mọi b Z m khi và chỉ khi UCLN(a, m) = 1 Vì 26 = 2 × 13 nên
Trang 23các giá trị a Z26 thoả mãn UCLN(a, 26) = 1 là a = 1, 3, 5, 7, 9, 11, 13,
15, 17, 19, 21, 23 và 25 Tham số b có thể là một phần tử bất kỳ trong Z26 Như vậy, mã Affine có 12 × 26 = 312 khoá có thể (dĩ nhiên con số này quá nhỏ để bảo đảm an toàn)
Bây giờ ta sẽ xét bài toán chung với modul m Ta cần một định
nghĩa khác trong lý thuyết số
Định nghĩa 1.4 Giả sử a ≥ 1 và m ≥ 2 là các số nguyên UCLN(a, m) = 1
thì ta nói rằng a và m là nguyên tố cùng nhau Số các số nguyên trong Z m nguyên tố cùng nhau với m thường được ký hiệu là φ(m) (hàm này được
gọi là hàm Euler)
Một kết quả quan trọng trong lý thuyết số cho ta giá trị của φ(m) theo các thừa số trong phép phân tích theo luỹ thừa các số nguyên tố của m Một số nguyên p > 1 là số nguyên tố nếu nó không có ước dương nào khác ngoài 1 và p Mọi số nguyên m > 1 có thể phân tích được thành
tích của các luỹ thừa các số nguyên tố theo cách duy nhất
Ví dụ 60 = 23 × 3 × 5 và 98 = 2 ×72
Số khoá trong mã Affine trên Z m bằng φ(m), trong đó φ(m) được cho theo công thức trên (Số các phép chọn của b là m và số các phép chọn của a là φ(m) với hàm mã hoá là e(x) = ax + b) Ví dụ, khi m = 60, φ(60) = φ(5 × 22 × 3) = φ(5) × φ(22) × φ(3) = 2 × 2 × 4 = 16 và số các
khoá trong mã Affine là 960
Bây giờ ta sẽ xét xem các phép toán giải mã trong mật mã Affine
với modul m = 26 Giả sử UCLN(a, 26) = 1 Để giải mã cần giải phương trình đồng dư y ≡ ax + b (mod 26) theo x Từ thảo luận trên thấy rằng,
Trang 24phương trình này có một nghiệm duy nhất trong Z26 Tuy nhiên ta vẫn chưa biết một phương pháp hữu hiệu để tìm nghiệm Điều cần thiết ở đây là có một thuật toán hữu hiệu để làm việc đó Rất may là một số kết quả tiếp sau về số học modul sẽ cung cấp một thuật toán giải mã hữu hiệu cần tìm
Định nghĩa 1.5 Giả sử a Zm Phần tử nghịch đảo (theo phép nhân)
của a là phần tử a-1 Z m sao cho a × a-1 ≡ a-1 × a ≡ 1 (mod m)
Bằng các lý luận tương tự như trên, có thể chứng tỏ rằng a có nghịch đảo theo modul m khi và chỉ khi UCLN(a, m) = 1, và nếu nghịch đảo này tồn tại thì nó phải là duy nhất Ta cũng thấy rằng, nếu b = a-1 thì
a = b-1
Nếu p là số nguyên tố thì mọi phần tử khác không của Z P đều có nghịch đảo Một vành trong đó mọi phần tử đều có nghịch đảo được gọi
là một trường Trong phần sau sẽ mô tả một thuật toán hữu hiệu để tính
các nghịch đảo của Z m với m tuỳ ý Tuy nhiên, trong Z26, chỉ bằng phương pháp thử và sai cũng có thể tìm được các nghịch đảo của các phần tử nguyên tố cùng nhau với 26: 1-1 = 1, 3-1 = 9, 5-1 = 21, 7-1 = 15,
11-1 = 19, 17-1 = 23, 25-1 = 25 (Có thể dễ dàng kiểm chứng lại điều này,
ví dụ: 7 × 15 = 105 ≡ 1 mod 26, bởi vậy 7-1 = 15)
Xét phương trình đồng dư y ≡ ax + b (mod 26) Phương trình này tương đương với ax ≡ y -b (mod 26) vì UCLN(a, 26) = 1 nên a có nghịch đảo theo modul 26 Nhân cả hai vế của đồng dư thức với a-1 ta có:
a-1(ax) ≡ a-1(y - b) (mod 26)
Áp dụng tính kết hợp của phép nhân modul:
Trang 25Kết quả là x ≡ a-1(y -b) (mod 26) Đây là một công thức tường minh
cho x Như vậy hàm giải mã là: d(y) = a-1(y - b) mod 26
Cho mô tả đầy đủ về mã Affine Sau đây là một ví dụ nhỏ:
Ví dụ 1.6 Giả sử K = (7, 3) Như đã nêu ở trên, 7-1 mod 26 = 15 Hàm
Trang 26lớn lắm nếu ta sử dụng máy tính để thực hiện việc thám mã bằng cách duyệt lần lượt tất cả các khóa có thể, như vậy mã Affine cũng không còn được xem là mã an toàn
1.5.2 Thám mã với hệ mã Affine
Khoá mã Affine có dạng K = (a, b)
Với a, b Z26 và UCLN(a, 26) = 1 Ký tự mã y và ký tự bản rõ x tương ứng có quan hệ y = ax + b mod 26
Như vậy, nếu ta biết hai cặp (x, y) khác nhau là ta có được hai phương trình tuyến tính để từ đó tìm ra giá trị hai ẩn số a, b tức là tìm ra K
Ví dụ 1.8 Ta có bản mật mã:
“fmxvedkaphferbndkrxrsrefmorudsdkdvshvufedkaprkdlyevlrhhrh” Hãy tìm khoá mật mã và bản rõ tương ứng
Ta thấy trong bản mật mã nói trên, r xuất hiện 8 lần, d 7 lần, e, k,
h mỗi ký tự 5 lần, f, s, v mỗi ký tự 4 lần, ; vậy có thể phán đoán r là mã của e, d là mã của t, khi đó có
4a + b = 17 mod 26, 19a + b = 3 mod 26, giải ra được a = 6 , b = 19 Vì UCLN(a, 26) = 2 1, nên (a, b) không thể
là khoá được, phán đoán trên không đúng Ta lại thử chọn một phán
đoán khác: r là mã của e, h là mã của t Khi đó có:
4a + b = 17 mod 26,
Trang 27ta giải ra được a = 3, b = 5 Vì (a, 26) = 1 nên K = (3, 5) có thể là khóa cần tìm Khi đó phép lập mật mã là e K (x) = 3x + 5 mod 26, và phép giải
mã tương ứng là d K (y) = 9 = 9y - 19 mod 26 Dùng phép giải mã đó cho
bản mã ta sẽ được (dưới dạng ký tự) bản rõ là:
“algorithmsarequytegeneraldefinitionsofarithmeticprocesses”
Ta có thể kết luận khoá đúng là K = (3, 5) và dòng trên là bản rõ
cần tìm
Trang 28CHƯƠNG 2: HỆ MÃ LUÂN PHIÊN
Tích không nhập nhằng của các từ hữu hạn cũng như của các từ vô hạn mang lại nhiều tính chất lý thú và đang được rất nhiều người quan tâm nghiên cứu bởi chúng có quan hệ rất gần gũi với mã Để làm giàu thêm các tính chất của lý thuyết mã, đã có nhiều kết quả khi nghiên cứu tích không nhập nhằng trong quan hệ với mã, otomat, đại số… Trước hết, ta nhắc lại các ký hiệu và khái niệm được trình bày chi tiết trong [5]
Cho A là bảng chữ cái hữu hạn Ký hiệu A* là vị nhóm tự do sinh bởi A,
với phép toán tích ghép, đơn vị là (từ rỗng) và A+ = A* - {} Giả sử
u, v A* Ta nói, u là một khúc (khúc đầu, khúc đuôi) của v nếu tồn tại
x, y A* sao cho v = xuy (tương ứng v = uy, v = xu) Một khúc (khúc đầu, khúc đuôi) là thực sự nếu xy ≠ (tương ứng y ≠ , x ≠ ) Từ u được gọi là từ con của v nếu tồn tại n ≥ 1 sao cho u = u1u2 u n và
v = x0u1x1 x nun , với u1, u2, , u n , x0, x1, , x n A* Nếu x0x1 x n ≠
thì u được gọi là từ con thực sự của v Số tất cả các xuất hiện của các chữ trong từ u là độ dài của u, ký hiệu là │u│, quy ước │ │= 0 Với mỗi
số nguyên dương n, ký hiệu A [n] là tập tất cả các từ trong A* có độ dài
nhỏ hơn hoặc bằng n Một phân tích của từ w A* trong X ⊆ A* là một
dãy {w1, w2, , w n }, với n ≥ 1 sao cho w = w1w2 w n , w i X
Ngôn ngữ X ⊆ A+ được gọi là mã nếu mọi từ w ⊆ A+ có nhiều nhất
một cách phân tích thành các từ trong X Mọi vị nhóm con M của A* thừa
nhận tập sinh cực tiểu duy nhất, ký hiệu là G(M), với G(M) = (M – ) -
(M - )2 và (G(M))* = M Nếu M là vị nhóm con tự do của A*, thì tập sinh
Trang 29nhỏ nhất của M là mã Ngược lại, nếu X ⊆ A* là mã thì khi đó vị nhóm
con X * của A* là vị nhóm con tự do và X chính là tập sinh nhỏ nhất Cho X⊆ A + Khi đó, X được gọi là mã cực đại nếu X là mã và
w (X) A * , X {w} không là mã; X được gọi là mã đầy đủ nếu
w A * , A * wA * X ; X được gọi là mã prefix (suffix) nếu không có
từ nào trong X là khúc đầu (khúc đuôi) thực sự của một từ khác trong X;
X được gọi là mã bifix nếu X vừa là mã prefix, vừa là mã suffix; X được gọi là mã infix (p-infix, s-infix) nếu không có từ nào trong X là khúc của một khúc (khúc đầu, khúc đuôi) thực sự của một từ khác trong X; X được gọi là mã hypercode nếu không có từ nào trong X là từ con thực sự của một từ khác trong X; X được gọi là mỏng nếu có một từ w A * không là
một khúc của một từ nào khác trong X; X được gọi là có độ trễ giải mã hữu hạn nếu tồn tại một số nguyên dương d sao cho x, x' X,y X d , u A * , xyux'X * suy ra x = x' Giả sử X, Y⊆ A *, ta gọi thương trái
(thương phải) của X với Y là ngôn ngữ Y-1X (tương ứng X Y-1) được xác
x, x' X, y, y' Y : xy = x'y' x = x' và y = y'
Để ý rằng mã cũng có thể được xem như một trường hợp đặc biệt
Trang 30Nhưng tích không nhập nhằng là xa với các điều kiện đủ của mã Chẳng
hạn, X = {a, bbbb, abbbb} không là mã nhưng (X, X) là tích không là
nhập nhằng
Chúng ta mở rộng khái niệm tích không nhập nhằng qua nhiều lần
lặp tích, gọi là tích không nhập nhằng Cho X, Y⊆ A + , ta gọi tích của
X, Y là tập được định nghĩa bởi (XY) + = (XY) (XY)2 (XY)3
Cho X, Y⊆ A + , ta định nghĩa sự phân tích luận phiên theo cặp (X, Y) của hai tập ngôn ngữ X, Y như sau:
Định nghĩa 2.1 Cho bảng chữ A và X, Y⊆ A + , w A + Khi đó ta nói rằng:
(i) Từ w thừa nhận một sự phân tích luân phiên theo (X, Y) nếu
w = u1u2 u n (n ≥ 2), trong đó, u1 X , nếu u i X thì u i+1 Y và nếu
ui Y thì u i+1 X, với i=1, , n-1
(ii) Từ w thừa nhận một sự phân tích luân phiên chẵn theo (X, Y) nếu w = u1u2 u n (n ≥ 2), trong đó, u1 X , u n Y, nếu u i X thì
u i+1 Y và nếu u i Y thì u i+1 X, với i=1, , n-1 và n chẵn
(iii) Từ w thừa nhận một sự phân tích luân phiên theo X, Y nếu w thừa nhận một sự phân tích luân phiên theo (X, Y) hoặc (Y, X)
Với X, Y⊆ A + , ký hiệu SX,Y là tập tất cả các từ w A + thừa nhận ít
nhất một tích luân phiên theo X, Y Khi đó S X,Y ⊆ (X Y) +
Ví dụ 2.2 Cho X = {a, ba} và Y = {b, aba} Khi đó, từ w = ababaaba
có hai phân tích luân phiên theo X, Y như sau: f 1 : (a).(b).(a).(b).(a).(aba)
Trang 31là một phân tích luân phiên chẵn theo (X, Y) và f 2 : (aba).(ba).(aba) là một phân tích luân phiên theo (Y, X)
Định nghĩa 2.3 Cho X, Y⊆ A + Khi đó, tích (XY)+ được gọi là có tích không nhập nhằng (hay (X, Y) là tích không nhập nhằng) khi và chỉ khi:
m, n≥ 2, x1, x2, , x n , x1', x2', , x m ' X,
y1, y2, , y n , y1', y2', , ym'Y,
x1y1x2y2 x n y n = x1'y1'x2'y2' x m 'y m ' suy ra m = n, x i = x i ', y i = y i’, i=1, , n
Nói cách khác, sự phân tích của một từ w luân phiên trong X, Y dưới dạng x1y1x2y2 x n y n nếu có thì sẽ là duy nhất
Chú ý rằng, nếu (X, Y) là +-tích không nhập nhằng thì (X, Y) là tích không nhập nhằng và từ (XY)n (XY)m≠ suy ra n = m Điều đó
cho ta thấy rằng, +-tích không nhập nhằng là trường hợp riêng của tích
không nhập nhằng Đặc biệt, trong trường hợp cặp (X,Y) là tích nhập nhằng thì tồn tại từ w sao cho các bao trùm của hai phân tích của từ w là
khác (xem Hình 2.1)
Hình 2.1 Các bao trùm của hai phân tích của từ w
Trang 32Từ định nghĩa, dễ thấy rằng +-tích không nhập nhằng có kết quả sau:
Mệnh đề 2.4 Cho X, Y⊆ A + Khi đó, nếu (X, Y) là tích không nhập nhằng thì (Y, X) cũng là tích không nhập nhằng
Chứng minh: Thật vậy, giả sử ngược lại, cặp (Y, X) là tích nhập nhằng Khi đó tồn tại từ w có hai phân tích luân phiên khác nhau theo (Y, X),
không mất tính tổng quát, có thể viết:
w = y1x1y2x2 y n x n = y1'x1'y2'x2' y m 'x m ' (y1 y1')
Chọn x X, y Y bất kỳ, ta được từ w' = xwy Dễ thấy w' thừa nhận hai phân sự phân tích luân phiên khác nhau theo (X, Y), mâu thuẫn với giả thiết Do đó, (Y, X) là +-tích không nhập nhằng Dễ thấy, nếu (X, Y) là tích không nhập nhằng thì (X, Y) là tích không nhập nhằng theo
Liên hệ giữa mã truyền thống và tích không nhập nhằng, ta có mệnh
Trang 33Phản chứng, giả sử (X, X) là tích không nhập nhằng nhưng X không
là mã, khi đó tồn tại từ w X + thừa nhận hai sự phân tích khác nhau:
w = x1x2 x n = x1'x2' x m ' (x1≠ x1')
Từ hệ thức x1x2 x n = x1'x2' x m ' suy ra
w' = (x1x2 x n ) (x1x2 x n ) = (x1'x2' x m ') (x1'x2' x m ')
Điều đó có nghĩa tồn tại từ w' thừa nhận hai sự phân tích luân phiên khác
Mệnh đề 2.5 cho thấy, có thể xem tích không nhập nhằng như trường hợp tổng quát hơn của biểu diễn tích đối với mã thông thường và
là trường hợp riêng của tích không nhập nhằng
2.2 Mã luân phiên và đặc trưng của mã luân phiên
Dựa trên khái niệm tích không nhập nhằng và khái niệm phân tích luân phiên ở trên, cho phép ta định nghĩa một lớp mã mới như sau:
Định nghĩa 2.6 Cho X, Y⊆ A + Khi đó:
(i) Cặp (X, Y) được gọi là mã luân phiên nếu mỗi từ w A + thừa nhận không quá một sự phân tích luân phiên theo X, Y
(ii) Cặp (X, Y) được gọi là mã luân phiên chẵn nếu mỗi từ w A + thừa nhận không quá một sự phân tích luân phiên chẵn theo (X, Y)
Nhận xét 2.7 Nếu Z = XY là mã thì chưa chắc cặp (X, Y) là mã luân phiên
Xét ví dụ sau:
Trang 34Ví dụ 2.8 Cho X = {a, aa}, Y = {ab, b}, dễ thấy XY = {aab, ab, aaab}
là mã prefix nhưng cặp (X, Y) không là mã luân phiên, với từ
w = ababaab A + thừa nhận hai sự phân tích luân phiên khác nhau theo
X, Y là: w = (a).(b).(a).(b).(aa).(b) = (ab).(a).(b).(aa).(b)
Ví dụ 2.9 Với mỗi tệp nhị phân có thể biểu diễn như một chuỗi các bit 0, 1
Chẳng hạn: w = 101011000011001101100001011101
Đặt X = {1} + , Y = {0} + , khi đó w là một phân tích luân phiên theo
X, Y Nếu ta bổ sung một bit 1 vào đầu w và một bit 0 vào cuối w thì chuỗi kết quả luôn là một chuỗi phân tích luân phiên chẵn theo (X, Y)
Cụ thể, với w ở trên, ta có: w' = 11010110000110011011000010111010
Điều này cho thấy tính phổ dụng của mã luân phiên trong khoa học máy tính
Nhận xét 2.10 Các ví dụ sau cho ta thấy rằng: Có cặp (X, Y) không là
mã luân phiên cho dù X, Y là mã Và có X, Y không là mã nhưng cặp (X, Y) là mã luân phiên
Ví dụ 2.11 Cho X = {ab, ba} và Y = {a} là mã nhưng cặp (X, Y) không
là mã luân phiên Với từ w = abaaba A + thừa nhận hai sự phân tích
luân phiên khác nhau theo X, Y: w = (ab).(a).(ab).(a) = (a).(ba).(a).(ba)
Ví dụ 2.12 Cho X = {a, a2} và Y = {b, b2} không là mã, nhưng cặp
(X, Y) là mã luân phiên
Mối liên hệ giữa tích không nhập nhằng, tích luân phiên và mã luân phiên được thể hiện qua định lý sau:
Trang 35Định lý 2.13 Cho X, Y⊆ A + Khi đó:
(i) Cặp (X, Y) là mã luân phiên chẵn khi và chỉ khi cặp (X, Y) là tích không nhập nhằng
(ii) Cặp (X, Y) là tích không nhập nhằng khi và chỉ khi Z = XY là
Nếu Z = XY không là mã, khi đó tồn tại từ w Z+ thừa nhận hai sự
phân tích khác nhau trong Z+: w = Z1Z2 Z n = Z1'Z2' Z m ', trong đó
Trang 36Khi đó, từ hệ thức x1 y1 x n y n = x1'y1' x m 'y m ' , đặt Z i = x i y i , Z j '
=x j 'y j ', ta có Z1 Z n = Z1' Z m ' với Z i , Z j ' Z, i = 1, , n, j = 1, , m
Do Z là mã nên m = n, Z i = Z i ' hay x i y i = x i 'y i ', i = 1 n
Từ giả thiết (X, Y) là tích không nhập nhằng và từ hệ thức
x i y i = x i 'y i ', i = 1, ., n suy ra x i = x i ', y i = y i ' Vậy (X, Y) là tích không
nhập nhằng
(iii) Giả thiết cặp (X, Y) là mã luân phiên Theo định nghĩa, dễ thấy cặp (X,Y) là mã luân phiên chẵn Theo (i) ta có (X, Y) là tích không nhập nhằng Ngược lại chưa chắc đúng, ví dụ X = {a}, Y = {a2} với a A+ Dễ
thấy Z = XY = {a3} là ngôn ngữ một từ nên là mã Dễ dàng suy ra (X, Y)
là tích không nhập nhằng Từ (ii) suy ra (X, Y) là tích không nhập nhằng Tuy nhiên x 3 = x.x 2 = x 2 x là hai phân tích luân phiên khác nhau theo
X, Y Do đó, cặp (X, Y) không là mã luân phiên
(iv) Giả sử có X Y là mã và X Y = Theo định nghĩa, dễ dàng suy ra cặp (X, Y) là mã luân phiên (mọi từ w có phân tích luân phiên đều thuộc (X Y)+, và do (X Y) là mã nên sự phân tích trong (X Y)+ là duy nhất)
Ngược lại, xét X = {a, a2}, Y = {b}
Khi đó, dễ thấy X Y = {a, a2,b} không là mã, nhưng cặp (X, Y) là
Định lý 2.14 Cho X, Y⊆ A+ Khi đó:
(a) Cặp (X, Y) là mã luân phiên chẵn khi và chỉ khi hai điều kiện sau được thỏa mãn:
(i) Z = XY là mã
Trang 37(b) Các điều kiện (i), (ii) ở trên là độc lập
Chứng minh:
(a) Dễ dàng suy ra từ Định lý 2.13 (i, ii)
(b) Để chứng minh, ta xét ba trường hợp sau:
- Thứ nhất, cho X = Y với X là mã Khi đó, XY là mã và (X, Y) là
tích không nhập nhằng
- Thứ hai, cho X = {a, a2} , Y = {b, ab}
Khi đó, XY = {ab, a2b, a3b} là mã prefix, nhưng (X, Y) là tích nhập nhằng, vì w = (a)(ab) = (a2)(b)
- Thứ ba, X = {a, a2}, Y = {a} Dễ dàng thấy rằng XY = {a2, a3}
không là mã, nhưng (X, Y) là tích không nhập nhằng
2.3 Thuật toán kiểm tra mã luân phiên chẵn, mã luân phiên
Trong trường hợp X, Y là ngôn ngữ chính quy, hệ quả sau đóng vai
trò cơ bản cho phép ta thiết lập thuật toán kiểm tra mã luân phiên, mã luân phiên chẵn
Hệ quả 2.15 Nếu X, Y là ngôn ngữ chính quy thì tồn tại thuật toán
quyết định nếu cặp (X, Y) là:
(i) Mã luân phiên
(ii) Mã luân phiên chẵn
* Thuật toán kiểm tra mã luân phiên chẵn
B1 Kiểm tra Z = XY là mã bởi thuật toán Sardinas-Patterson
B2 Kiểm tra X-1X YY-1 – {} =
Trang 38* Thuật toán kiểm tra mã luân phiên
B1 Kiểm tra Z = XY là mã bởi thuật toán Sardinas-Patterson
B2 Kiểm tra X-1X YY-1 - {} =
B3 Kiểm tra Y-1(XY)+ (XY)+ =
B4 Kiểm tra (XY)+ X-1 (XY)+
=
B5 Kiểm tra (XY)+ (YX)+ =
Tiếp cận mở rộng khái nệm tích bằng cách đưa vào yếu tố nhập nhằng là một xu hướng nghiên cứu thời gian gần đây Trong chương này, khái niệm không nhập nhằng được mở rộng bằng cách lấy tích nhiều lần,
từ đó đưa đến lớp mã luân phiên Các kết quả ban đầu về tính chất của
mã đã được thiết lập, kết quả chính là đã chứng tỏ các điều kiện xác định tính chất mã và sự tồn tại thuật toán kiểm định
Việc chèn thêm ngôn ngữ Y đóng vai trò nhiễu có thể làm tăng độ
khó của việc thám mã Từ các kết quả ban đầu, có thể tiếp tục phát triển đưa vào các khái niệm như độ trễ giải mã cho mã luân phiên Xây dựng
phương pháp xác định và loại bỏ nhiễu để giải mã nếu biết tập Y (và
những thông tin nhất định), mà nếu thiếu nó sẽ trở nên cực khó cho người thám mã
Trang 39CHƯƠNG 3: KỸ THUẬT TẤN CÔNG, PHƯƠNG PHÁP PHÒNG CHỐNG VÀ CHƯƠNG TRÌNH MÃ HÓA, GIẢI MÃ
Internet ngày càng được phổ biến rộng rãi, phần lớn các tổ chức cũng như cá nhân đều có nhu cầu đưa thông tin của mình lên Internet cũng như thực hiện các giao dịch trực tuyến qua Internet Vấn đề nảy sinh là khi phạm vi ứng dụng của các ứng dụng Web ngày càng mở rộng phong phú thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành đối tượng cho nhiều người tấn công với các mục đích khác nhau
3.1 Kỹ thuật tấn công
3.1.1 Tổng quan các kỹ thuật tấn công
Từ kiến trúc các ứng dụng web, có thể đưa ra các thành phần có thể
- Web server: các lỗ hổng của phần mềm web server;
- Web application: tấn công xác thực, phân quyền, kiểm soát dữ liệu vào, logic nghiệp vụ
- Database: thực thi các lệnh qua truy vấn