Ngày nay công nghệ thông tin phát triển mạnh mẽ nên lượng thông tin cần mã hóa ngày càng đa dạng và có khối lượng rất lớn do đó thời gian xử lý của chương trình mã hóa cũng tăng lên, mặt
Trang 1Tôi xin chân thành cảm ơn các thầy cô trường Đại học Công nghệ thông tin và truyền thông - Đại học Thái Nguyên, Viện Công nghệ thông tin, Viện Khoa học và Công nghệ Việt Nam đã tận tình truyền đạt các kiến thức cho tôi trong suốt quá trình học tập, giúp đỡ tôi hoàn thành tốt khoá học và luận văn tốt nghiệp
Đặc biệt tôi xin gửi tới TS Nguyễn Thị Hồng Minh, cô đã tận tình chỉ bảo tôi trong suốt quá trình thực hiện đề tài lời cảm ơn và biết ơn sâu sắc Cô
đã giúp tôi nhận ra những bài học về phong cách học tập, làm việc và nghiên cứu khoa học
Thái Nguyên, ngày 30 tháng 08 năm 2011
Nguyễn Văn Sỹ
Trang 2LỜI CAM ĐOAN
Tôi xin cam đoan, toàn bộ nội dung liên quan tới đề tài được trình bày trong luận văn là bản thân tôi tìm hiểu và nghiên cứu, dưới sự hướng dẫn TS
Trang 3DES: Data Encryption Standard
Trang 4Trang
Hình 1.1: Sơ đồ hoạt động của hệ mã hoá khoá đối xứng 16
Hình 1.2: Sơ đồ hoạt động của hệ mã hoá khoá đối xứng 17
Hình 2.1 Phân lớp chữ ký số 28
Hình 3.1 Sơ đồ thực hiện giải thuật nhân nhanh sử dụng DFT 41
Trang 6LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC
TS Nguyễn Thị Hồng Minh
Thái Nguyên - 2011
Trang 7MỞ ĐẦU
1 Đặt vấn đề
Bảo mật thông tin luôn là vấn đề quan trọng trong việc ứng dụng công nghệ thông tin ở các lĩnh vực chính trị, kinh tế xã hội Ngày nay công nghệ thông tin phát triển mạnh mẽ nên lượng thông tin cần mã hóa ngày càng đa dạng và có khối lượng rất lớn do đó thời gian xử lý của chương trình mã hóa cũng tăng lên, mặt khác các công cụ và giải thuật nhằm bẻ khóa các hệ mật
mã ngày một cải tiến đòi hỏi hệ mật mã cần được nâng cấp tối ưu tính bảo mật Việc xây dựng một số thuật toán tối ưu hóa nhằm tăng hiệu quả của các chương trình bảo mật thông tin và ứng dụng vào chữ ký số là cơ sở nội dung trong đề tài luận văn này
2 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu :
Các hệ mật mã khóa công khai, trong đó hệ mật mã RSA được sử dụng làm đối tượng nghiên cứu chính của đề tài nhằm phát hiện các phép xử lý toán học cần tối ưu Từ các kết quả thu được bước đầu đề tài đưa ra một cách xây dựng thử nghiệm vào chữ ký số áp dụng các kết quả tối ưu hóa
Phạm vi nghiên cứu
Đề tài thực hiện việc tối ưu hóa với một số phép tính toán với số nguyên lớn Ứng dụng thử nghiệm trong một hệ mã nhằm so sánh hiệu năng
xử lý của hệ mã trước và sau khi tối ưu
3 Hướng nghiên cứu của đề tài
Đề tài này tập trung vào việc xây dựng một số thuật toán tối ưu hóa nhằm tăng hiệu quả các phép tính toán thực hiện với số nguyên lớn Đề tài
sẽ được ứng dụng trong việc hỗ trợ cho các phép xử lý số học với số nguyên lớn trong các hệ mã Từ đó làm tăng tốc độ xử lý và tính bảo mật
Trang 8của các hệ mã và ứng dụng vào chữ ký số Đề tài sẽ đi sâu tìm hiểu các quá trình thực hiện mã hóa và giải mã các hệ mã công khai, tìm hiểu các thuật toán xử lý số học được dùng trong các hệ mã Phát hiện các giải thuật tính toán cần tối ưu hóa và thực hiện đưa ra giải pháp tối ưu hóa các giải thuật này
4 Những nội dung nghiên cứu chính
CHƯƠNG 2 HỆ MẬT MÃ KHOÁ CÔNG KHAI VÀ CHỮ KÝ SỐ
2.1 Hệ mật mã khóa công khai
2.2 Hệ mật mã khoá công khai RSA
2.3 Phân tích cơ chế hoạt động của hệ mã RSA
2.4 Các phương pháp tấn công đối với hệ mã RSA
2.5 Độ an toàn của hệ mã RSA
2.6 Hệ mật mã Elgamal
2.7 Chữ ký số
CHƯƠNG 3 TỐI ƯU HOÁ TRONG HỆ MÃ RSA
3.1 Các phép toán trong hệ mã RSA
3.2 Giải thuật Fast Fourier Transform trong xử lý phép nhân số lớn
CHƯƠNG 4 CÀI ĐẶT THỬ NGHIỆM VÀ ỨNG DỤNG VÀO CHỮ KÝ
SỐ
4.1 Cài đặt thử nghiệm các phép toán với số lớn
4.2 Cài đặt thử nghiệm chữ ký số RSA.
4.3 Đánh giá và nhận xét kết quả
Trang 9KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
TÀI LIỆU THAM KHẢO
5 Phương pháp nghiên cứu
Về lý thuyết:
Nghiên cứu dựa trên việc tìm hiểu các giải thuật xử lý với số nguyên lớn của các hệ mã cụ thể là hệ mã hóa RSA và chữ ký số Từ đó sẽ lựa chọn thuật toán nào cần tối ưu hóa Thực hiện việc tối ưu hóa các giải thuật bằng cách tối ưu hóa các phép xử lý với số học lớn và ứng dụng vào chữ ký số Thu thập các tài liệu các tạp chí khoa học và các tài liệu trên mạng Internet có liên quan đến vấn đề nghiên cứu
Về thực nghiệm:
Chương trình được viết bằng ngôn ngữ Visual C# trên bộ công cụ Visual studio 2005, thiết kế chương trình theo thuật toán tối ưu hóa đã nghiên cứu
6 Ý nghĩa khoa học của đề tài
Trình bày các kiến thức toán học, lý thuyết độ phức tạp của thuật toán, các thuật toán dùng trong các hệ mật mã khoá công khai
Trình bày các phương pháp mật mã gồm: Phương pháp sinh và tạo chữ
ký số, phương pháp mã hoá khóa bí mật và khóa công khai Với phương pháp
mã hóa khóa công khai thì tập trung vào các thuật toán mã hóa RSA
Tối ưu các phép xử lý số học với số nguyên lớn áp dụng trong việc xây dựng các hệ mã hóa có tốc độ xử lý nhanh và độ an toàn cao
7 Đóng góp của đề tài
Luận văn trình bày các cơ sở lý thuyết hệ mật mã khóa công khai Phân tích các quá trình tạo khoá, mã hoá và giải mã trong hệ mã RSA từ đó tối ưu
Trang 10các thuật toán của các quá trình trên bằng cách áp dụng thuật toán Fast Fourier Transform để nhân hai số nguyên lớn nhằm tăng tính bảo mật và an toàn của hệ mã khoá công khai Xây dựng chương trình thử nghiệm chữ ký số ứng dụng bảo mật và xác thực chữ ký số Từ đó có thể mở rộng và hoàn thiện thêm một số tính năng để có thể ứng dụng trong thực tiễn
Trang 11CHƯƠNG 1 - LÝ THUYẾT MẬT MÃ
1.1 MỘT SỐ KHÁI NIỆM VỀ MÃ HOÁ
Do nhu cầu sử dụng nên mật mã xuất hiện rất sớm, khi con người biết trao đổi thông tin cho nhau, đặc biệt là các thông tin trong lĩnh vực quân sự, chính trị, ngoại giao 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 thế giới Ban đầu các cách mã hoá thường đơn giản nên dễ dàng
bị giải mã, các phương pháp mã hoá cổ điển thường được áp dụng như Playfair, Caesar…
Trong mật mã cổ điển các thuật toán mã hoá thường rất đơn giản như: dịch chuyển, thay đổi các ký tự bằng các phép dịch chuyển, thay thế các ký tự trong một bảng ký tự của một ngôn ngữ Khoá mật mã là khoá bí mật dùng để
mã hoá và giải mã vì vậy khi gửi bản mã hoá thì đồng thời phải gửi kèm khoá
bí mật nên khi có được thông tin đã bị mã hoá vẫn có thể dò ra cách giải mã Với sự phát triển của máy tính điện tử thì các phương pháp mã hoá đơn giản, quá trình mã hoá và giải mã sử dụng khoá bí mật dễ dàng bị giải mã
Mật mã học hiện đại sự thay đổi về phương pháp mã hóa cũng như độ
an toàn của các hệ mã mới đã đưa lịch sử của mật mã học sang trang mới, hệ mật mã với khóa mã đối xứng đã đưa mật mã đến với nhiều ứng dụng trong nhiều lĩnh vực khác với độ an toàn cao
Các mô hình mã hóa có chung một số thuật ngữ như sau:
Bản rõ: Là nội dung của thông điệp cần gửi đi và cần được bảo vệ an
toàn Nó có thể là xâu các bít, các file văn bản, các file có cấu trúc
Mã hoá: Là quá trình xử lý thông điệp cần bảo mật trước khi gửi đi Bản mã: Là kết quả thu được khi mã hóa bản rõ theo qui trình mã hóa
của phương pháp đang được chọn
Giải mã: Là quá trình tiến hành giải mã bản mã để thu được bản rõ
Trang 121.1.1 Khái niệm chung về mật mã
Hệ mật mã gồm một bộ năm thành phần (P, C, K, E, D) trong đó:
P (Plaintext): tập hợp hữu hạn các bản rõ
C (Ciphertext): tập hợp hữu hạn các bản mã
K (Key): tập hợp các bản khoá
E (Encrytion): tập hợp các qui tắc mã hoá có thể
D (Decrytion): tập hợp các qui tắc giải mã có thể
Nội dung cần mã hóa thể hiện dưới dạng bản rõ (P) Người gửi sử dụng qui tắc (E) và khóa (K) mã hoá bản rõ (P), kết quả thu được gọi là bản
mã (EK(P) = C) Bản mã này được gửi đi trên một đường truyền tới người nhận, sau khi nhận được bản mã (C) người nhận sử dụng qui tắc (D) và khóa (K) giải mã nó để hiểu được nội dung thông điệp gốc (DK(C) = P)
1.1.2 Tính bảo mật và xác thực của hệ mật mã hiện đại
Hệ mật mã hiện đại cần đảm bảo được hai yêu cầu sau:
- Đảm bảo tính bảo mật
- Đảm bảo tính xác thực
Bảo mật: Giữ thông tin được bí mật, người lạ không thể thực hiện việc
trích chọn, sửa đổi thông tin từ các bản mã được gửi trên các kênh truyền phổ biến (thường không an toàn)
Xác thực: Chỉ có người nhận đúng mới có thể giải mã nội dung bản mã,
đồng thời cũng đảm bảo người gửi không thể phủ nhận nội dung đã gửi
Trang 13Ban đầu, bản rõ được người A mã hoá với khóa K Sau đó bản mã được gửi đến cho người B Người B khi nhận được bản sử dụng khoá K giải mã để thu được bản rõ (Hình 1.1)
Các hệ mật mã được xây dựng trên phương pháp mã hoá khoá đối xứng như: DES, AES,…
Hình 1.1: Sơ đồ hoạt động của hệ mã hoá khoá đối xứng
Hệ mã hoá khoá bất đối xứng
Hệ mã hoá bất đối xứng là hệ mã hoá, trong đó quá trình mã hoá và giải
mã sử dụng một cặp khoá: khoá công khai (public key) được công bố rộng rãi
để mọi người biết dùng để mã hoá, khoá riêng (private key) chỉ thuộc về một người dùng để giải mã
Hệ mã khoá bất đối xứng hay hệ mã hoá khoá công khai được Martin Hellman, Ralph Merkle và Whitfield Difie trường đại học Stanford giới thiệu năm 1976 Hai năm sau, năm 1978, Rivest, Shamir và Adleman tìm ra một hệ mật mã khoá công khai hoàn toàn có thể ứng dụng trong thực tiễn, tính bảo mật và an toàn của chúng được đảm bảo bằng độ phức tạp của một bài toán số học nổi tiếng là bài toán phân tích số nguyên thành các thừa số nguyên tố, ngày này thường gọi hệ mật mã này là hệ RSA
Khi thực hiện mã hóa bất đối xứng, người A sử dụng khóa công khai do người B tạo để mã hóa thông điệp và gửi cho người B Do biết được khóa
Khoá bí mật
Trang 14riêng nên B mới có thể giải mã được thông điệp mà A đã mã hóa Trong trường hợp bản mã bị một người thứ ba có được, nếu chỉ kết hợp với thông tin
về khóa công khai đã được công bố, cũng rất khó có khả năng giải mã được bản mã này trong khoảng thời gian chấp nhận được do không nắm được khóa riêng của B
Hình 1.2: Sơ đồ hoạt động của hệ mã hoá khoá đối xứng
1.2 LÝ THUYẾT ĐỘ PHỨC TẠP TÍNH TOÁN
1.2.1 Khái niệm độ phức tạp của thuật toán
Độ phức tạp tính toán của một tiến trình tính toán là số ô nhớ được dùng hay số các phép toán sơ cấp được thực hiện trong tiến trình tính toán đó Dữ liệu đầu vào đối với một thuật toán thường được biểu diễn bằng các từ trong một bảng ký tự nào đó, độ dài của một từ là số ký tự trong từ đó
Độ phức tạp của một thuật toán sẽ được tính bằng số các phép tính cơ sở máy tính thực hiện khi tiến hành chạy thuật toán Độ phức tạp của thuật toán được hiểu là một hàm số theo độ lớn của đầu vào Việc xác định chính xác hàm này có thể rất phức tạp, tuy nhiên khi biết cỡ của chúng thì ta đã có được một ước lượng chấp nhận được
Giả sử f(n) và g(n) là hai hàm xác định trên tập hợp các số nguyên dương Ta nói f(n) có bậc O-lớn của g(n), và viết f(n) = O(g(n)) hoặc f=O(g), nếu tồn tại một hằng số C > 0 sao cho với n đủ lớn Ta có 0 < f(n) < Cg(n)
Bản mã
Trang 15Một thuật toán được gọi là có độ phức tạp đa thức, hoặc có thời gian đa thức, nếu số các phép tính cần thiết khi thực hiện thuật toán không vượt quá O(logkn), trong đó n là độ lớn của đầu vào, và k là số nguyên dương nào đó Nói cách khác, nếu đầu vào là các số m-bit thì thời gian thực hiện thuật toán là O(md), tức là tương đương với một đa thức của m.Các thuật toán với thời gian O(αn), α > 1, được gọi là các thuật toán với độ phức tạp mũ, hoặc thời gian mũ
1.2.2 Hàm một phía và cửa sập một phía:
Hàm số y=f(x) được gọi là hàm một phía nếu việc tính thuận từ x ra y
là “dễ”, nhưng ngược lại từ y tìm ra x lại rất “khó”
Hàm y=f(x) được gọi là hàm cửa sập một phía nếu việc tính thuận từ x
ra y là “dễ”, việc tính ngược lại từ y tìm ra x là rất “khó”, nhưng có một cửa sập z để với sự trợ giúp của cửa sập z thì việc tính từ y ra x sẽ trở thành “dễ”
Thuật toán “dễ” có độ phức tạp tính toán chấp nhận được (thuật toán đa thức) Thuật toán “khó” có độ phức tạp tính toán khó chấp nhận được trên thực tế (thuật toán hàm mũ)
1.3 CƠ SỞ TOÁN HỌC CỦA MẬT MÃ
1.3.1 Lý thuyết đồng dư thức
Cho n là số nguyên dương Ta nói hai số nguyên a và b là đồng dư với nhau theo modulo n, kí hiệu a b(mod n), nếu n a-b ( tức là nếu a-b chia hết cho n, hay khi chia a và b cho n ta được cùng một số dư như nhau
Trang 162 Nếu p, q là 2 số nguyên tố cùng nhau thì:θ(p*q)=θ(p)*θ(q)
3 Nếu p là số nguyên tố thì: θ(pr)=(p-1)*pr-1
1.3.3 Không gian Z n
* Các định nghĩa trong không gian Z n
- Các số nguyên theo modulo n ký hiệu Zn là một tập hợp các số nguyên {0, 1, 2,3,…, n - 1} Các phép toán cộng, trừ, nhân trong Zn được thực hiện theo modulo n
- Cho aZn Nghịch đảo nhân của a theo modulo n là một số nguyên xZn, sao cho a*x 1(mod n) Nếu x tồn tại thì đó là giá trị duy nhất và a được gọi là khả nghịch, nghịch đảo của a ký hiệu là a-1
- Cho a, bZn Phép chia của a cho b theo modulo n là tích của a và b modulo n, và chỉ được xác định khi b có nghịch đảo theo modulo n
* Các tính chất trong không gian Z n
Cho aZn, a có nghịch đảo khi và chỉ khi a và n nguyên tố cùng nhau (gcd(a,n) = 1), trong đó gcd(a,n) là ước số chung lớn nhất của a và n
Giả sử d = gcd(a,n) Phương trình đồng dư ax b (mod n) có nghiệm x nếu và chỉ nếu b chia hết cho d, trong trường hợp các nghiệm d nằm trong khoảng [0, n-1] thì các nghiệm đồng dư theo modulo n/d
1.3.4 Nhóm nhân Z * n
*Các định nghĩa trong nhóm nhân Z* n
- Nhóm nhân của Zn ký hiệu là Z*n = {aZn | gcd (a, n) = 1} Nếu n là
Trang 17* Các tính chất trong Z*n
- Cho số nguyên n ≥ 2
Định lý Euler
Nếu a Z*n thì aφ(n) 1 (mod n)
Nếu n là tích của các số nguyên tố phân biệt và nếu r s(mod φ(n)) thì
Nếu gcd(a, p) = 1 thì ap-1 1(mod p)
Nếu r s(mod(p-1)) thì ar as(mod p) với mọi số nguyên a
ap a (mod p) với mọi số nguyên a
1.3.5 Thặng dƣ
Tập Zn={0,1,2,…,n-1} đƣợc gọi là tập các thặng dƣ đầy đủ theo mod n,
vì mọi số nguyên bất kỳ đều có thể tìm đƣợc trong Zn một số đồng dƣ với mình ( theo mod n) Tập Zn là đóng đối với phép cộng, trừ và nhân theo mod
n, nhƣng không đóng đối với phép chia , vì phép chia cho a theo mod n chỉ có thể thực hiện đƣợc khi a và n nguyên tố với nhau, tức là khi gcd(a,n)=1
Cho a Z*n , a đƣợc gọi là thặng dƣ bậc 2 theo modo n hoặc căn bậc 2 theo mod n nếu tồn tại x Z*n sao cho x2 a(mod n) Nếu không tồn tại x thì
a đƣợc gọi là thặng dƣ không bậc 2 theo modulo n Tập hợp các thặng dƣ bậc
2 theo mod n ký hiệu là Qn và tập hợp các thặng dƣ không bậc 2 theo modulo
n ký hiệu là Q n
Trang 181.3.6 Thuật toán tìm ƣớc chung lớn nhất
* Thuật toán Euclide:
INPUT: hai số nguyên a,b với a,b>=0, a>=b OUTPUT: ƣớc chung lớn nhất của a và b While b>0 {
r= a mod b;
a=b;
b=r;
} return a;
* Thuật toán Euclide mở rộng:
INPUT: hai số nguyên a,b với a,b>=0, a>=b OUTPUT: hai số x,y sao cho: ã+by=gcd(a,b)
Trang 191.3.7 Thuật toán kiểm tra số nguyên tố
* Thuật toán Rabin-Miller
Thuật toán này được phát triển bởi Rabin, dựa trên một phần ý tưởng của Miller Thực tế những phiên bản của thuật toán đã được giới thiệu tại NIST (National Institute of Standards and Technology)
Đầu tiên là chọn ngẫu nhiên một số p để kiểm tra Tính b, với b là số
mũ của 2 chia cho p-1.Tiếp theo tính m tương tự như n = 1+2b
m
Sau đây là thuật toán :
1 Chọn một sô ngẫu nhiên a, và giả sử a nhỏ hơn p
Trang 20CHƯƠNG 2 HỆ MẬT MÃ KHOÁ CÔNG KHAI VÀ CHỮ KÝ SỐ
2.1 HỆ MẬT MÃ KHÓA CÔNG KHAI
2.1.1 Giới thiệu hệ mật mã khóa công khai
Ý tưởng về hệ mật khoá công khai đã được Diffie và Heliman đưa ra vào năm 1976 Còn việc thực hiện hệ mật khoá công khai thì lại được Rivest, Shamin và Adieman đưa ra đầu tiên vào năm 1977 Họ đã tạo nên hệ mật RSA nổi tiếng Kể từ đó đã có một số hệ mật được công bố, độ mật của từng
hệ dựa trên các bài toán tính toán khác nhau Trong đó quan trọng nhất là các
hệ mật sau:
• Hệ mật RSA
Độ bảo mật của hệ RSA dựa trên độ khó của việc phân tích ra thừa số nguyên tố các số nguyên tố lớn
• Hệ mật xếp balô Merkle – Hellman
Hệ này và các hệ có liên quan dựa trên tính khó giải của bài toán tổng các tập con
Trang 21để mã hóa thông tin, khóa riêng (private key) là khoá bí mật sử dụng để giải
mã thông tin đã được mã hóa bằng khóa công khai Các phương pháp mã hóa
này khai thác những ánh xạ f mà việc thực hiện ánh xạ ngược f -1
rất khó so
với việc thực hiện ánh xạ f nhưng khi biết được khoá riêng thì việc thực hiện ánh xạ f -1 lại trở nên dễ dàng
2.1.2 Hoạt động của hệ mật mã khoá công khai
Mỗi người dùng có một cặp khóa gồm khóa công khai (public key) cùng với thuật toán mã hóa E và khóa riêng (private key) cùng với thuật toán giải mã D
Khi người A muốn gửi thông điệp R đến cho người B:
Khóa công khai của B là: K B, Khóa riêng của B là: M B
Khóa công khai của A là: K A , Khóa riêng của A là: M A
Thuật toán mã hóa: E , Thuật toán giải mã: D
gửi bản mã C cho người B Khi nhận bản mã C người B sẽ giải mã dựa vào khóa riêng M B của mình để tính R = D(M B, C)
2.1.3 Các yêu cầu của hệ mật mã khoá công khai
- Tính bảo mật cao
- Thuật toán công khai, dễ hiểu, tính bảo mật không phải nằm ở thuật toán mà là chìa khoá
- Thuật toán có tính đa dạng và ứng dụng cao
- Dễ dàng triển khai thuật toán trên các thiết bị điện tử
2.2 HỆ MẬT MÃ KHOÁ CÔNG KHAI RSA
Hệ mật mã RSA thiết kế dựa trên cơ sở độ phức tạp của bài toán phân tích số nguyên N ra thừa các số nguyên tố p và q khác nhau
2.2.1 Một số bài toán cơ bản
* Bài toán phân tích số nguyên thành thừa số nguyên tố:
Cho số nguyên dương n, tìm tất cả các ước số nguyên tố pi của n sao cho n= p e1 pke2 p ek trong đó p là các số nguyên tố khác nhau và e ≥ 1
Trang 22Bài toán này có liên hệ mật thiết với các bài toán thử tính nguyên
tố hay thử tính hợp số của một số nguyên, nhưng nó khó hơn nhiều so với hai bài toán thử tính nguyên tố và tính hợp số
* Bài toán RSA (Rivest – Shamir – Adleman):
Cho số nguyên dương n là tích hai số nguyên tố lẻ khác nhau, một
số nguyên dương e sao cho gcd(e,φ(n)) =1, và một số nguyên c ; tìm một
số nguyên m sao cho me ≡ c (mod n)
Điều kiện gcd(e,φ(n)) =1 bảo đảm cho việc với mỗi số nguyên
c ∈ {0,1, ,n -1} có đúng một số m ∈ {0,1, ,n -1} sao cho me ≡ c (mod n)
Dễ thấy rằng nếu biết hai thừa số nguyên tố của n, tức là biết n=p.q thì sẽ biết φ(n) = (p -1)(q -1), và từ đó, do gcd(e,φ(n)) =1 sẽ tìm được
d =e -1mod φ(n), và do đó sẽ tìm được m =c d mod n Như vậy, bài toán RSA có thể qui dẫn trong thời gian đa thức về bài toán phân tích số
nguyên
* Bài toán tìm căn bậc hai mod n :
Cho một số nguyên lẻ n là hợp số Blum, và một số a ∈Qn , tức a là một thặng dư bậc hai theo mod n Hãy tìm một căn bậc hai của a theo mod
n tức là tìm x sao cho x2 ≡ a (mod n)
2.2.2 Phương pháp tạo khoá, mã hoá và giải mã
Trang 23sao cho 0 < d < φ(N) và e * d 1 mod φ(N) (d là nghịch đảo của e modulo N)
Hai số (e, N) làm khóa công khai, còn (d, N) được giữ bí mật làm khóa riêng
ii) Mã hoá:
Sau khi đã tạo khoá, người A gửi bản tin P cho người B, trước khi gửi
đi người A thực hiện mã hoá bản tin P như sau:
Dùng khoá công khai của người B là (e,N)
Chuyển bản tin P thành các số nguyên Pi tương ứng sao cho Pi<N như sau:
Biến đổi các ký tự trong bản tin P thành các số nguyên tương ứng theo một quy tắc nào đó
Chia bản tin vừa biến đổi thành k nhóm có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Pi {0,…, N – 1} (với 1 ≤ i ≤ k)
Thực hiện mã hóa lần lượt từng số Pi Ci theo công thức:
để được nội dung bản tin P ban đầu
Trang 242.2.3 Chi phí thực hiện trong quá trình mã hóa và giải mã
Chi phí cho quá trình mã hoá:
Tính C = Me mod N, với số mũ e thường được chọn có dạng e =
2x + 1 (với xmax = 16) để phép tính lũy thừa modulo được thực hiện
nhanh Vì biểu diễn nhị phân của những số dạng này chỉ có hai bít giá trị 1
ở đầu và cuối Như vậy quá trình mã hóa có nhiều nhất là 16 phép tính bình phương và 1 phép nhân, do đó tổng chi phí của quá trình mã hóa là: 17(2n2 + 2n) = 34(n2+n)
Chi phí cho quá trình giải mã:
Quá trình giải mã của hệ RSA, chỉ thực hiện phép tính M = Cd mod
N, với số mũ bí mật d thường rất lớn (d N) để đảm bảo độ an toàn cho dữ liệu Vì vậy chi phí thực hiện giải mã của hệ RSA tương đương với chi phí
để thực hiện phép tính lũy thừa nhanh là: 3n3 + n2
2.2.4 Độ an toàn hệ mật mã khóa công khai RSA
a Bài toán phân tích số và việc phá hệ mật RSA
Cách tấn công dễ thấy nhất đối với hệ mật RSA là người thám mã sẽ cống gắng phân tích n ra thừa số nguyên tố n=p*q và khi đó anh ta dễ dàng tính được φ(n)=(p-1)(q-1) và do đó tìm được thông tin cửa sập d tương ứng với thông tin mã hoá E bằng thuật toán Euclide Như vậy chúng ta thấy ngay rằng việc phá hệ mật RSA là “dễ hơn” bài toán phân tích số nguyên ra thừa số nguyên tố tuy nhiên cũng chưa có một kết quả nào chỉ ra rằng bài toán phân tích số là thực sự khó hơn cho nên người ta thường thừa nhận rằng bài toán phá hệ RSA là tương đương với bài toán phân tích số nguyên thành thừa số
Để đảm bảo tính khó phân tích ra thừa số của n=p*q thì yêu cầu đầu tiên là p,q là các số nguyên tố lớn xấp xỉ bằng nhau và là số nguyên tố
“mạnh” Khái niệm “mạnh” ở đây chỉ bắt nguồn từ ý nghĩa khó phân tích do
Trang 25vậy nó sẽ được bổ sung cùng với kết quả có được của khả năng phân tích số Nói một cách khác là khái niệm “mạnh” bao gồm sự loại trừ các lớp số nguyên tố mà với chúng tồn tại thuật toán phân tích hiệu quả, chúng ta có thể biết đến một khái niệm sơ khai của tính “mạnh” đó là các số nguyên tố p mà p-1 và p+1 có chứa thừa số nguyên tố lớn
b Việc tấn công hệ mật RSA khác phương pháp phân tích số
Một kết quả thú vị là một thuật toán bất kỳ để tính số mũ giải mã d đều
có thể được dùng như một chương trình con trong thuật toán xác suất kiểu Las Vegas để phân tích n Như vậy mặc dù rằng nếu d bị lộ thì việc phân tích n cũng không còn ý nghĩa theo quan điểm phá hệ mật tuy nhiên kết quả trên dù sao cũng cho ta một thuật toán phân tích số n khi biết d với xác suất thành công không quá ½ của mỗi lần chọn số ngẫu nhiên làm đầu vào cho thuật toán
2.3 PHÂN TÍCH CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MÃ RSA
2.3.1 Phân tích quá trình tạo khóa:
Tạo hai số nguyên tố phân biệt p và q lớn, sao cho bài toán phân tích thật sự là khó giải
Tính N = p* q và φ(N) = (p – 1) * (q – 1)
Chọn số nguyên ngẫu nhiên e sao cho 1 < e < φ(N) và gcd(e, φ(N)) = 1
Sử dụng thuật toán Euclid mở rộng, để tính số nguyên d duy nhất, sao cho 0< d < φ(N) và e * d 1 mod φ(N) (d là nghịch đảo của e modulo N)
Hai số (e, N) làm khóa công khai, còn (d, N) được giữ bí mật làm khóa riêng Các số nguyên tố p, q sẽ bị xóa khi kết thúc quá trình tạo khóa
Như vậy, mấu chốt để tăng tính an toàn của hệ mã RSA là ta cần thực hiện được quá trình mã hóa xuất phát từ các số nguyên tố p, q lớn
Trang 262.3.2 Phân tích quá trình mã hóa:
Giả sử để gửi thông điệp M cho người B Người A thực hiện như sau:
Lấy khóa công khai của người nhận B: (e, N)
Biến đổi thông điệp M thành những số nguyên Mi tương ứng sao cho Mi <N, (i = 1,…, k) Theo phép biến đổi sau:
Biến đổi các ký tự trong thông điệp M thành các số nguyên tương ứng, thí dụ
theo qui tắc: Dấu cách 00, A 01, B 02, , Z
Tập các số nguyên {C1, C2, ,Ck} là bản mã để gửi đến người nhận B
Ta thấy rằng quá trình mã hóa phải thực hiện liên tiếp việc mã hóa các số
Mi theo công thức: Ci = Eke(Mi) = Mie (mod N) Khi p và q lớn thì ta có N = p*q rất lớn
Trên lý thuyết, số e có thể chọn chỉ cần thỏa mãn gcd(e, φ(N)) = 1, tuy nhiên để tăng tính an toàn, số e thường được sẽ là số lớn hơn Max(p,q) với Max(p,q) trả về số lớn nhất giữa p và q
Do đó, quá trình mã hóa sẽ thực hiện với các số rất lớn nhưng vẫn phải đảm bảo thời gian thực hiện việc mã hóa là đủ tốt
Xuất phát từ các lí do trên, ta cần tác động vào quá trình mã hóa bằng các thuật toán tốt để có thể thỏa mãn các yêu cầu trên
Trang 272.3.3 Phân tích quá trình giải mã:
Người nhận B thực hiện các bước sau:
Thực hiện giải mã lần lượt từng số nguyên Ci Mi bằng cách:
Mi = D(Ci) = Cid (mod N) với 0 ≤ Mi < N, (d là khoá bí mật của B)
Thực hiện phép biến đổi ngược lại từ các số Mi thành các chuỗi ký tự tương ứng để khôi phục lại nội dung thông điệp M ban đầu
Quá trình giải mã cũng phải thực hiện việc tính toán liên tiếp để tìm Mi
theo công thức: Mi = D(Ci) = Cid (mod N), quá trình này cũng thực hiện trên các số lớn vì ta có d là số lớn Do đó, quá trình giải mã cũng cần có các tác động để đảm bảo thời gian giải mã là chấp nhận được
Điều này có ý nghĩa rất quan trọng vì hệ mã RSA có số lượng phép tính lớn, bên cạnh đó để có thể thực hiện với các bản rõ có nội dung lớn thì ta phải giải quyết được vấn đề này
2.4 CÁC PHƯƠNG PHÁP TẤN CÔNG ĐỐI VỚI HỆ MÃ RSA
2.4.1 Tấn công trong quá trình tạo khoá
Việc tìm ra hai số nguyên tố p và q đủ lớn thường được thực hiện bằng cách thử xác suất các số ngẫu nhiên có độ lớn phù hợp
P và q cần được chọn không quá gần nhau để khó phân tích n bằng phương pháp phân tích Fermat Ngoài ra, nếu p-1 hoặc q-1 có thừa số nguyên
tố nhỏ thì n cũng có thể dễ dàng bị phân tích
Cần tránh sử dụng các phương pháp tìm số ngẫu nhiên mà kẻ tấn công
có thể lợi dụng để biết thêm thông tin về việc lựa chọn Vì vậy các số được chọn cần đồng thời ngẫu nhiên và không dự đoán được
Ngoài ra, khoá bí mật d phải đủ lớn Năm 1990, Wiener chỉ ra rằng nếu giá trị của p nằm trong khoảng q và 2q và d<n1/4/3 thì có thể tìm ra được
d từ n và e