Đồ án: Ứng Dụng Mã Hóa Đối Xứng Rijndael (AES) - Đỗ Thị Bích Thủy

Tìm hiểu sâu về mã hóa đối xứng Rijndael, thuật toán nền tảng của chuẩn AES, cùng các ứng dụng bảo mật thông tin và an toàn dữ liệu hiệu quả.

Chuyên ngành

Công nghệ thông tin

Người đăng

Ẩn danh

Thể loại

Đồ án tốt nghiệp đại học
71
4
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CẢM ƠN

DANH MỤC HÌNH VẼ

DANH MỤC BẢNG BIỂU

1. CHƢƠNG 1: CƠ SỞ TOÁN HỌC

1.1. Các khái niệm toán học

1.1.1. Số nguyên tố và số nguyên tố cùng nhau

1.1.2. Khái niệm đồng dƣ

1.1.3. Định nghĩa Phi Euler

1.1.4. Thuật toán Euclide

1.1.5. Không gian Zn và Zn*

1.1.5.1. Không gian Zn (các số nguyên theo modulo n)
1.1.5.2. Không gian Zn*

1.1.6. Định nghĩa cấp của một số a Zn*

1.1.7. Khái niệm Nhóm, Nhóm con, Nhóm Cyclic

1.1.7.1. Khái niệm Nhóm
1.1.7.2. Nhóm con của nhóm (G, *)

1.1.8. Tập thặng dƣ bậc hai theo modulo

1.1.9. Phần tử nghịch đảo

1.2. Khái niệm Độ phức tạp của thuật toán

1.2.1. Khái niệm Thuật toán

1.2.2. Độ phức tạp của thuật toán

1.2.3. Ví dụ về việc xác định độ phức tạp của thuật toán:

2. CHƢƠNG 2: VẤN ĐỀ MÃ HÓA

2.1. Giới thiệu chung

2.2. Định nghĩa

2.3. Khái niệm hệ mật mã

2.4. Những tính năng của hệ mã hóa

2.5. Các phƣơng pháp mã hóa

2.5.1. Phƣơng pháp mã hóa đối xứng

2.5.2. Phƣơng pháp mã hóa công khai

2.6. Chữ ký điện tử

2.6.1. Phân loại chữ ký số

2.6.1.1. Phân loại chữ ký theo đặc trƣng kiểm tra chữ ký
2.6.1.2. Phân loại chữ ký theo mức an toàn
2.6.1.3. Phân loại chữ ký theo ứng dụng đặc trƣng

2.7. Giới thiệu về hàm băm

2.7.1. Tính chất hàm băm

2.7.2. Cấu trúc của hàm băm

2.7.3. Một số phƣơng pháp băm

2.7.4. Hàm băm Chuẩn SHA

3. CHƢƠNG 3: THUẬT TOÁN MÃ HÓA RIJNDAEL VÀ ỨNG DỤNG

3.1. Tham số, ký hiệu, thuật ngữ và hàm

3.2. Một số khái niệm toán học

3.2.1. Phép nhân trên GF(28)

3.2.1.1. Phép nhân với x
3.2.1.2. Đa thức với hệ số trên GF(28)

3.3. Phƣơng pháp Rijndael

3.3.1. Quá trình mã hóa bao gồm 4 bƣớc:

3.4. Phát sinh khóa của mỗi chu kỳ

3.5. Quy trình giải mã

3.5.1. Phép biến đổi InvShiftRows

3.5.2. Phép biến đổi InvSubbytes

3.5.3. Phép biến đổi InvMixColumns

3.6. Các vấn đề cài đặt thuật toán

3.7. Kết quả thử nghiệm

3.7.1. Khả năng an toàn

3.8. Ứng dụng của thuật toán

3.8.1. Giao diện chƣơng trình

3.8.2. Chức năng chính của chƣơng trình

3.8.3. Code thực hiện mã hóa và giải mã

TÀI LIỆU THAM KHẢO

MỞ ĐẦU

Tóm tắt

I. Tổng Quan Mã Hóa Đối Xứng Rijndael Bảo Mật Dữ Liệu

Từ khi nhu cầu trao đổi thông tin xuất hiện, việc bảo mật thông tin cá nhân trở nên vô cùng quan trọng. Mã hóa đóng vai trò then chốt trong việc che giấu nội dung, đảm bảo chỉ người được ủy quyền mới có thể truy cập. Rijndael, được Viện Tiêu chuẩn và Công nghệ Hoa Kỳ (NIST) chọn làm chuẩn mã hóa nâng cao (AES) từ năm 2000, là một trong những thuật toán mã hóa đối xứng hàng đầu.

Thuật toán Rijndael hoạt động dựa trên việc biến đổi dữ liệu thành một dạng không thể đọc được, và sau đó khôi phục lại dạng ban đầu bằng một khóa bí mật. Điều này đảm bảo rằng ngay cả khi dữ liệu bị đánh chặn, kẻ tấn công cũng không thể giải mã được nội dung nếu không có khóa. Các hệ mật mã thường sử dụng các số nguyên tố lớn hơn 10^150. Đề tài "Tìm hiểu và xây dựng ứng dụng mã hóa đối xứng bằng thuật toán Rijndael" sẽ giúp hiểu rõ hơn về thuật toán này và cách ứng dụng nó để bảo vệ thông tin.

Mật mã học không chỉ đơn thuần là mã hóa và giải mã. Nó còn bao gồm nhiều vấn đề khác như xác thực nguồn gốc, đảm bảo tính toàn vẹn và thực hiện giao dịch an toàn. Với sự phát triển của Internet, mật mã học ngày càng trở nên quan trọng trong mọi lĩnh vực của đời sống, từ an ninh quốc phòng đến thương mại điện tử và ngân hàng.

1.1. Lịch Sử Phát Triển và Ý Nghĩa Của Rijndael AES

Thuật toán Rijndael, do Vincent Rijmen và Joan Daemen phát triển, đã chiến thắng cuộc thi thiết kế AES, trở thành tiêu chuẩn mã hóa được công nhận rộng rãi. Việc NIST lựa chọn Rijndael đã đánh dấu một bước tiến quan trọng trong lĩnh vực bảo mật dữ liệu. Ưu điểm chính của Rijndael là tính linh hoạt, khả năng điều chỉnh kích thước khóa và khối dữ liệu, cho phép ứng dụng trên nhiều nền tảng khác nhau, từ thiết bị nhúng đến máy chủ lớn. Hệ mật mã là tập các thuật toán, các khóa nhằm che giấu thông tin, cũng nhƣ làm rõ nó. Việc hiểu rõ lịch sử và ý nghĩa của Rijndael giúp ta đánh giá cao vai trò của nó trong việc bảo vệ thông tin ngày nay.

1.2. Ứng Dụng Thực Tế Của Mã Hóa Rijndael Trong Thế Giới Số

Ngày nay, Rijndael được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau. Nó được sử dụng để bảo vệ thông tin nhạy cảm trong các giao dịch trực tuyến, mã hóa dữ liệu lưu trữ trên đám mây, và bảo vệ thông tin liên lạc cá nhân. Các ứng dụng cụ thể bao gồm: Bảo mật website và email sử dụng giao thức HTTPSTLS/SSL. Bảo vệ dữ liệu trên ổ cứng và thiết bị lưu trữ di động thông qua các công cụ mã hóa toàn bộ ổ đĩa. Mã hóa cơ sở dữ liệu để bảo vệ thông tin cá nhân của khách hàng. Việc sử dụng Rijndael trong các ứng dụng thực tế chứng minh tính hiệu quả và độ tin cậy của thuật toán trong việc đối phó với các mối đe dọa an ninh mạng.

II. Thách Thức An Ninh Tại Sao Cần Mã Hóa Rijndael Mạnh Mẽ

Trong bối cảnh an ninh mạng ngày càng phức tạp, việc sử dụng các thuật toán mã hóa mạnh mẽ như Rijndael trở nên vô cùng cần thiết. Các cuộc tấn công mạng ngày càng tinh vi, nhắm vào việc đánh cắp thông tin cá nhân, dữ liệu tài chính và bí mật kinh doanh. Việc sử dụng mã hóa giúp bảo vệ thông tin khỏi bị truy cập trái phép, ngay cả khi hệ thống bị xâm nhập. Một số thách thức an ninh chính bao gồm: Tấn công Brute-force: Kẻ tấn công cố gắng thử tất cả các khóa có thể để giải mã dữ liệu. Tấn công Man-in-the-middle: Kẻ tấn công chặn và sửa đổi thông tin liên lạc giữa hai bên. Khai thác lỗ hổng phần mềm: Kẻ tấn công lợi dụng các lỗi bảo mật trong phần mềm để truy cập trái phép vào hệ thống.

Mã hóa đối xứng khóa bí mật giúp bảo mật cho các thông báo và dữ liệu bằng việc che giấu thông tin nhờ các kỹ thuật mã hóa. Để đối phó với những thách thức này, cần phải sử dụng các thuật toán mã hóa mạnh mẽ, với độ dài khóa đủ lớn để chống lại các cuộc tấn công Brute-force. Đồng thời, cần phải liên tục cập nhật và vá lỗi phần mềm để ngăn chặn các cuộc tấn công khai thác lỗ hổng bảo mật.

2.1. Các Phương Pháp Tấn Công Mã Hóa Rijndael Phổ Biến

Mặc dù Rijndael được coi là một thuật toán mã hóa an toàn, nhưng nó vẫn có thể bị tấn công nếu không được triển khai đúng cách. Một số phương pháp tấn công phổ biến bao gồm: Tấn công kênh bên: Khai thác thông tin về thời gian thực hiện, mức tiêu thụ điện năng hoặc bức xạ điện từ của thiết bị để suy ra khóa mã hóa. Tấn công liên quan đến khóa: Khai thác các điểm yếu trong quá trình tạo khóa để tìm ra khóa mã hóa. Tấn công dựa trên lỗi: Gây ra lỗi trong quá trình mã hóa để thu thập thông tin về khóa mã hóa. Để chống lại những cuộc tấn công này, cần phải triển khai Rijndael một cách cẩn thận, sử dụng các biện pháp bảo vệ bổ sung như tạo khóa ngẫu nhiên và kiểm tra tính toàn vẹn của dữ liệu.

2.2. Tại Sao Độ Dài Khóa 128 192 256 bit Lại Quan Trọng Trong Bảo Mật

Độ dài khóa là một yếu tố quan trọng trong việc xác định độ mạnh của một thuật toán mã hóa. Độ dài khóa càng lớn, số lượng khóa có thể có càng nhiều, và do đó càng khó để kẻ tấn công thực hiện một cuộc tấn công Brute-force. Rijndael hỗ trợ các độ dài khóa 128, 192 và 256 bit. Độ dài khóa 128 bit được coi là đủ an toàn cho hầu hết các ứng dụng, nhưng đối với các ứng dụng yêu cầu bảo mật cao hơn, nên sử dụng độ dài khóa 192 hoặc 256 bit. Mã hóa đối xứng thƣờng đƣợc sử dụng trong môi trƣờng mà khóa chung có thể dễ dàng trao chuyển bí mật, chẳng hạn trong cùng một mạng nội bộ. Mã hóa đối xứng thường dùng để mã hóa những bản tin lớn, vì tốc độ mã hóa và giải mã nhanh hơn hệ mã hóa công khai. Việc lựa chọn độ dài khóa phù hợp phụ thuộc vào mức độ bảo mật cần thiết và khả năng tính toán của hệ thống.

III. Giải Mã Rijndael Các Bước Chi Tiết Thuật Toán Mã Hóa

Thuật toán Rijndael hoạt động dựa trên việc thực hiện một loạt các phép biến đổi trên dữ liệu, bao gồm: SubBytes: Thay thế mỗi byte của dữ liệu bằng một giá trị khác dựa trên một bảng tra cứu (S-box). ShiftRows: Dịch chuyển các hàng của dữ liệu theo một quy tắc nhất định. MixColumns: Trộn các cột của dữ liệu bằng một phép biến đổi toán học. AddRoundKey: Kết hợp dữ liệu với một khóa con được tạo ra từ khóa chính. Các phép biến đổi này được lặp lại nhiều lần trong các vòng lặp (rounds), với mỗi vòng sử dụng một khóa con khác nhau. Số lượng vòng lặp phụ thuộc vào độ dài khóa. Quá trình giải mã là quá trình đảo ngược các phép biến đổi mã hóa, sử dụng các khóa con theo thứ tự ngược lại. Mỗi phép biến đổi thao tác trên trạng thái hiện hành S. Kết quả S’ của mỗi phép biến đổi sẽ trở thành đầu vào của phép biến đổi kế tiếp trong quy trình mã hóa.

3.1. Phân Tích Chi Tiết Các Phép Biến Đổi SubBytes ShiftRows MixColumns

Các phép biến đổi SubBytes, ShiftRows và MixColumns đóng vai trò quan trọng trong việc tạo ra sự nhầm lẫn và khuếch tán trong thuật toán Rijndael. SubBytes tạo ra sự nhầm lẫn bằng cách thay thế mỗi byte của dữ liệu bằng một giá trị khác dựa trên một bảng tra cứu phi tuyến tính (S-box). ShiftRows tạo ra sự khuếch tán bằng cách dịch chuyển các hàng của dữ liệu, đảm bảo rằng mỗi byte của dữ liệu đầu vào ảnh hưởng đến nhiều byte của dữ liệu đầu ra. MixColumns tạo ra sự khuếch tán bằng cách trộn các cột của dữ liệu bằng một phép biến đổi toán học tuyến tính. Tổ hợp của các phép biến đổi này đảm bảo rằng Rijndael có khả năng chống lại các cuộc tấn công mật mã.

3.2. Vai Trò Của Khóa Con và Quá Trình Tạo Khóa Key Schedule

Khóa con đóng vai trò quan trọng trong việc đảm bảo tính bảo mật của thuật toán Rijndael. Mỗi vòng lặp của thuật toán sử dụng một khóa con khác nhau, được tạo ra từ khóa chính thông qua một quá trình gọi là Key Schedule. Quá trình Key Schedule đảm bảo rằng các khóa con khác nhau, không thể dự đoán được, và có mối quan hệ phức tạp với khóa chính. Phƣơng pháp mã hóa Rijndael bao gồm nhiều bƣớc biến đổi đƣợc thực hiện tuần tự, kết quả đầu ra của bƣớc biến đổi trƣớc là đầu vào của bƣớc biến đổi tiếp theo. Quá trình này sử dụng các hàm như RotWord và SubWord để tạo ra khóa con, giúp tăng cường tính bảo mật của thuật toán.

3.3. Mô Tả Quá Trình Giải Mã Rijndael và Sự Khác Biệt Với Mã Hóa

Quá trình giải mã Rijndael là quá trình đảo ngược các phép biến đổi mã hóa, sử dụng các khóa con theo thứ tự ngược lại. Các phép biến đổi giải mã bao gồm InvSubBytes (đảo ngược SubBytes), InvShiftRows (đảo ngược ShiftRows) và InvMixColumns (đảo ngược MixColumns). Chuẩn AES giới hạn lại giá trị của Nb =4. Quy trình giải mã Rijndael đƣợc tóm tắt lại nhƣ sau: 1. Thực hiện thao tác AddRoundKey đầu tiên trƣớc khi thực hiện các chu kỳ mã hóa. Nr – 1 chu kỳ mã hóa bình thƣờng: mỗi chu kỳ bao gồm bốn bƣớc biến đổi liên tiếp nhau: SubBytes, ShiftRows, MixColumns, và AddRoundKey. Thực hiện chu kỳ mã hóa cuối cùng: trong chu kỳ này thao tác MixColumns đƣợc bỏ qua Sự khác biệt chính giữa mã hóa và giải mã là thứ tự thực hiện các phép biến đổi và việc sử dụng các phép biến đổi đảo ngược. Tuy nhiên, cấu trúc tổng thể của thuật toán là giống nhau.

IV. Ứng Dụng Mã Hóa Rijndael Trong Xây Dựng Ứng Dụng Bảo Mật

Thuật toán Rijndael có thể được sử dụng để xây dựng các ứng dụng bảo mật trong nhiều lĩnh vực khác nhau. Các ứng dụng cụ thể bao gồm: Bảo mật email: Rijndael có thể được sử dụng để mã hóa email, bảo vệ nội dung khỏi bị đọc bởi người không được ủy quyền. Bảo vệ dữ liệu lưu trữ: Rijndael có thể được sử dụng để mã hóa dữ liệu lưu trữ trên ổ cứng, USB hoặc đám mây, bảo vệ dữ liệu khỏi bị truy cập trái phép. Mã hóa truyền dữ liệu: Rijndael có thể được sử dụng để mã hóa dữ liệu truyền qua mạng, bảo vệ dữ liệu khỏi bị đánh chặn và sửa đổi. Các vấn đề cài đặt thuật toán khi triển khai Rijndael bao gồm các bước thực hiện trong thuật toán mới này khi mã hóa thông tin. Một ví dụ: Z3 = {0, 1,2} thì Z3* = {1,2} vì gcd(1, 3) = 1và gcd(2,3) = 1.

Việc xây dựng các ứng dụng bảo mật sử dụng Rijndael đòi hỏi kiến thức về mật mã học và kỹ năng lập trình.

4.1. Giao Diện Chương Trình và Các Chức Năng Mã Hóa Giải Mã Cơ Bản

Một ứng dụng mã hóa/giải mã Rijndael cơ bản thường có giao diện đơn giản, cho phép người dùng nhập dữ liệu cần mã hóa hoặc giải mã, chọn độ dài khóa, và nhập khóa mã hóa. Các chức năng cơ bản bao gồm: Mã hóa: Chuyển đổi dữ liệu đầu vào thành dữ liệu đã mã hóa. Giải mã: Chuyển đổi dữ liệu đã mã hóa trở lại dữ liệu ban đầu. Tạo khóa: Tạo khóa mã hóa ngẫu nhiên. Kết quả thử nghiệm cho thấy tốc độ xử lý của phƣơng pháp Rijndael. Giao diện chương trình phải thân thiện với người dùng, dễ sử dụng và cung cấp các tùy chọn cấu hình phù hợp.

4.2. Code Thực Hiện Mã Hóa và Giải Mã Với Rijndael Ví Dụ Minh Họa

Code thực hiện mã hóa và giải mã Rijndael có thể được viết bằng nhiều ngôn ngữ lập trình khác nhau, chẳng hạn như C, Java, Python, v.v. Code này thường sử dụng các thư viện mật mã có sẵn để thực hiện các phép biến đổi Rijndael. Ví dụ, trong Python, có thể sử dụng thư viện PyCryptodome để thực hiện mã hóa và giải mã Rijndael:```python from Crypto.Cipher import AES key = b'Sixteen byte key' cipher = AES.new(key, AES.MODE_EAX) nonce = cipher.nonce plaintext = b'Text to be encrypted' ciphertext, tag = cipher.encrypt_and_digest(plaintext)

V. Đánh Giá và So Sánh Rijndael với Các Thuật Toán Mã Hóa Khác

Rijndael là một thuật toán mã hóa mạnh mẽ và hiệu quả, nhưng nó không phải là thuật toán duy nhất có sẵn. Các thuật toán mã hóa khác bao gồm: DES: Một thuật toán mã hóa cũ hơn, nhưng không còn được coi là an toàn do độ dài khóa ngắn. Triple DES (3DES): Một phiên bản cải tiến của DES, sử dụng ba khóa DES để tăng cường độ bảo mật. Blowfish: Một thuật toán mã hóa mã nguồn mở, có độ dài khóa thay đổi được. Twofish: Một thuật toán mã hóa mã nguồn mở khác, được thiết kế như một ứng cử viên cho AES. Khả năng an toàn của Rijndael đã được chứng minh qua nhiều năm sử dụng và nghiên cứu. Việc lựa chọn thuật toán mã hóa phù hợp phụ thuộc vào yêu cầu cụ thể của ứng dụng.

5.1. Ưu Điểm và Nhược Điểm Của Rijndael So Với DES 3DES Blowfish

Rijndael có nhiều ưu điểm so với các thuật toán mã hóa cũ hơn như DES và 3DES, bao gồm: Độ dài khóa lớn hơn: Rijndael hỗ trợ các độ dài khóa 128, 192 và 256 bit, trong khi DES chỉ hỗ trợ độ dài khóa 56 bit. Hiệu suất tốt hơn: Rijndael có hiệu suất tốt hơn DES và 3DES, đặc biệt trên các hệ thống hiện đại. Tính linh hoạt cao hơn: Rijndael có thể được sử dụng với nhiều kích thước khối khác nhau, trong khi DES chỉ hỗ trợ kích thước khối 64 bit. So với Blowfish, Rijndael có thể có hiệu suất tốt hơn trong một số trường hợp, nhưng Blowfish có thể dễ triển khai hơn trên các hệ thống nhúng.

5.2. Các Tiêu Chí Đánh Giá Hiệu Năng và Độ An Toàn Của Thuật Toán Mã Hóa

Các tiêu chí đánh giá hiệu năng và độ an toàn của thuật toán mã hóa bao gồm: Độ dài khóa: Độ dài khóa càng lớn, thuật toán càng an toàn hơn. Hiệu suất: Thuật toán phải có khả năng mã hóa và giải mã dữ liệu nhanh chóng. Độ phức tạp: Thuật toán phải đủ phức tạp để chống lại các cuộc tấn công mật mã. Tính linh hoạt: Thuật toán phải có thể được sử dụng với nhiều kích thước khối khác nhau và trên nhiều nền tảng khác nhau. Chi phí triển khai: Chi phí triển khai thuật toán phải hợp lý.

VI. Tương Lai Mã Hóa Xu Hướng Phát Triển và Nghiên Cứu Rijndael

Lĩnh vực mã hóa đang không ngừng phát triển để đáp ứng với các mối đe dọa an ninh mạng ngày càng tinh vi. Các xu hướng phát triển và nghiên cứu hiện tại bao gồm: Mã hóa lượng tử: Sử dụng các nguyên tắc của cơ học lượng tử để tạo ra các khóa mã hóa không thể bị phá vỡ. Mã hóa đồng hình: Cho phép thực hiện các phép tính trên dữ liệu đã mã hóa mà không cần giải mã, bảo vệ tính riêng tư của dữ liệu. Mã hóa dựa trên AI: Sử dụng trí tuệ nhân tạo để tạo ra các thuật toán mã hóa thích ứng và có khả năng tự học. Các nghiên cứu về Rijndael vẫn tiếp tục, tập trung vào việc cải thiện hiệu suất và độ an toàn của thuật toán, cũng như tìm ra các ứng dụng mới cho nó.

6.1. Ảnh Hưởng Của Điện Toán Lượng Tử Lên Các Thuật Toán Mã Hóa Hiện Tại

Sự phát triển của điện toán lượng tử đang đe dọa đến tính an toàn của nhiều thuật toán mã hóa hiện tại, bao gồm cả Rijndael. Các máy tính lượng tử có khả năng phá vỡ các thuật toán mã hóa dựa trên các bài toán toán học khó giải bằng máy tính cổ điển. Để đối phó với mối đe dọa này, các nhà nghiên cứu đang phát triển các thuật toán mã hóa lượng tử kháng (post-quantum cryptography), có khả năng chống lại các cuộc tấn công từ máy tính lượng tử.

6.2. Tiềm Năng Phát Triển Của Rijndael Trong Các Ứng Dụng Mới IoT Blockchain

Rijndael vẫn có tiềm năng phát triển trong các ứng dụng mới như Internet of Things (IoT) và Blockchain. Trong IoT, Rijndael có thể được sử dụng để bảo vệ dữ liệu truyền giữa các thiết bị và máy chủ. Trong Blockchain, Rijndael có thể được sử dụng để mã hóa dữ liệu lưu trữ trên chuỗi khối. Tuy nhiên, cần phải cân nhắc các yếu tố như hiệu suất và mức tiêu thụ điện năng khi sử dụng Rijndael trong các ứng dụng này.

22/09/2025
Đồ án tìm hiểu và xây dựng ứng dụng mã hóa đối xứng bằng thuật toán rijndael

Trích đoạn nội dung tài liệu

phần mở đầu, kết luận và 3 chƣơng với các nội dung chính sau: - Chƣơng 1: Cơ sở lý thuyết về toán học. - Chƣơng 2: Nói về vấn đề mã hóa bao gồm giới thiệu về mật mã, các khái niệm về mã hóa, các phƣơng pháp mã hóa, chữ ký số và hàm băm. - Chƣơng 3: Tìm hiểu thuật toán Rijndael và mô phỏng chƣơng trình ứng dụng. 9 CHƢƠNG 1: CƠ SỞ TOÁN HỌC 1.1 Các khái niệm toán học 1.

Số nguyên tố và số nguyên tố cùng nhau. - Số nguyên tố là số nguyên dƣơng lớn hơn 1chỉ chia hết cho 1 và chính nó. Ví dụ: 2, 3, 5, 7, 11, … là những số nguyên tố. - Hệ mật mã thƣờng sử dụng các số nguyên tố ít nhất là lớn hơn 10150.

- Hai số m và n đƣợc gọi là nguyên tố cùng nhau nếu ƣớc số chung lớn nhất của chúng bằng 1. Ví dụ: 11 và 13 là nguyên tố cùng nhau. Định lý số nguyên tố: Với mọi n>=2 đều có thể phân tích thành lũy thừa cơ số nguyên tố n = p1e1p2e2p3e3. , với pi : số nguyên tố, ei Z+.

Hệ quả: Giả sử a = p1e1.pkfk thì gcd(a,b) = p1min(e1,f1).19 ta đƣợc : gcd(a,b)=2.1 Khái niệm đồng dƣ Cho n là một số nguyên dƣơng. Nếu a và b là hai số nguyên, khi đó a đƣợc gọi là đồng dƣ với b theo modulo n, đƣợc viết a ≡ b (mod n) nếu n│(a – b), và n đƣợc gọi là modulo của đồng dƣ. Ví dụ: 24 ≡ 9 (mod 5), 17 ≡ 5 (mod 3) Tính chất: (i) a ≡ b (mod n), nếu và chỉ nếu a và b đều trả số dƣ nhƣ nhau khi đem chia chúng cho n.2 Định nghĩa Phi Euler Với n ≥ 1, đặt (n) là số các số nguyên trong khoảng [1, n] và nguyên tố cùng nhau với n. Hàm nhƣ thế đƣợc gọi là hàm phi-Euler.

Tính chất: - Nếu p là số nguyên tố thì (p) = p-1 (1.p2e2…pkek, dạng khai triển chính tắc của n, thì (n) = (1.3 Thuật toán Euclide Thuật toán: Thuật toán Euclide, tính ƣớc số chung lớn nhất của hai số. INPUT: Hai số nguyên không âm a và b sao cho a ≥ b. OUTPUT: Ƣớc số chung lớn nhất của a và b. Trong khi b ≠ 0, thực hiện Đặt r ← a mod b, a ← b, b ← r.

11 Thuật toán Euclidean có thể đƣợc mở rộng để không chỉ tính đƣợc ƣớc số chung d của hai số nguyên a và b, mà còn có thể tính đƣợc hai số nguyên x, y thoả mãn: ax + by = d *Thuật toán Euclidean mở rộng INPUT: Hai số nguyên không âm a và b với a ≥ b. OUTPUT: d = gcd(a, b) và hai số x, y thoả mãn ax + by = d. Nếu b = 0, đặt d←a , x←1, y←0, Kết_quả(d, x, y). Trong khi còn b > 0, thực hiện: 3.

Đặt d←a, x←x2 , y←y2 , Kết_quả(d, x, y).4 Không gian Zn và Zn* 1.1 Không gian Zn (các số nguyên theo modulo n) Là tập hợp các số nguyên {0, 1, 2, …, n-1}. Các phép toán trong Zn như cộng, trừ, nhân, chia đều đƣợc thực hiện theo module n.2 Không gian Zn* Là tập hợp các số nguyên a Zn, nguyên tố cùng n. Tức là: Zn* = {a Zn | gcd (n, a) =1}, (n) là số phần tử của Zn*. Nếu n là một số nguyên tố thì: Zn* = {a Zn |1 ≤ a ≤ n-1} (1.6) Ví dụ: Z3 = {0, 1,2} thì Z3* = {1,2} vì gcd(1, 3) = 1và gcd(2,3) = 1.5 Định nghĩa cấp của một số a Zn* Cho α Zn*, khi đó cấp của a, kí hiệu ord(a) là số nguyên dƣơng nhỏ nhất sao cho at 1(mod n) trong Zn*.6 Khái niệm Nhóm, Nhóm con, Nhóm Cyclic 1.1 Khái niệm Nhóm Nhóm là một bội (G, *), trong đó G , * là phép toán hai ngôi trên G thỏa mãn ba tính chất sau: + Phép toán có tính kết hợp: (x*y)*z = x*(y*z) với mọi x, y, z G.7) + Có phần tử trung lập e G: x*e = e*x = x với mọi x G.8) + Với mọi x G, có phần tử nghịch đảo x’ G: x*x’ = x’*x = e.9) Cấp của nhóm G đƣợc hiểu là số phần tử của nhóm, ký hiệu là |G|.

Cấp của nhóm có thể là nếu G có vô hạn phần tử. Nhóm Abel là nhóm (G, *), trong đó phép toán hai ngôi * có tính giao hoán. Tính chất: Nếu a*b = a*c, thì b = c. Ví dụ: +) Tập hợp các số nguyên Z cùng với phép cộng (+) thông thƣờng là nhóm giao hoán, có phần tử đơn vị là số 0.

Gọi là nhóm cộng các số nguyên. +)Tập Q * các số hữu tỷ khác 0 (hay tập R * các số thực khác 0), cùng với phép nhân (*) thông thƣờng là nhóm giao hoán. Gọi là nhóm nhân các số hữu tỷ (số thực). +)Tập các vectơ trong không gian với phép toán cộng vectơ là nhóm giao hoán.2 Nhóm con của nhóm (G, *) Nhóm con của G là tập S G, S , và thỏa mãn các tính chất sau: + Phần tử trung lập e của G nằm trong S.

+ S khép kín đối với phép tính (*) trong G, tức là x*y S với mọi x, y S. + S khép kín đối với phép lấy nghịch đảo trong G, tức x 1 S với mọi x S.3 Nhóm Cyclic Cho α Zn*, nếu cấp của α là (n), khi đó α đƣợc gọi là phần tử sinh hay phần tử nguyên thủy của Zn*. Nếu Zn* có một phần tử sinh, thì Zn* đƣợc gọi là nhóm Cyclic. Và sau đó nếu Zn* là nhóm Cyclic thì số phàn tử sinh sẽ là ((n)).

-α Zn* là phần tử sinh của Zn* khi và chỉ khi α (n)/p ! (mod n) với mỗi số chia nguyên tố của (n). - Zn* có phần tử sinh khi và chỉ khi n = 2, 4, pk hay 2pk khi p là số nguyên tố lẻ và k Còn nếu p là số nguyên tố thì chắc chắn Zp* có phần tử sinh. Ví dụ: Z21* không phải là nhóm Cyclic vì không phần tử nào của Z21* có cấp là φ(21) = 12, chú ý là 21 không thỏa mãn điều kiện nào theo tính chất của phần tử sinh trên. Trong khi đó Z13* là nhóm Cyclic và có phần tử sinh α = 2 Thật vậy: 20 mod 13 = 1 21 mod 13 = 2 22 mod 13 = 4 23 mod 13 = 8 24 mod 13 = 3 25 mod 13 = 6 26 mod 13 = 12 27 mod 13 = 11 28 mod 13 = 9 29 mod 13 = 5 210 mod 13 = 10 211 mod 13 = 7 Phần tử 2i là sinh khi và chỉ khi gcd(i, 12) = 1 nghĩa là khi và chỉ khi i =1, 5, 7 hoặc 11.

Vậy các phần tử sinh của Z13* là 2, 6, 7 và 11.7 Tập thặng dƣ bậc hai theo modulo Định nghĩa: Cho a Z*n, a đƣợc gọi là thặng dƣ bậc hai theo modulo n nếu tồn tại một x Z*n sao cho , và nếu không tồn tại x nhƣ vậy thì a đƣợc gọi là bất thặng dƣ bậc hai theo modulo n. Tập hợp các thặng dƣ bậc hai đƣợc kí hiệu là Qn và tập các bất thặng dƣ bậc hai ký hiệu là. Ví dụ: α = 6 là phần tử sinh của Z*13 ta có: .8 Phần tử nghịch đảo Định nghĩa: Cho a Zn, số nghịch đảo của a theo modulo n là một số nguyên x Zn, nếu a. Nếu tồn tại x nhƣ vậy, thì nó là duy nhất và a đƣợc gọi là khả nghịch, nghịch đảo của a đƣợc kí hiệu là a-1.

Tính chất: a Zn, a là khả nghịch khi và chỉ khi gcd(a, n) = 1. Ví dụ: Các phần tử khả nghịch trong Z9 là 1, 2, 4, 5, 7 và 8. Thuật toán tính nghịch đảo trên Zn Input: a Zn. Output: a-1 mod n, nếu tồn tại, 1.

Sử dụng thuật toán Euclidean mở rộng, tìm x và y để ax + ny = d, trong đó d = gcd(a, n). Nếu d >1, thì a-1 mod n không tồn tại, Ngƣợc lại, kết quả(x).2 Khái niệm Độ phức tạp của thuật toán 1.1 Khái niệm Thuật toán Thuật toán là một dãy hữu hạn các quy tắc ( chỉ thị, mệnh lệnh) mô tả chính xác một quá trình tính toán. Theo đó với mỗi bộ dữ liệu vào sẽ cho một kết quả ( Yêu cầu của bài toán ).[1] Các đặc trƣng của Thuật toán đơn định: - Tính đơn định: Thực hiện đúng các bƣớc của thuật toán với một dữ liệu vào thì chỉ cho duy nhất một kết quả nghĩa là ở mỗi bƣớc của thuật toán, các thao tác phải hết sức rõ ràng, không gây nên sự nhập nhằng, lộn xộn, đa nghĩa. - Tính dừng: Thuật toán phải dừng và cho ra kết quả sau một số hữu hạn các bƣớc.

- Tính đúng: Cho ra kết quả phù hợp yêu cầu bài toán với những dữ liệu vào đúng đắn. 15 - Tính phổ dụng: Thuật toán phải giải quyết đƣợc một lớp rộng các bài toán. - Tính khả thi: Thuật toán phải đƣợc máy tính thực hiện trong khoảng thời gian và điều kiện ( bộ nhớ ) cho phép.2 Độ phức tạp của thuật toán Thông thƣờng để đánh giá thuật toán ngƣời ta dựa trên hai tiêu chuẩn sau: Tiêu chuẩn 1: Độ đơn giản, dễ hiểu, dễ cài đặt ( viết chƣơng trình ). Tiêu chuẩn 2: Sử dụng tiết kiệm tài nguyên hệ thống và với thời gian ngắn nhất.

Độ phức tạp của thuật toán là phƣơng pháp đánh giá thuật toán theo hƣớng xấp xỉ tiệm cận qua các khái niệm toán học O lớn O(); o nhỏ o(); (); (). Hầu hết tất cả các thuật toán có thời gian chạy tiệm cận tới một trong các hàm sau: a. Hằng số: Hầu hết các chỉ thị của các chƣơng trình đều đƣợc thực hiện một lần hay nhiều nhất chỉ một vài lần. Nếu tất cả các chỉ thị của cùng một chƣơng trình có tính chất này thì chúng ta sẽ nói rằng thời gian chạy của nó là hằng số.

Điều này hiển nhiên là điều mà ta phấn đấu để đạt đƣợc trong việc thiết kế thuật toán. LogN: Khi thời gian chạy của chƣơng trình là logarit tức là thời gian chạy chƣơng trình tiến chậm khi N lớn dần. Thời gian chạy thuộc loại này xuất hiện trong các chƣơng trình mà giải một bài toán lớn bằng cách chuyển nó thành một bài toán nhỏ hơn, bằng cách cắt bớt kích thƣớc một hằng số nào đó. Với mục đích của chúng ta, thời gian chạy có đƣợc xem nhƣ nhỏ hơn một hằng số ―lớn―.

Cơ số của logarit làm thay đổi hằng số đó nhƣng không nhiều: Khi N là 1000 thì logN là 3 nếu cơ số là 10, là 10 nếu cơ số là 2; khi N là một triệu, logN đƣợc nhân gấp đôi.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ