ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
MỤC LỤC
TRANG
MỤC LỤC TRANG.... ........ ....... ...... .....1 LỜI CẢM ƠN.............. ............................. .............................. .............................. .............................. .............................. .............................. .............................. ......................... ..............2 Chương 1: AN TOÀN BẢO MẬT THÔNG THÔNG TIN.............. ............................. .............................. .............................. .............................. ...................3 1.1 Mật mã học ............................................................................................................................4 1.2 Khái niệm hệ mã mật ............................................................................................................5 Chương 2: KIẾN THỨC THỨC TOÁN TOÁN HỌC............. ............................ .............................. .............................. .......................... ................ ........... ........... ........... .......8. 2. 1 Chia hết .................................................................................................................................8 2.2 MODULUS.............. ............................ ............................. .............................. .............................. .............................. ......................... ................ ........... ........... ........... ......... ....8 2.2.1 Định nghĩa :.............. ............................. .............................. .............................. .............................. .............................. .............................. ..................... ........... .........8 2.2.2 Các phép toán .................................................................................................................9 2.3 ƯỚC CHUNG LỚN NHẤT - GCD (Greatest Common Divisor) .....................................10 .....................................10 2.3.1 Thuật toán tìm ước chung lớn nhất của 2 số nguyên .................................................. 11 NGUYÊN NGUY ÊN TỐ TỐ......... ................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .......................... ................13 2.4.1 Số nguyên tố .................................................................................................................13 13 Lịch sử............. ............................ .............................. .............................. .............................. .............................. .............................. .......................... ................. ........... ........... .......13 . Nguyên Nguy ên tố cùng nhau :.......... .................... .................... .................... .................... .................... .................... ............................................... .....................................14 14 2.4.4 Phi ơle............... .............................. .............................. .............................. .............................. .............................. .............................. ........................... .................. .......14 1. 4 2.5 PHẦN TỬ NGHỊCH ĐẢO .................................................................................................15 15 2.5.1 Thuật Toán Euclidian mở rộng : ..................................................................................15 ..................................................................................15 2.5.2 Thuật Thuật toán lũy thừa nhanh............. ............................ .............................. .............................. ......................... ............... .......... ........... ........... ........ ...17 17 2.6 GROUP , FIELD VÀ RING ............. ............................ .............................. .............................. ........................... .................. ........... ........... ........... .........18 18 Nhóm hữu hạn hạn.......... .................... .................... .................... .................... .................... .................... .................... .................... .................... .............................. ....................19 19 Nhóm vô hạn hạn và nhóm nhóm abelia abeliann.......... .................... .................... .................... .................... .................... .................... .................... .................... ............... .....20 20 2.7 THUẬT TOÁN XÁC SUẤT SỐ NGUYÊN NGUYÊN TỐ............... .............................. ........................... ................. ........... ........... ........... ......26 26 2.7.1 ĐẶC ĐIỂM CỦA RABIN RABIN MILLER............. ............................ .............................. .............................. ........................... .................. ......27 27 THUẬT TOÁN.............. ............................. .............................. .............................. .............................. .............................. ...................... ............. ........... ........... ........... .....27 27 2.7.3 ÁP DỤNG THUẬT TOÁN VỚI SỐ NGUYÊN TỐ ..................................................28 28 ÁP DỤNG THUẬT TOÁN TOÁN VỚI HỢP SỐ............. ............................ .............................. .............................. ............................. .................. ....28 28 PHỎNG ĐOÁN SỐ LƯỢNG CƠ SỞ KHÔNG CHẮC CHẮC CHẮN CỦA N = P*Q P*Q...... ........... ......... ......29 29 Chương 3: HỆ HỆ MẬT RSA............... .............................. .............................. .............................. .............................. .............................. .......................... ................ ......... ....46 46 3.1 GIỚI THIỆU............... .............................. .............................. .............................. .............................. .............................. .............................. ............................ ................ ...46 46 3.2 LỰA CHỌN MODULO.............. ............................. .............................. .............................. ............................. ................... ........... ........... ........... ............ .......47 4. 7 3.3 CHỨNG MINH RSA.............. ............................. .............................. .............................. .............................. .............................. ..................... ............ ........... ......48 4. 8 3.4 CÁC CÁC BƯỚC BƯỚC TẠO KHÓA RSA RSA............... .............................. .............................. .............................. ..................... ........... ........... ............ ........... .........49 49 Chương 4: HỆ HỆ MẬT ECC............... .............................. .............................. .............................. .............................. .............................. .......................... ................ ......... ....51 51 4.1 ĐỊNH NGHĨA............... .............................. .............................. .............................. .............................. .............................. .......................... ................ ........... ........... ......51 . 4.2 MÔ TẢ HÌNH HỌC CỦA PHÉP CỘNG............... .............................. .............................. .............................. ............................. ..................53 53 4.4 ELLIPTIC TRÊN TRƯỜNG HỮU HẠN NGUYÊN TỐ............... .............................. .............................. ..................... ......55 55 4.4.1 ĐỊNH NGHĨA.............. ............................. .............................. .............................. .............................. .............................. ......................... ................ ........... ......55 5. 5 4.4.2 QUY QUY TẮC TẮC CỘNG CỘNG............... .............................. .............................. .............................. .............................. .............................. ......................... ............... .....56 56 TÀI LIỆU THAM KHẢO:............. ............................ .............................. .............................. .............................. .............................. ............................ .................. ........ ...65 65
GVHD_TH.S 1
ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
LỜI CẢM ƠN Tôi xin cảm ơn thầy Nguyễn Văn Thắng đã giúp đỡ tôi thực hiện báo cáo tốt nghiệp GIỚI THIỆU : GVHD_TH.S 2
ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
LỜI CẢM ƠN Tôi xin cảm ơn thầy Nguyễn Văn Thắng đã giúp đỡ tôi thực hiện báo cáo tốt nghiệp GIỚI THIỆU : GVHD_TH.S 2
ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
Ngày nay với sự bùng nổ của công nghệ thông tin thì vấn đề về bảo mật của những thông tin nhạy cảm càng được để ý tới như hệ thống bảo mật của ngân hàng, bản quyền phần mềm ,thông tin tin của chính phủ …. Vì vậy vậy có rất nhiều hệ mật được đưa ra ra cùng với những ưu điểm và đáp ứng như cầu hiện tại của con người.Đặc biệt là các hệ mật dựa trên các thuật toán mã hóa công khai như RSA và Elliptic mà chúng ta sẽ đề cập tới như là nội dung chính của báo cáo này. Hệ mật RSA và Elliptic là một trong những hệ mật được đánh giá là an toàn nhất tuy vậy tài liệu về hệ mật này ở Việt Nam còn hạn hẹp để nghiên cứu. với mục đích cho người đọc hiểu biết những kiến thức cơ bản nhất về hai hệ mật trên cùng với những những kiến thức cơ sở về toán học, số học nhằm phục vụ cho những người muốn tìm hiểu về RSA và Elliptic. Mặc dù đã cố gắng nhưng chắc chắn chắn không thể tránh được những sót sót nhất định . Mọi góp ý xin gởi về hòm thư : javad : javadev.jx4 ev.jx4@gmai @gmail.com l.com Tôi xin chân thành cảm ơn !
Chươ ng 1: AN TOÀN BẢO MẬT THÔNG TIN
Trải qua nhiều thế kỉ hàng loạt các giao thức và các cơ chế đã được tạo ra để đáp ứng nhu cầu an toàn bảo mật thông tin khi mà nó được truyền tải trên các phương tiện vật lý giấy báo, sách sách .. thường thì các mục tiêu của an toàn bảo mật thông tin không thể GVHD_TH.S 3
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
đạt được nếu chỉ đơn thuần dựa vào các thuật toán toán học và các giao thức , mà để đạt được điều này đòi hỏi cần có các kỹ thuật mang tính thủ tục và sự tôn trọng các điều luật . chẳng hạn sự bí mật của các bức thư hay do sự phát tán các lá thư đã có đóng dấu bởi một dịch vụ thư tín đã được chấp nhận. Tính an toàn về mặt vật lý của các lá thư là hạn chế nên đảm bảo bí mật của các bức thu pháp luật đã quy định việc xem thư mà không được sự đồng ý của chủ nhân hoặc người có thẩm quyền sẽ bị trừng phạt . Đôi khi mục địch của an toàn bảo mật thông tin lại đạt được nhờ chính phương tiện vật lý mang chúng , chẳng hạn như tiền giấy đòi hỏi phải được in bằng các loại mực và giấy tốt để không bị làm giả Về mặt ý tưởng việc lưu trữ thông tin là không có nhiều thay đổi đáng kể qua thời gian. Ngày xưa thông tin thường được lưu giữ vận chuyển trên giấy tờ trong khi giờ đây chúng được lưu dưới dạng số hóa được vận chuyển bằng các hệ thống viễn thông hoặc hệ thống không dây .Tuy nhiên sự thay đổi đáng kể đến ở đây chính là khả năng sao chép và thay đổi thông tin . Người ta có thể tạo ra hàng ngàn mẩu tin giống nhau và không thể phân biệt nó với bản gốc và điều cần thiết đối với xã hội thông tin là hầu hết được lưu trữ và vận chuyển trên các phương tiện điện tử chính là các phương tiện đảm bảo an toàn bảo mật thông tin độc lập với các phương tiện lưu trữ và vận chuyển vật lý của nó .Phương tiện đó chính là mật mã học một ngành lịch sử lâu đời dựa trên nền tảng thuật toán toán học , số học xác suất và các môn khoa học khác. 1.1 Mật mã học
Mật mã học gồm hai lĩnh vực mã hóa và thám mã trong đó Mã hóa nghiên cứu các thuật toán và phương thức để đảm bảo tính bí mật và xác thực của thông tin . Các sản phẩm của lĩnh vực này là các hệ mã mật, các hàm băm các hệ chứ ký điện tử các cơ chế phân phối , quản lý và các giao thức mật mã. Thám mã : nghiên cứu các phương pháp phá mã hoặc tạo mã giả . Sản phẩm của lĩnh vực này là các phương pháp thám mã, các phương pháp giả mạo chữ ký , các phương pháp tấn công các hàm băm và các giao thức mật mã . Mã hóa : là một ngành khoa học của các phương pháp truyền tin bảo mật Quy ước của mã hóa : Người ta quy ước những từ , những ký tự của văn bản gốc có thể hiểu được là PlainText .Các từ, những ký tự trong một văn bản nào đó mà không thể hiểu được thì gọi là bản mã Ciphertext Có 2 phương thức mã hóa cơ bản : thay thế và hoán vị - Phương thức mã hóa thay thế là phương thức mã hóa mà từng ký tự gốc hay một nhóm ký tự của bản rõ được thay thế bởi các từ , các ký hiệu khác hay kết hợp với nhau cho phù hợp với một phương thức nhất định và khóa GVHD_TH.S 4
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
- Phương thức mã hóa hoán vị là phương thức mã hóa mà các từ mã của bản rõ được săp xếp theo một phương thức nhất định Các hệ mật thường sử dụng kết hợp cả 2 kỹ thuật này 1.2 Khái niệm hệ mã mật
Một hệ mật mã là một bộ gồm 5 thành phần (P, C, K, E,D) thỏa mãn các điều kiện sau:
• P là không gian bản rõ : tập hợp hữu hạn các bản rõ có thể • C là không gian bản mã : tập hữu hạn các bản mã có thể • K là không gian khóa : là tập hữu hạn các khóa có thể Với mỗi k thuộc K , có một quy tắc mã hóa e k thuộc E và một quy tắc tương ứng dk thuộc D với mỗi ek : P Cvà dk : C P là những hàm mà dk (ek (x)) = x cho mọi bản rõ x thuộc P . Hàm giải mã dk chính là ánh xạ ngược của hàm mã hóa ek Mô hình truyền tin
Trong mô hình này người gởi S(Sender) muốn gửi một thông điệp X (Message là một bản rõ ) tở người nhận R(Receiver) qua một kênh truyền không an toàn , kẻ địch E(Enemy) có thể nghe trộm hay sửa đổi thông tin X . Vì vậy S sử dụng phép biến đổi , tức mã hóa (E - Encryption) lên thông tin X ở dạng đọc được (Plaintext) để tạo ra một đoạn văn bản được mã hóa Y(C - Ciphertext) không thể hiểu được theo một quy luật thông thường sử dụng một thông tin bí mật được gọi là K 1 , khóa K 1 chính là thông số điều khiển cho phép biến đổi bản rõ từ X sang bản mã Y(chỉ các bên tham gia truyền tin S và R mới có thể biết điều này ). Giải mã(D - Decryption) là quá trình ngược lại cho phép người nhận thu được thông tin X ban đầu từ đoạn mã hóa Y sử dụng khóa giải mã K 2 (chú ý là khóa giải mã và khóa mã hóa có thể khác nhau hoặc là một tùy thuộc vào hệ mã sử dụng là mã đối xứng hay bất đối xứng). Quá trình mã hóa và giải mã yêu cầu các quá trình biến đổi dữ liệu từ dạng nguyên thủy thành đầu vào cho việc mã hóa và chuyển đầu ra của quá trình giải mã GVHD_TH.S 5
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
thành bản rõ .Các quy trình này là các quá trình biến đổi không khóa và được gọi là quá trình encode và decode. Theo luật Kirchoff(1835 - 1903) thì toàn bộ cơ chế mã hóa / giải mã trừ khóa là không bí mật đối với kẻ địch . Rõ ràng khi đối phương không biết được hệ mật đang sử dụng thuật toán mã hóa gì thì việc thám mã sẽ rất khó khăn . Nhưng chúng ta cũng không thể tin vào độ an toàn của hệ mật mà chỉ dựa vào giả thiết không chắc chắn là đối phương không biết thuật toán đang sử dụng . Vì vậy khi trình bày một hệ mật bất kỳ chúng ta đều giả thiết hệ mật đó được trình bày dưới luật Kirchoff. Ý nghĩa của luật Kirchoff : sự an toàn của các hệ mật mã không phải dựa vào độ phức tạp của thuật toán mã hóa sử dụng. MÃ HÓA : Nghệ thuật của việc bảo vệ thông tin là truyền nó (mã hóa nó) thành một định dạng không thể đọc được gọi là bản mã (Cipher text). Chỉ những người có khóa bí mật mới có thể giải mã chúng về dạng bản rõ (Plain text). Mã hóa có thể được bẻ khóa bởi việc thám mã và được gọi là bẻ khóa . Tuy vậy mã hóa hiện đại rất khó có thể bẻ khóa. Như Internet và các cấu trúc khác của giao tiếp điện trở lên thịnh hành. Bảo mật điện tử trởi lên ngày càng quan trọng. Mã hóa để bảo vệ email , thông tin thẻ tín dụng và dữ liệu của các tập đoàn . một trong những hệ mật mã quan trọng trên internet là Pretty Good Privacy Vì có tính ứng dụng và miễn phí. Mã hóa có thể chia thành : Mã hóa đối xứng : sử dụng một khóa duy nhất mà cả người nhận và người gởi đều có Mã hóa công khai : sử dụng 2 khóa , khóa công khai dùng để mã hóa và khóa bí mật dùng để giải mã. MÃ HÓA CÔNG KHAI : mã hóa công khai được phát hiện lần đầu tiên vào năm 1976 bởi Whitfield Diffie và Martin Hellman . bởi vậy đôi khi người ta còn gọi mã hóa công khai là mã hóa Diffie – Hellman . Nó cũng được gọi là mã hóa bất đối xứng vì nó sử dụng 2 khóa thay cho mã hóa đối xứng sử dụng 1 khóa duy nhất Hệ mã hóa công khai sử dụng hai khóa : Public key : khóa công khai được biết bởi người gởi và người nhận Private key : chỉ được người nhận thông điệp biết
GVHD_TH.S 6
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Khi Alice muốn gởi một thông điệp bí mật tới Bob . Alice sử dụng khóa công khai của Bob để mã hóa thông điệp sau đó gởi cho Bob . sau đó Bob sử dụng khóa bí mật của mình để giải mã. Một thành phần quan trọng cho mã hóa công khai là khóa công khai và khóa bí mật có quan hệ với nhau : khóa công khai có thể mã hóa thông điệp và chỉ khóa bí mật tương ứng mới có thể giải mã thông điệp ấy. Ngày nay mã hóa công khai trở nên phổ biến cho việc truyền tải dữ liệu qua Internet . chúng cực kỳ bảo mật và sử dụng cũng rất đơn giản. Một vấn đề khó đối với mã hóa công khai là bạn cần biết khóa công khai để mã hóa một thông điệp cho ai đó.
GVHD_TH.S 7
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN Chươ ng 2: KIẾN THỨC TOÁN HỌC 2. 1 Chia h ế t
Khi học ở trường tiểu học chúng ta được học về 4 toán tử cơ bản trên số (nguyên) có đó là cộng(+) trừ(-) nhân(x hoặc .) chia(: hoặc /). với 2 số nguyên nào đó thì tổng, hiệu, tích của chúng là các số nguyên, trong khi đó thương của chúng không nhất thiết phải là một số nguyên .Cho một số nguyên m và một số nguyên khác không n, chúng ta nói m chia hết cho n nếu có một số nguyên k sao cho m = kn; điều đó có nghĩa thương m/n là một số nguyên . Chúng ta định nghĩa n | m . Nếu m chia hết cho n khi ấy m được gọi là bội của n và n được gọi là ước của m bởi vì 0 = 0 . n , vì vậy n | 0 với mọi n . cho một số nguyên n bội của n sẽ là 0 , ± n , ± 2n ... Nếu m không chia hết cho n chúng ta ký hiệu n kỳ số nguyên m nào vì m # k.0 với mọi số nguyên k
m .Chú ý rằng 0
m với bất
mệnh đề 1.1 cho x, y , z là các số nguyên chúng ta có các tính chất x | x (tính phản xạ) nếu x | y và y | z thì x | z (tính giao hoán) nếu x + y và y #0 thì |x| <= |y| nếu x | y và x | z thì x | ay + bz với bất kỳ số nguyên a và b nếu x | y và x | y + z , x + y - z thì x | z nếu x | y và y | x thì |x| = |y| nếu x | y và y #0 thì y/x | y z # 0 , x | y khi và chỉ khi xz | yz 2.2 MODULUS 2.2.1 Định nghĩa : Cho a,b,n trong đó a ,b , m ∈ N, m ∈ (1 ; +∞ ) chúng ta nói a đồng dư với b trên modulo m khi và chỉ khi m | (a - b) . chúng ta ký hiệu quan hệ đó như sau : a ≡ b (mod m) và được đọc là : “ a đồng dư với b trên modulo m” . sau đây là một số tính chất quan trọng Định lý 1 : Nếu a ≡ b (mod LCM(m1, m2, …. , mk ))
⇒ a ≡ b (mod mi ) i ∈ [1 ; k] Định lý 2 : GVHD_TH.S 8
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Nếu a ≡ b (mod m) và a ≡ b (mod n)
⇒ a ≡ b (mod LCM(m,n)) Định lý 3 : Nếu a ≡ b (mod m) và a ≡ b (mod n) đồng thời GCD(m,n) = 1
⇒ a ≡ b ( mod mn) Định lý 4 : Nếu a ≡ b (mod m) và n | m ⇒ a ≡ b (mod n) Định lý 5 : Nếu a ≡ b (mod m) , k ∈ N ⇒ ak ≡ bk (mod m) Định lý 6 : Nếu a ≡ b (mod m) , c ≡ d (mod m) ⇒ a ± c ≡ b ± d (mod m), ac ≡ bd (mod m) Định lý 7 : Nếu ac ≡ bc (mod m) , GCD(c,m) = 1 ⇒ a ≡ b (mod m) Nếu ac ≡ bc (mod m) , GCD(c,m) = d > 1 ⇒ a ≡ b (mod (m/d)) 2.2.2 Các phép toán Cho a,b là các số nguyên , m là số nguyên dương Phép cộng : a + b
(mod m) =
a + b nếu a + b < m a + b – m nếu x + y ≥ m Ví dụ : (3 + 7) (mod 8) = 10 mod 8 = 10 - 8 = 2 (3 + 2) (mod 9) = 5 mod 9 = 5 Phép trừ : a – b (mod m) = a + m – b nếu x < y a – b nếu x ≥ y Ví dụ : (7 – 2) (mod 11) = 5 mod 10 = 5 GVHD_TH.S 9
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
(2 – 7) (mod 11) = 2 + 11 – 7 = 6 Phép nhân : ab (mod m) = (a (mod m) x b (mod m)) mod m Ví dụ : (5 x 6) mod 8 = 30 mod 8 = 6 (7 x 10) mod 3 = 7 mod 3 x 10 mod 3 = (4 x 7) mod 3 = 1 Phép chia : để tìm a/b mod m ta cần tìm số nguyên x trong đó 0 < x < m sao cho: b*x = a (mod m) Ví dụ : 7/5 mod 12 = 11 vì 11*5 = 7 mod 12 Hoặc : a/b (mod m) = ab-1 (mod m) . trong đó b-1 là phần tử nghịch đảo của b trên Zm . chúng ta có thể xác định b-1 bằng hàm phi ơle hoặc thuật toán Euclidian mở rộng Ví dụ : 7/ 5 (mod 12) = 7*5-1 (mod 12) = 7*5 (mod 12) = 35 mod 12 = 11 11/15 (mod 26) = 11*15-1 (mod 26) = 11*7 (mod 26) = 77 (mod 26) = 25 Một số trường hợp không cho kết quả : Ví dụ : 4/2 mod 6 = 4 vì 2 * 2 = 4 mod 6 2/2 mod 6 = 1 vì 1 * 2 = 2 mod 6 Nhưng 5/2 mod 6 sẽ không có câu trả lời vì không tồn tại một số x nguyên nào để 2*x = 5 mod 6 Một số trường hợp cho nhiều kết quả : 4/2 = 2 mod 6 vì 2 * 2 = 4 mod 6 4/2 = 5 mod 6 vì 2 * 5 = 4 mod 6 2.3 ƯỚC CHUNG LỚN NHẤT - GCD (Greatest Common Divisor) `Một số nguyên dương k chung ta định nghĩa D k là tập hợp ước nguyên dương . Điều đó có nghĩa tập hợp Dk là một tập hữu hạn và cho 2 sô nguyên dương m và n số nguyên dương là thành phần lớn nhất của tập D m ∩ Dn được gọi là ước chung lớn nhất của m và n , ký hiệu gcd(m,n) . Trong trường hợp D m ∩ Dn = {1} chúng ta có gcd(m,n) = 1và chúng ta nói m và n có quan hệ nguyên tố (hay nguyên tố cùng nhau). Ký hiệu gcd(m,n) hay (m,n).Sau đây là những tính chất cơ bản nhất của ước số chung lớn nhất GCD GVHD_TH.S 10
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Nếu p là một số nguyên tố thì gcd(p,m) = p hoặc gcd(p,m) = 1 Nếu d = gcd(m,n) , m = dm' , n = dn' thì gcd(m',n') = 1 Nếu d = gcd(m,n), m = d' m' , n = d'n', gcd(m',n') = 1 thì d' = d Nếu m = nq + r thì gcd(m,n) = gcd(n,r) 2.3.1 Thuật toán tìm ước chung lớn nhất của 2 số nguyên a. Thuật toán thông thường public static long gcd(long a, long b){ if (a < 0) a = -a; if (b < 0) b = -b; if (a == 0 || b == 0) return a + b; while(a != b){ if (a > b) a -= b; else b -= a; } return a; } b. Một cài đặt khác int gcd(int a, int b){ int m = a; int n = b; if(m == 0) return n; while(n != 0){ m %= n; GVHD_TH.S 11
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
m ^= n; n ^= m; m ^= n; } return m; } Thuật toán euclidian Để tìm gcd(a,b) chúng ta có thể sử dụng thuật toán Euclidian với a > b . Đầu tiên chúng ta sẽ chia a cho b và ghi nhớ phần nguyên (quotient) q và phần dư (Remainder) r : a = qb + r .Tiếp theo chung ta thực hiện lần chia thứ 2 theo quy tắc sau đó gán a = b và b = r tiếp tục như vậy cho tới khi được phần dư nhỏ nhất khác 0.Ví dụ tìm ước chung lớn nhất của 65 và 45 a = 65 b = 45 65 = 1.45 + 20 ; 45 = 2.20 + 5 20 = 4.5 + 0 vậy gcd(65,45) = 5 public static long gcd(long a, long b){ long r; if (a < 0) a = -a; if (b <0) b = -b; if (a > b){ do{ r = a % b; if (r == 0) break ; GVHD_TH.S 12
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
a = b; b = r; }while(r != 0); return b; }else return gcd(b,a); } NGUYÊN TỐ 2.4.1 Số nguyên tố Một số nguyên tố là một số tự nhiên lớn hơn 1 và không có ước nguyên dương nào khác ngoài 1 và chính nó. Một số nguyên dương lớn hơn 1 không là số nguyên tố được gọi là một hợp số. Ví dụ : số 5 là số nguyên tố bởi nó chỉ có các ước là 1 và 5 , trong khi đó 6 là một hợp số bởi 6 có các ước là 1 2 3 6 . Định lý cơ bản của số học thiết lập vai trò trung tâm của số nguyên tố : một số nguyên lớn hơn 1 có thể biểu diễn bởi các số nguyên tố khác nhau được sắp xếp theo thứ tự tăng dần . Định lý này loại số 1 ra khỏi tập các số nguyên tố . Thuộc tính trở thành một số nguyên tố được gọi là thuộc tính cơ sở. một phương thức cơ sở nhưng chạy rất chậm nhằm kiểm tra tính nguyên tố của n được gọi là phép chia thử . Nó bao gồm việc kiểm tra n có phải là bội của một số nguyên nào đó giữa 2 và n Nhiều thuật toán hiệu quả hơn thuật toán chia thử được phát minh nhằm kiểm tra cácsố lớn.Tới thời điểm 2011 số nguyên tố lớn nhất được tìm thấy có gần 13 tỉ chữ số thập phân .Số lượng số nguyên tố là vô hạn Nhiều câu hỏi xung quanh số nguyên tố được hé mở , như ước lượng Goldbach khẳng định tất cả các số nguyên lẻ lớn hơn 2 có thể biểu diễn như là tổng của 2 số nguyên tố và giả định cặp số nguyên tố cho rằng có vô số các cặp số nguyên tố khác 2. Số nguyên số được sử dụng rất nhiều trong công nghệ thông tin giống như mã hóa công khai , sử dụng các tính chất khó của việc phân tích một số lớn thành tích các thừa số nguyên tố . Lịch sử Có nhiều phát hiện qua ghi chép của người Ai Cập cổ rằng họ đã có một số kiên thức về các số nguyên tố .Các ghi chép cho răng người ai cập cổ đã có kiến thức về số GVHD_TH.S 13
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
nguyên tố .Tuy vậy dễ nhế là các nghiên cứu về số nguyên tố của người Hy Lạp bao gồm các định lý quan trong về số nguyên tố bao gồm tính vố hạn của số nguyên tố và các định lý cơ bản của số học . Euclid cũng trình bày cách làm sao để tạo số hoàn hảo từ số nguyên tố Mersene. Sau các người hy lạp một số vấn đề được nghiên cứu về số nguyên tố trong thế kỷ 17 . Năm 1640 Pierre de Fermat được đưa ra (không chứng minh) sau đó được chứng minh bởi Leibniz và Euler. Một trường hợp đặc biệt của định lý Fermat được biết đến dễ dàng hơn bởi giả định Fermat của người Trung Quốc rằng tất cả những số có cấu trúc 22^n + 1 là các số nguyên tố (họ gọi là số Fermat) điều đó vẫn đúng với số n thuộc [0,4] tuy vậy nhiều số Fermat sau đó ví dụ 232 + 1 là hợp số . Thầy tu người pháp Marin Mersenne coi các sô nguyên tố có công thức 2 p + 1 trong đó p là các số nguyên tố. Năm 1747 ông đưa ra các số hoàn hảo chẵn có công thức 2 p-1(2 p -1) Sau này nhiều lý thuyết liên quan tới số nguyên tố cũng như các thuật toán kiểm tra số nguyên tố cũng được phát hiện. Nguyên tố cùng nhau : Hai số nguyên dương a,b trong đó gcd(a,b) = 1 thì người ta gọi a có quan hệ nguyên tố với b , hay a và b nguyên tố cùng nhau và được ký hiệu a b.Số lượng các số nguyên , nguyên tố cùng nhau với số nguyên dương n giữa 1 và n được tính bằng hàm phi ơle của n .Các số nguyên tố luôn nguyên tố cùng nhau với nhau Các điều kiện sau để hai số nguyên a,b là nguyên tố cùng nhau Không có số nguyên tố nào chia hết cho cả a và b Tồn tại các số nguyen x và y mà ax + by = 1 b có một phần tử nghịch đảo modulo a hay tồn tại một số nguyên y sao cho by = 1 mod a 2.4.4 Phi ơle Với mỗi số nguyên N, giá trị hàm phi ơlle của N là tổng tất cả các số nguyên thuộc Zn và nguyên tố cùng nhau với N. Chẳng hạn nếu P là một số nguyên thì giá trị hàm phi ơle của P : ϕ (P) = P – 1 hoặc nếu N = p*q trong đó p và q là hai số nguyên tố thì (N)=(p-1)*(q-1) Trong trường hợp tổng quát nếu phân tích N thành tích của các thừa số nguyên tố: N = p1a1 p2a2…pk ak
GVHD_TH.S 14
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Trong đó pi là các số nguyên tố và a i là các số nguyên dương thì hàm phi ơle của n được tính như sau
ϕ (N) = (p1 - 1)p1(a1 - 1) (p2 – 1)p2(a2 - 1)…(pk - 1)pk (ak - 1) Định lý Ơle :
∀ a ∈ Z* N = Z N – {0} và GCD(a,N) = 1 ta có a ^ ϕ (N) ≡ 1(mod N) có nghĩa là a ^ ϕ (N) chính là phần tử nghịch đảo của a trên Z N Thuật toán tìm giá trị hàm phi ơle của n int PhiOle(int n){ int phi = 1; for(int i = 2 ; i < n ; i++) if(gcd(n,i) == 1) phi++; return phi; } 2.5 PHẦN TỬ NGHỊCH ĐẢO Trên trường số thực một số b được gọi là phần tử nghịch đảo của a khi và chỉ khi ab =1 Ví dụ 1/17 là phần tử nghịch đảo của 17 trên trường số thực vì 17 * (1/17) = 1 Trên trường Zm thì b được gọi là phần tử nghịch đảo của a khi và chỉ khi ab 1 mod (m) .Ký hiệu b = a-1 Ví dụ trên trường Z26 phần tử nghịch đảo của 5 là 21 vì 21*5 = 105 mod 26 = 1. Trên trường Z20 phần tử nghịch đảo của 3 là 7 vì 7*3 = 1 (mod 20) Để xác định phần tử nghich đảo của một số e trên trường Z m ta có thể sử dụng thuật toán Euclidian mở rộng hoặc phương pháp lũy thừa nhanh. 2.5.1 Thuật Toán Euclidian mở rộng : public static long extendsEuclidian(long base , long modulus){ long temp = modulus; if ( gcd (base,modulus) == 1){ long r ,q , y0, y1,y; r = modulus % base; GVHD_TH.S 15
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
q = modulus / base; y0 = 0; y1 = 1; y = y0 - y1*q; while(r != 0){ modulus = base; base = r; r = modulus % base; if (r == 0) break ; q = modulus / base; y0 = y1; y1 = y; y = y0 - y1 * q; } if (y >= 0) return y; else return temp + y; } else return 0; } Ví dụ :
GVHD_TH.S 16
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
2.5.2 Thuật toán lũy thừa nhanh Như ta đã biết nếu a là một số nguyên và GCD(a,Zn) = 1 Thì a ^ ϕ (N) chính là phần tử nghịch đảo của a trên Z n . vậy để tìm phần tử nghịch đảo của a ta chỉ cần tính a ^ ϕ (N). thuật toán lũy thừa sau cho phép tính nhanh a m (mod N) Input : a , m , N . trong đó m = bk bk-1….b1 b0 Output : am (mod N) Algorithm: j = 0, result = a; while(k >= j){ if(b j == 1) result = (result * a)(mod N); a = (a * a) (mod N) j++; GVHD_TH.S 17
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
} return result; một cách cài đặt khác int PowerOverM(int n, int e, int m){ long r = 1; long t = n % m; for(int i = e ; i != 0 ; i/=2){ if(i % 2 != 0) r = (r*t) % m; t = (t * t) % m; } return r; } 2.6 GROUP , FIELD VÀ RING Phần lớn không thể hiểu đầy đủ các bài toán mã hóa hiện đại và một vài quan trọng của bảo mật máy tính nếu chúng ta không hiểu trường hữu hạn . Ví dụ nếu chúng không hiểu về những định nghĩa liên quan tới trường hữu hạn chúng ta sẽ không thể hiểu AES (Advanced Encryption Standard). Nếu không hiểu trường hữu hạn .Chúng ta sẽ không thể hiểu gốc gác của thuật toán RSA cho mã hóa công khai … Một tập hợp các đối tượng với toán tử nhị phân (toán tử được áp dụng cho 2 đối tượng tại một thời điểm) cho các thành phần của tập hợp , phải thỏa mãn 4 tính chất sau nếu tập hợp đó muốn trở thành một nhóm : Một nhóm được định nghĩa bởi {G , o} trong đó G là tập hợp của các đối tượng và o là toán tử : • Tính đóng - Closure: với quan hệ toán tử . tính đóng có nghĩa là nếu a và b là
các thành phần của một tập hợp, thì thành phần a o b = c cũng thuộc tập hợp. • Tính kết hợp - Associateivity : tính kết hợp có nghĩa là (a o b) o c = a o (b o c) • Tồn tại một thành phần định danh : một thành phần i được gọi là một thành
phần định danh cho tất cả các phần tử a thuộc tập hợp , chúng ta có a o i = a; • Tồn tại một phần tử nghịch đảo cho mỗi một thành phần với toán tử đặc trưng GVHD_TH.S 18
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Có nghĩa là nếu a thuộc tập hợp thì tập hợp cũng bao gồm một phần tử b trong đó a o b = i với giả thiết i là phần tử định danh Nhóm hữu hạn Nhóm vô hạn là một nhóm mà kích thước các phần tử là vô hạn điều đó rất dễ để tưởng tượng , ví dụ tập hợp tất cả các số dương , số âm với toán tử + Vậy nhóm hữu hạn là gì ? cho Ln = {1, 2, .........., n} định nghĩa tập hợp của n phần tử Gọi Sn là tập thứ tự các Sk đặc trưng cho một tập (p1,p2,p3, ...... , pk )
phần
tử
thuộc
tập
hợp
Pi # P j trong đó i # j Kích thước của Sk = k! Ví dụ Ln = {1,2,3} S3 = {(1,2,3) , (1,3,2) ,(2,1,3) ,(2,3,1) ,(3,1,2) ,(3,2,1)} Và tập hợp của Sk = 6 Điều đó cũng có nghĩa là S2 = 6; Gọi p và q là 2 phần tử của tập hợp S k . Định nghĩa toán tử bởi ký tự o , biểu thức p o q Có nghĩa là chúng ta muốn hoán vị các thành phần p qua các thành phần q. Chúng ta trở lại với ví dụ về tập hợp L 3 = {1,2,3} Như đã trình bày mỗi phần tử của S3 là một hoán vị của 3 phần tử trong L3 S3 = {(p1,p2,p3) | p1, p2,p3 ∈ L3 với p1 # p2# p3} Và chúng ta có 2 phần tử của S3 p = (1, 3, 2) q = (3, 2, 1) và toán tử giữa p và q p o q = (1,3,2) o (3,2,1) Hoán vị p theo các thành phần của q có nghĩa là đầu tiên chúng ta lựa chọn 3 thành phần của p , sau đó lựa chọn 2 thành phần của p và cuối cùng là lựa chọn một thành phần của p . kết quả của hoán vị {2 3 1 } vì vậy q o p = (3,2,1) o (1,2,3) = (2,3,1) GVHD_TH.S 19
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Đúng hơn p o q thuộc S3 S3 đóng với toán tử o Nhóm vô hạn và nhóm abelian Sk là tất cả các hoán vị của các thành phần tập hợp L n chỉ là hữu hạn kết quả Sk với toán tử o tạo thành một nhóm hữu hạn Tuy vậy một nhóm cũng có thể là vô hạn . Tập hợp của tất cả các số nguyên, số âm và 0 với toán tử cộng(+) là một nhóm vô hạn. Nếu toán tử trên các phần tử của tập hợp có tính giao hoán nhóm được gọi là nhóm abelian . Toán tử o là giao hoán nếu a o b = b o a Vậy {Sk ,o} có phải là một nhóm abelian ? Điều đó là không đúng nếu n là một số chung chung và đúng nếu n là một giá trị xác định {EX :S2} Một nhóm phải được đảm bảo rằng có một thành phần được gọi là thành phần định danh . Thành phần định danh của một nhóm thường thường được ký hiệu bởi ký hiệu 0. Như chúng ta biết với bất kỳ phần tử p1 nhóm phải bao gồm phần tử nghich đảo p2 của nó Trong đó p1 + p2 = 0 Trong đó ‘+’ là toán tử của nhóm Chúng ta cũng có thể nghĩ rằng p 2 ở phương trình trên được gọi là đối của p1 và ngay cả khi nó định nghĩa bằng –p1 . Chúng ta cũng có thể viết P1 + (– p1) = 0 Hay p1 – p1 = 0 Và p1 – p2 = p1 + (– p2) Trong đó –p2 là phần tử đối của p 2 với toán tử nhóm +. VÒNG – RING Nếu chúng ta có thể định nghĩa hơn 1 toán tử cho nhóm abelian . thì chúng ta có một vòng. Đưa ra các thành phần của tập hợp thỏa mãn một vài tính chất cũng với toán tử mới đó . Một tập hợp là phần tử toán tử định nghĩa cho nhóm abelian . Chúng ta đưa ra toán tử mới như phép nhân , chú ý rằng sử dụng tên ‘multiplication’ cho toán tử mới chỉ là chú ý thích hợp. GVHD_TH.S 20
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Một nhóm chung chung được định nghĩa {R,+, x} trong đó R ký hiệu tập các đối tượng Toán tử ‘+’ là toán tử để R là một nhóm abelian . Và toán tử ‘x’ cần cho R có câu trúc một vòng. TÍNH CHẤT CỦA CÁC PHẦN TỬ VỚI TOÁN TỬ VÒNG R phải đóng với toán tử ‘x’ R phải biểu thị tính kết hợp với toán tử ‘x’ Vòng Giao hoán Một vòng là giao hoán nếu toán tử nhân là giao hoán cho tất cả các thành phần của vòng . Có nghĩa là nếu a và b thuộc R thỏa mãn tính chất Ab = ba; Ví dụ về vòng giao hoán Một tập hợp tất cả các số chẵn , số dương số âm dưới các toán tử toán học + và nhân Một tập hợp tất cả các số nguyên dưới các tính toán cộng và nhân Tập hợp tất cả các số thực dưới các toán tử tính toán cộng , nhân Field - TRƯỜNG Một rường định nghĩa bởi {F,+,x} là một miền tích phân trong đó các thành phần thỏa mãn tính chất sau : Với mỗi thành phần a trong F kể cả thành phần định danh cho toán tử ‘+’ chúng phải tồn tại phép nhân nghịch đảo có nghĩa nếu a thuộc F và a #0 Thì một tại phần tử b thuộc F sao cho ab = ba =1 ; TÍNH TOÁN ĐA THỨC : Một đa thức là một biểu thức có công thức : anxn +
an-1xn-1 + ……+ a1x + a0
trong đó n là số không âm và các hệ số a0 a1 ... an là phần tử từ tập hợp S. S được gọi là tập hệ số Khi an # 0 ta có một đa thức bậc n Một đa thức bậc 0 được gọi là hằng đa thức Tính toán đa thức bao gồm phép cộng phép trừ phép nhân và phép chia của các đa thức TÍNH TOÁN : Cộng hai đa thức : GVHD_TH.S 21
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
f(x) = a2x2 + a1x + a0 g(x) = b1x + b0 f(x) + g(x) = a2x2 + (a1 + b1)x + (a0 + b0) Trừ hai đa thức : f(x) = a2x2 + a1x + a0 g(x) = b3x3 + b0 f(x) – g(x) = – b3x3 + a2x2 + a1x + a0 – b0 Nhân 2 Đa thức : f(x) = a2x2 + a1x + a0 g(x) = b1x + b0 f(x)g(x) = a2 b1x3 + (a2 b0 + a1 b1)x2 + (a1 b0 + a0 b1)x + a0 b0 Phép chia 2 đa thức Giả sử chúng ta muốn chia đa thức 8x2 + 3x + 2 cho đa thức 2x + 1 Số bị chia là 8x2 + 3x + 2 và số chia là 2x +1 . và chúng ta cần tìm thương số Phép chia đa thức bao gồm các bước sau : -
Sắp xếp cả số chia và số bị chia với số mũ giảm dẫn của các biến
-
Chia phần tử đầu của số bị chia cho phần tử đầu của số chia và ghi kết quả như là thành phần đầu của thương số
Trong ví dụ trên phần tử đầu của số bị chia là 8x 2 và phần tử đầu của số chia là 2x. Vì vậy phần tử đầu tiên của thương số là 4x nhân số chia với thương số và sắp xếp bên dưới số bị chia với các biến x có số mũ như nhau thẳng hàng . Thực hiện phép trừ các biểu thức đó với nhau. Trong ví dụ trên 4x lần (2x + 1) là 8x2 + 4x .Lấy số bị chia trừ đi kết quả này ta được –x + 2 -
Coi kết quả của phép trừ trên là số bị chia mới và quay lại bước 1
vì vậy với ví dụ trên ta có (8x2 + 3x + 2) /(2x + 1) = 4x – 0.5 + 2.5 /(2x + 1). TOÁN TỬ TÍNH TOÁN VỚI CÁC HỆ SỐ THUỘC TRƯỜNG HỮU HẠN Chúng ta giả sử tất cả các đa thức có hệ số thuộc trường hữu hạn Z7 (GF(7)) Chúng ta có ví dụ về việc cộng hai đa thức f(x) = 5x2 + 4x + 6 GVHD_TH.S 22
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
g(x) = 5x + 6 f(x) + g(x) = 5x2 + 2x + 5 ví dụ về phép trừ f(x) = 5x2 + 4x + 6 g(x) = 5x + 6 f(x) – g(x) = 5x2 + 6x ví dụ về phép nhân : f(x) = 5x2 + 4x + 6 g(x) = 5x + 6 f(x)g(x) = 4x3 + x2 + 5x + 1 ví dụ về phép chia : f(x) = 5x2 + 4x + 6 g(x) = 5x + 6 f(x) / g(x) = 6x + 6; Nếu chúng ta nhân số chia 2x + 1 với thương số 6x + 6 chúng ta sẽ được số bị chia 5x 2 + 4x + 6 Phép chia đa thức định nghĩa trên trường hữu hạn : Chúng ta nói một đa thức được định nghĩa trên một trường nếu tất cả các hệ số của nó là thành phần của trường . Cũng có thể nói là đa thức qua một trường Phép chia đa thức định nghĩa trên một trường hữu hạn là một quá trình tính toán với các đa thức trên trường đó Ví dụ chúng ta muốn chia đa thức 5x2 + 4x + 6 cho đa thức 2x + 1 Trong phép chia ở trường số thực chúng ta bắt đầu bằng việc chia 5x 2 cho 2x . Việc này yêu cầu chúng ta chia 5 cho 2 trong trường GF(7) . Chia 5 cho 2 giống như việc nhân 5 với phần tử nghịch đảo của 2 .Phần tử nghịch đảo của 2 là 4 vì 2.4 mod 7 = 1 Và chúng ta có 5/2 = 5.2-1 = 5.4 = 20 mod 7 = 6 Vì vậy phần tử đầu tiên của đa thức thương số là 6x . vì kết quả 6x và 2x +1 là 5x2 + 6x .chúng ta cần trừ 5x 2 + 4x + 6 cho 5x2 + 6x , kết quả là (4 - 6)x + 6 . vì phần tử nghịch đảo của 6 là 1 Nên (4 - 6) x tương đương với (4 + 1) x + 6 = 5x + 6 Và tiếp tục coi 5x + 6 là số bị chia với số chia là 2x + 1 ta được GVHD_TH.S 23
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
(5x + 6) / (2x + 1) = 6 Như vậy (5x2 + 4x + 6) /(2x + 1) được thương là 6x + 6 và phần dư là 0 Và chúng ta có thể viết đa thức 5x2 + 4x + 6 trên trường GF(7) là kết quả của phép nhân (2x + 1) * (6x + 6) Đa thức trên trường nhị phân GF(2) là tập hợp {0,1} với 2 thành phần của tập hợp thảo mãn quy tắc cộng và nhân sau 0+0=0
0x0=0
0+1=1
0x1=0
1+0=1
1x0=0
1 + 1 = 0;
1 x 1 = 1;
0–0=0 1–0=1 0–1=0+1=1 1 – 1 = 1 + 1 = 0; Như vậu phép cộng trên trường GF(2) như toán tử luận lý XOR và phép nhân như toán tử luận lý AND Ví dụ của đa thức định nghĩa trên trường GF(2) X3 + x2 -1 -x5 + x4 – x2 + 1 x+1 TOÁN TỬ TÍNH TOÁN VỚI ĐA THỨC TRÊN TRƯỜNG GF(2) Đây là ví dụ về phép cộng 2 đa thức F(x) = x2 + x + 1 G(x) = x + 1 F(x) + G(x) = x2 Ví dụ về trừ hai đa thức F(x) = x2 + x + 1 G(x) = x + 1 GVHD_TH.S 24
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
F(x) – G(x) = x2 Ví dụ về phép nhân 2 đa thức : F(x) = x2 + x + 1 G(x) = x + 1 F(x)G(x) = x3 + 1 Ví dụ về phép chia 2 đa thức : F(x) = x2 + x + 1 G(x) = x + 1 F(x)/G(x) = x + 1/(x + 1) Nêu nhân số chia x + 1 với thương số x chung ta sẽ được x2 vì vậy khi thêm 1 vào sau số bị chia x2 + x + 1 chúng ta sẽ có kết quả trên Khi nào chia đa thức được sử dụng Chia đa thức không cho phép khi các đa thức không phải cùng một trường Ví dụ cho một đa thức định nghĩa trên tập số nguyên tố .Chúng ta không thể chia 4x2 + 5 Cho đa thức 5x .nếu chúng ta thử thì phần tử đầu tiên của thương số mong muôn sẽ là (4/5)x Trong đó hệ số của x không phải là một số nguyên Có thể chia đa thức định nghĩa trên một trường toán tử của phép chia là hợp lệ khi các hệ số là phần tử của của một trường hữu hạn .Chú ý rằng trong trường hợp chia một đa thức với một đa thức khác và kết quả cho ta một số dư F(x) / G(x) = Q(x) + R(x) /G(x) Trong đó Q(x) là thương và R(x) là phần dư Và chúng ta cũng có thể viết hai đa thức bất kỳ qua một trường F(x) = Q(x)G(x) + R(x) với giả thiết bậc của F(x) không nhỏ hơn bậc của G(x) Khi R(x) bằng 0 chúng ta có thể nói rằng G(x) được chia hết bởi F(x) .Trong thực thể có thể biểu diễn bởi câu nói G(x) là ước Của F(x) hay G(x) | F(x) Đa thức không thể rút gọn , đa thức nguyên tố Khi G(x) được chia bởi F(x) không còn lại số dư ta nói G(x) là thừa số của F(x) Một đa thức F(x) tren trường F được gọi là không thể rút gọn nếu F không thể biễu diễn như là kết quả của 2 đa thức cả trường F và bậc nhỏ nhất đều nhỏ hơn f(x) GVHD_TH.S 25
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Một đa thức không thể rút gọn cũng được đưa ra như một đa thức nguyên tố NGHIÊN CỨU TRƯỜNG NHỊ PHÂN GF(2) Sau đây là một ví dụ về đa thức trong trường nhị phân X + 1 ,X2 + x+ 1, X2 + 1 , X3 + 1 , X , 1 , X5, X1000 Chúng ta cũng có thể đưa ra đa thức với các hệ số là số âm . Nhưng trên trường nhị phân GF(2) -1 cũng giống + 1; Nói một cách chính xác số lượng các đa thức như trên là vô hạn Tập hợp các đa thức trong trường nhị phân có công thức của một vòng , gọi là đa thức vòng Tính toán modulo trên đa thức (X2 + x + 1)(x2 + 1) mod(x3 + x + 1) = (x4 + x3 + x2) + (x2 + x + 1) mod (x3 + x + 1) = (x4 + x3 + x + 1) mod (x3 + x + 1) = –x2 – x = x2 + x Chú ý : 1 + 1 = 0 trong trường GF(2) Ví dụ phép chia : (X4 + x3 + x + 1) /(x3 + x + 1) = x + 1 + (-x2 - x)/(x3 + x + 1) Với biểu thức của phép chia bên trái . chúng ta có phần tử đầu tiên của thương số là x Nhân số chia với với x ta được : x4 + x2 + x và khi bị trừ từ số bị chia chúng ta sẽ có x3 – x2 + 1 . Điều đó có nghĩa là phần tử tiếp theo sẽ là 1 với phép nhân modulo x3 + x + 1, chúng ta chi có 8 đa thức trong tập hợp các đa thức trên trường GF(2) 0 ,1 , x , x + 1 , x2 , x2 + 1, x2 + x ,x2 + x + 1 2.7 THUẬT TOÁN XÁC SUẤT SỐ NGUYÊN TỐ
Lịch sử phát triển của việc kiểm tra số nguyên tố Vào thế kỷ 17 định lý nhỏ Fermat cho rằng bất kỳ một số nguyên tố n và một số nguyên a nguyên tố cùng nhau với n thì an-1 = 1 (mod n) .Tuy vậy điều khẳng định ngược lại thì không đúng . năm 1976 Miller sử dụng thuộc tính này để xác định đa thức xác thuật toán kiểm tra số nguyên tố với giả định Extended Riemann Hypothesis GVHD_TH.S 26
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
ERH.Năm 1980 Rabin thay đổi phép thử Miller không thay đổi số lần mũ nhưng tạo một cách ngẫu nhiên Năm 1983Adleman Pomerance và Rumely xây sựng thật toán xác định số nguyên tố với độ phức tạp (log n)O(log log log n) (tất cả các thuật toán xác định trước đây đều có độ phức tạp là hàm mũ). Năm 1986 Goldwasser và Kilian đưa ra thuật toán tạo ngẫu nhiên trên cơ sở đường cong elliptic với độ phức tạp là hàm mũ. Cuôi cùng 8/2002 Agrawal , N Kayal và N.Saxena giả định có thể kiểm tra số nguyên tố trong thời gian là hàm mũ là thuật toán AKS - Thuật Toán Rabin – Miller vấn đề xác định số nguyên tố là vấn đề quan trọng đối với toán học và khoa học máy tính. Công nghệ của thế giới ngày nay cần xác định một số nguyên tố lớn để tạo ra khóa công khai trong hệ thống mã hóa. Bảo mật của khóa công khai là cơ sở phỏng đoán phép nhân 2 số nguyên tố lơn là hàm một phía Việc nhân 2 số nguyên tố lớn để tạo ra một số là việc dễ nhưng điều ngược lại phân tích một số lơn thành tích các số nguyên tố lớn thì điều đó rất khó . Nhiều phép kiểm tra nhanh để xác định nếu một số lớn là nguyên tố với độ chính xác nói riêng một trong những phép kiểm tra đó là thuật toán xác suất nguyên tố RabinMiller 2.7.1 ĐẶC ĐIỂM CỦA RABIN MILLER Thuật toán Rabin Miller được Rabin đưa ra trên ý trường của Miller Thuật toán cung cấp phương thức để xác định số nguyên tố với xác suất lỗi là rất nhỏ nó sẽ được mô tả bên dưới THUẬT TOÁN Chúng ta có (b,n) trong đó n là số cần kiểm tra và b là một số ngẫu nhiên được chọn trong khoảng [1 , n-1] . phân tích : n -1 = 2 q * m. trong đó m là số lẻ .Nếu một trong hai phép thử sau là đúng 1. nếu bm ≡ 1 mod n 2. có 1 số nguyên i trong khoảng [0 q-1] bm * 2^i ≡ −1 mod n thì kết luận là n
có thể (inconclusive) là số nguyên tố còn không thì kết luận n là hợp số
GVHD_TH.S 27
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Rabin Miller là thuật thoán đặc trưng riêng cho hợp số n . Trong phần lớn 1/4 cơ sở b sẽ cho kết quả chưa rõ ràng (inconclusive) có nghĩa là n có thể là một số nguyên tố Thuật toán cho phép một xác suất phép tử số nguyên tố như sau : Nếu n không vượt qua phép thử (kết quả n là hợp số) với bất kỳ một giá trị b [1 , n-1] kết luận n là hợp số Một hợp số có lớn nhất 4k qua tất cả k lần kiểm tra trong đó b được lựa chọn ngẫu nhiên [1, n-1] trong mỗi lần kiểm tra. bởi vậy nếu một số được nghi ngờ là số nguyên tố qua được k lần kiểm tra.Chúng ta sẽ kết thúc với chắc chán tối thiểu 1 – 1/4k rằng n là số nguyên tố điều nói trên không có nghĩa là một số nguyên n được khẳng định là số nguyên tố bằng cách sử dụng 50 số ngẫu nhiên với xác suất tối thiểu là 1 - 1/450 . Giống như một sự giải thích vô nghĩa trong khi n vừa nguyên tố vừa không . nghĩa chính xác là nếu phép thử được thực hiện với m = 450 số nguyên n1, n2, ... nm thì số mong muốn của câu trả lời sai chính là nó(one) 2.7.3 ÁP DỤNG THUẬT TOÁN VỚI SỐ NGUYÊN TỐ Chúng ta sẽ thể hiện thuật toán trên một số mà được xác định là số nguyên tố ví dụ n = 29 . khi đó 28 = 22 * 7 ; chúng ta có q = 2 và m = 7. Để áp dụng thuật toán chúng ta cần lựa chọn ngẫu nhiên một cơ số để kiểm tra b = 10 . do đó 107 ≡ 17 mod 29 kết quả không phải là 1 hay -1 .Chúng ta tiếp tục tính (107)2 ≡ -1 mod 29 kết quả có thể là số nguyên tố. Tiếp tục với cơ số khác b = 19 . 19 17 mod 29 = 12 không phải là 1 hay -1 nên chúng ta tiếp tuc (19 7)2 ≡ -1 mod 29 ,và một lần nữa phép thử cho kết quả có thể là số nguyên tố. Nếu chúng ta thực hiện với tất cả các cơ số từ [1,28] kết quả cho có thể là số nguyên tố(inconclusive) trong mỗi trường hợp . Trong thực tế bất kỳ số nguyên tố p chúng ta biết tất cả các cơ sở của nó trong [1 p-1] cho kết quả là (inconclusive) ÁP DỤNG THUẬT TOÁN VỚI HỢP SỐ Để chứng minh phép thử với các cơ số (b) khác nhau đối với 1 hợp số chúng ta sẽ sử dụng hợp số n = 13 * 17 = 221 . khi đó 220 = 2 2 * 55. chúng ta có được q = 2 và m = 55. Để áp dụng thuật toán này chúng ta cần một cơ sở được lựa chọn ngẫu nhiên , b = 5. Khi đó 555 ≡ mod 221 phù hợp với giá trị 1 hoặc -1 và chúng ta sẽ tiếp tục kiểm tra (555)2 ≡ 168 mod 221 với giá trị -1. Chúng ta đã sử dụng hêt i [0 , q-1] ([0,1]) và phép thử cho kết quả là hợp số. Tuy vậy chuyện gì sảy ra nếu chúng ta không lựa chọn b = 5 ví dụ lựa chọn b = 21. 21 55 ≡ 200 mod 221 không khớp với 1 và -1 và chúng ta tiếp tuc kiểm tra . Chúng ta có (2155)22 ≡ -1 mod 221 và điều này khẳng định rằng nó có thể là GVHD_TH.S 28
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
một số nguyên tố - phép kiểm tra cho kết quả có thể là số nguyên tố đối với 1 hợp số (221). Chúng ta gọi cơ số không chắc chắn xác định hợp số của 221. nó có nghĩa là nếu cơ số b thuộc [1,n-1] cho kết quả có thể là số nguyên tố (inconclusive) cho một hợp số n , thì b là một cơ số không chắc chắn cho việc xét hợp số của n. Trong thực tế 221 có 6 cơ số không chắc chắn là 1 21 47 174 200 220 Chúng ta định nghiã số lượng của số không chắc chắn của một số n là nw(n). Với ví dụ trên nw(221) = 6 số lượng số không chắc chắn của một hợp số Các số không chắc chắn của hợp số có giới hạn rất nhỏ ĐỊNH LÝ 1 : Nếu n >4 là một hợp số , số cơ sở b trong [1,n-1] là chắc chắn hợp số của n tối thiểu là 3(n-1)/4 .Dưới đây là một hệ luận mô tả miền lớn của số cơ sở không chắc chắn hợp số từ định lý 1 HỆ LUẬN 1: Nếu n > 1 là một hợp số thì nó có nhiều nhất (n-1)/4 cơ sở b trong [1,n-1] là không chắc chắn hợp số đối với n. Ex : hợp số 221 = 13*17 trên lý thuyết có tối thiểu 3(220)/4 = 165 cơ sở chắc chắn về tính hợp số của 221.Trong thực tế chúng ta tìm thấy 221 có 214 cơ sở để khẳng định nó là hợp số.Cũng như vậy trên lý thuyết 221 có tối đa 220/4 = 55 cơ sở không chắc chắn nó là hợp số . Trong thực tế chúng ta lại tìm thấy 6 cơ sở như vậy KINH NGHIỆM : Chúng ta có thể xác nhận được rằng hợp số 221 có rất ít cơ sở không chắc chắn. Trong thực tế khi sử dụng thuật toán Rabin Miller với hợp số lớn thì rất hiếm khi như hệ luận trạng thái 1 , chúng ta biết số lượng cơ số không chắc chắn là một miền dù vậy chúng ta muốn xác định chính xác số lượng các cơ số không chắc chắn của một hợp số chúng ta muốn biết nếu chúng ta có thể tạo ra một hợp số mà số lượng cơ số không chắc chắn dễ xác định Có gần đúng 1/4 số cơ số được chứng mình bởi Rabin PHỎNG ĐOÁN SỐ LƯỢNG CƠ SỞ KHÔNG CHẮC CHẮN CỦA N = P*Q Phỏng đoán 1 : n = p * q; | p và q là 2 số nguyên tố khác nhau tính d = gcd(p-1,q-1); sau đó số lượng cơ sở không chắc chắn hợp số của n dược định nghĩa nw như sau : GVHD_TH.S 29
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
r 2 * (2 + (4t - 4)/3) trong đó d = 2t * r; với ra là một số lẻ Example : n = 8321 = 53 * 157 . ta có d = gcd(52,156) = 52 và cũng có 52 = 22 * 13; và phỏng đoán 1 nw(8321) = 132*(2+(42 - 4)/3) = 1014 Phỏng đoán 2 : có n = p * q | p và q là 2 số nguyên tố khác nhau như là p 2r + 1 ; q = 4r +1 với r là một số lẻ thì nw(n) = (n)/4 (n) = (p-1)*(q-1) Example : n = 1891 = 36 * 61 31 = 2*15 + 1; 61 = 4*15 + 1; nw(1891) = 450 và trong thực tế 4*450 = 30 * 60 = 1800 = (1891); sau đây là thuật toán cài đặt thuật toán Rabin Miller bằng ngôn ngữ C++ và Java #include
#include using namespace std; #define bigInt unsigned long long bool test(bigInt n , bigInt m , bigInt q , bigInt b){ for(long i = 0 ; i < q ; i++){ bigInt k = (bigInt)pow(2,i); bigInt t = (bigInt)pow(b,m*k)+1; if(t % n == 0) return true; } return false; } bool isPrime(bigInt n ,bigInt b){ if(n <0 || n % 2 == 0) return false; GVHD_TH.S 30
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
else{ bigInt m = n - 1; bigInt q = 0; while(m % 2 == 0){ q++; m /=2; } if((bigInt)pow(b,m) % n == 1 || test(n,m,q,b)) return true; else return false; } return false; } int main(){ int n; cout<<"\nnhap n :"; cin>>n; int dem =0; for(int i = 0 ; i < n ;i++){ if(isPrime(n,i)) dem++; } cout<<"\ndem: "<
GVHD_TH.S 31
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
package rsa; public class RabinMiller { public static boolean test(long n , long m , long q , long b){ for(int i = 0 ; i < q ; i++){ long k = (long)Math. pow(2, i); long t = (long)Math. pow(b, m*k) +1; if (t % n == 0) return true; } return false; } public static boolean isPrime(long n , long b){ if (n == 2) return true; else if (n <0 || n % 2 == 0) return false; else{ long m = n - 1; long q = 0; while(m % 2 == 0){ q++; m /= 2; } if ((long)Math. pow(b, m) % n == 1 || test (n,m,q,b)) return true; else return false; } } GVHD_TH.S 32
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
public static void main(String []arg){ boolean isprime = RabinMiller.isPrime(83, 13); System.out .print(isprime); } } THUẬT TOÁN MONTE CARLO Định lý Fermat nhỏ : Nếu p là một số nguyên tố X là quan hệ nguyên tố với p (nguyên tố cùng nhau ) x ∈ (1 , p-1] Hay nói cách khác gcd(p,x) = 1 thì x p-1 ≡ 1 (mod p) Chọn 1 số x thuộc (1 , p-1] với gcd(x,p) = 1 và kiểm tra Xt có ≡ ± 1 (mod p ) hay không Thuật toán : Input : 1 số dương p cần kiểm tra Output : Đúng nếu là số nguyên tố Sai nếu p không là số nguyên tố bool monte_carlo(long p){ if( p < 2) return false; else if(p == 2) return true; else if(p > 2 && p % 2 == 0) return false; else for(long i = 2 ; i < p ; i++){ int t = (int) pow(i,(p-1) /2)\ if(t % p === 1 || (t + 1) % p == 0) return true; else GVHD_TH.S 33
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
return false; } } THUẬT TOÁN AKS ASK là thuật toán được phát minh bởi M .Agrawal N kayal và N. Saxena vào tháng 8 năm 2002 . ý tưởng của nó là đặc trừng của một số nguyên tố(hoặc nguyên tố cùng nhau) được xác định chính xác với hàm mũ . Giả sử rằng số a nguyên tố cùng nhau với p thì p là số nguyên tố khi và chỉ khi (x - a) p ≡
(x p – a) (mod p)
Với a,p nguyên tố cùng nhau chúng ta coi 0 < i < p , là hệ số của xi . nếu p là số nguyên tôt thì tất cả các hệ số là 0. nếu p là hợp số : gọi q là một ước của p nếu hệ số của x q mod p khác 0 thì p không phải là số nguyên tố Ví dụ : P = 5 a = 4 gcd(a,b) = 1 (x – a) p = x5 – 20x4 + 160x2 + 1280x – 1024 x p – a = x5 – 4 Sau đây là thuật toán AKS
GVHD_TH.S 34
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Ngoải ra còn rất nhiều thuật toán kiểm tra số nguyên tố như: Lasvegas , Rho , Soloway – Strassen, Lehmann , …. TÍNH TOÁN VỚI SỐ LỚN Các bài toán với mục đích kiểm tra tính đúng đắn của một thuật toán mã hóa, người ta thường sử dụng các số nhỏ bởi đặc tính tính đúng đắn và khả năng thực thi của máy tính tương đôi nhanh. Tuy vậy chúng thường bị thám mã bằng phương pháp vét cạn và trong một hệ thông lớn thì điều này là không chấp nhận được.Vì vậy vấn đề sử lý số lớn được đưa ra và là một vấn đề không thể thiếu trong mã hóa.Với các số lớn thì việc tính toán thông thường không thể cải thiện tốc độ thực thi của máy tính và chúng ta phải đặt câu hỏi : điểu gì sẽ sảy ra khi một thuật toán mã hóa mất 1h đồng hồ để đưa ra kết quả.Chúng ta sẽ đi vào tìm hiểu việc xử lý các số lớn trên cơ sở là phân tích về dạng nhị phân. Phép biểu diễn nhị phân: Cho a ∈ N* : a = an2n + an-12n – 1 + …….. + a12 + a0 a ∈ {0,1} , an = 1; GVHD_TH.S 35
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Thuật toán : Input : a ∈ N* Output :
a = an an-1 …..a1a0 q,r : a = qb + r r ∈ [0,2)
Bước 1 : n = floor(log(a) / log (2) ) Bước 2 : for i := n downto 1 do k = 2i ; if( k <= a and 2k > a) then ai :=1 else ai = 0; if(a >= k) then a –= k; Bước 3 : a0 = a ; r = a0 ; Bước 4 : Return (anan-1……a0,q,r); Ví Dụ : biểu điễn 910 x2 Ta có n = log(9) / log(2) = 3.17
n = 3;
For i = 3 downto 1
• i=3,a=9 k = 23 = 8 k <= a và 2k >a được thỏa mãn => ai = a3 = 1; a >= k thỏa mã => a = a – k = 9 – 8 = 1;
• i =2 ,a = 1 k = 22 = 4; k <= a và 2k > a không thỏa mã => ai = a2 = 0; a >=k không thỏa => giá trị a được giữ nguyên a = 1; • i = 1, a = 1 k = 21 = 2 GVHD_TH.S 36
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
k <= a và 2k > a không thỏa mãn => ai = a1 = 0 a >= k không thỏa => a được giữ nguyên giá trị a = 1; end for a0 = a = 1; r = a0 q = 1.23 + 0.22 + 0.21 = 8 vậy x = 1001 Phép cộng hai số nguyên: Input : x = xn………..x1x0 , y = yn ………….y1y0 với xn………x1x0 và yn……..y1y0 là biểu diễn nhị phân của x và y Output : x + y = wn…………….w1w0 Bước 1 : c = 0; Bước 2 : for i :=0 to n do Temp := xi + yi + c ; Wi = temp / 2; if(temp < 2) then c := 0 else c:= 1; end for Bước 3 : wn + 1 = c; Bước 4 : return wn+1…………w1w0 Ví dụ : Phép cộng 9 + 3 = 12 Với biểu diễn nhị phân của 9 , 3 và 12 tương ứng là 1001 0011 1100
• c=0 temp = 1 + 1+ c = 2 wi = 2 % 2 = 0; temp < 2 không thỏa mãn vậy giá trị c mới = 1
• c=1 temp = 0 + 1 + 1 = 2; wi = 2 % 2 = 0; temp < 2 không thỏa mãn GVHD_TH.S 37
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
vậy c = 1;
• c=1 temp = 0 + 0 + 1 = 1 wi = 1 % 2 = 1; temp < 2 thỏa mãn vậy c = 0 • c=0 temp = 1 + 0 + 0 = 1; wi = 1 % 2 = 1; temp < 2 thoải mãn vậy c = 0 vậy w = wn…..w1w0 = 1100 = 122 Phép trừ hai số nguyên : Input : x = xn………..x1x0 , y = yn ………….y1y0 với xn………x1x0 và yn……..y1y0 là biểu diễn nhị phân của x và y Output : x – y = wn…………….w1w0 Bước 1 : c = 0; Bước 2 : for i = n downto 0 do temp = xi – yi + c; wi = abs(temp) % 2; if(temp <= –1) then c:= -1 else c := 0; end for Bước 3 : Return w; Phép cộng và trừ mod Nếu x và y ∈ Zm ta có : (x + y) mod m = x + y nếu x + y < m (x + y) mod m = x + y – m nếu x + y >= m GVHD_TH.S 38
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
(x – y) mod m = x + m – y nếu x < y (x – y ) mod m = x – y nếu x >= y Nhờ vậy chúng ta có thể thực hiện các phép cộng và trừ mod một cách dễ dàng nhờ các thuật toán cộng trừ số nguyên lớn. Phép nhân mod: khi x , y và m là các số nguyên lón 0 <= x, y
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
if(pi = 1) then y := Ay mod m; Bước 4 : return y; Sau đây là code java của các thuật toán trên: package numbers; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Vector; public class LargeNumber { /* CHUYỂN MỘT SỐ NGUYÊN LỚN SANG HỆ NHỊ PHÂN * a : SỐ CẦN CHUYỂN */ public static ArrayList decimalToBinary(long a){ ArrayList list = new ArrayList (); int n = (int) (Math.log (a) / Math.log (2)); for(int i = n ; i >=1 ; i--){ int k = (int) Math. pow(2, i); if (k <= a && 2*k > a) list.add(1); else list.add(0); if (a >= k) a -= k; } int a0 = (int) a; list.add(a0); GVHD_TH.S 40
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
int r = a0; int q = 0; ArrayList reverse = (ArrayList) list.clone(); for(int i = 0 ; i < reverse.size() ; i++) reverse.set(i, list.get(list.size() - 1 - i)); return reverse; } // ĐẢO NGƯỢC CHUỖI NHỊ PHÂN public static ArrayList binaryReverse(ArrayList list){ ArrayList temp = (ArrayList) list.clone(); for(int i = 0 ; i < list.size() ; i++) temp.set(i, list.get(list.size() - 1 - i)); return temp; } //
CHUYỂN MỘT SỐ HỆ NHỊ PHÂN SANG SỐ NGUYÊN LỚN
public static long binayToDecimal(ArrayList list){ long so = 0L; for(int i = 0 ; i < list.size() ; i++) so += list.get(i) * Math. pow(2,list.size() - i - 1); return so; } /* LẤP ĐẦY BỞI CÁC SỐ 0 * result : CHUỖI NHỊ PHÂN * numberOfZero : SỐ LƯỢNG SỐ 0 CẦN THÊM VÀO */ public static ArrayList fillZeroAtFirst(ArrayList result, int numberOfZero){ for(int i = 0 ; i < numberOfZero ; i++) result.add(0, 0); GVHD_TH.S 41
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
return result; } /* ADDITION - PHÉP CỘNG 2 SỐ NGUYÊN LỚN a VÀ b * a : SỐ THỨ NHẤT * b : SỐ THỨ HAI */ public static ArrayList addition(long a, long b){ ArrayList list = new ArrayList (); ArrayList aList = LargeNumber.decimalToBinary(a); ArrayList bList = LargeNumber.decimalToBinary(b); int size = Math.max(aList.size(), bList.size()); if (size > bList.size()) bList = LargeNumber. fillZeroAtFirst (bList,size - bList.size()); else aList = LargeNumber. fillZeroAtFirst (aList, size - aList.size()); int c = 0; for(int i = size - 1 ; i >=0 ; i--){ int temp = aList.get(i) + bList.get(i) + c; list.add(temp % 2); if (temp < 2) c = 0; else c = 1; } list.add(c); //
ĐẢO NGƯỢC CÁC PHẦN TỬ TRONG DANH SÁCH
ArrayList exe = LargeNumber.binaryReverse(list); GVHD_TH.S 42
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
//
XÓA HẾT PHẦN TỬ 0 Ở ĐẦU DANH SÁCH
while(exe.get(0) == 0) exe.remove(0); //
GIẢI PHÓNG BỘ NHỚ
aList = null; bList = null; list = null; return exe; } /* *
SUBTRACTION - PHÉP TRỪ HAI SỐ NGUYÊN LỚN a VÀ b
* a : SỐ BỊ TRỪ * b : SỐ TRỪ */ public static ArrayList subtraction(long a, long b){ ArrayList list = new ArrayList (); ArrayList aList = LargeNumber.decimalToBinary(a); ArrayList bList = LargeNumber.decimalToBinary(b); int size = Math.max(aList.size(), bList.size()); if (size > bList.size()) bList = LargeNumber. fillZeroAtFirst (bList,size - bList.size()); else aList = LargeNumber. fillZeroAtFirst (aList, size - aList.size()) int c = 0; for(int i = size - 1 ; i >=0 ; i--){ int tmp = aList.get(i) - bList.get(i) + c; list.add(Math.abs(tmp) % 2); GVHD_TH.S 43
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
if (tmp <= -1) c = -1; else c = 0; } ArrayList exe = LargeNumber.binaryReverse(list); //
XÓA HẾT CÁC PHẦN TỬ 0 Ở ĐẦU DANH SÁCH
while(exe.get(0) == 0) exe.remove(0); // PHÓNG BỘ NHỚ
CẮT ĐỨT QUYỀN ĐIỀU KHIỂN ĐỐI TƯỢNG - GIẢI
aList = null; bList = null; list = null; return exe; } /*
IN RA MỘT CHUỖI NHỊ PHÂN
* result : CHUỖI NHỊ PHÂN CẦN IN RA */ public static void print(ArrayList result){ System.out .println(); int size = result.size(); for(int i = 0 ; i < result.size() ; i++){ System.out .print(result.get(i)); } } //
MODULUS ADDITION - PHÉP CỘNG MOD
public static long modulusAddition(long a, long b, long m){ long c = LargeNumber.binayToDecimal (LargeNumber.addition(a, b)); GVHD_TH.S 44
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
if (c < m) return c; else return LargeNumber.binayToDecimal (LargeNumber. subtraction(c, m)); } //
MODULUS SUBTRACTION - PHÉP TRỪ MOD
public static ArrayList modulusSubtraction(long a, long b, long m){ if (a >= b) return LargeNumber. subtraction(a, b); else return LargeNumber. subtraction(LargeNumber.binayToDecimal (LargeNumber.addition (a, m)), b); } //
MODULUS MULTIPLICATION - PHÉP NHÂN MOD ab mod m
public static long multiplicationModulus(long a, long b, long m){ long p = 0; long z = 0; ArrayList bList = LargeNumber.decimalToBinary(b); bList = LargeNumber.binaryReverse(bList); if (bList.get(0) == 1) p = a; else p = 0; for(int i = 1 ; i < bList.size() ; i++){ a = 2 * a % m; z = bList.get(i) * a % m ; p = LargeNumber.modulusAddition(z, p, m); } GVHD_TH.S 45
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
return p; } //
PHƯƠNG THỨC MAIN
public static void main(String []args){ LargeNumber. print (LargeNumber. subtraction(11, 7)); //
ArrayList chin = LargeNumber.decimalToBinary(19);
//
LargeNumber.print(chin);
//
System.out.println();
//
LargeNumber.print(LargeNumber.binaryReverse(chin));
//
ArrayList muoiHai = LargeNumber.decimalToBinary(12);
//
ArrayList haiMot = LargeNumber.decimalToBinary(21);
//
ArrayList tong = LargeNumber.addition(9, 12);
//
ArrayList hieu = LargeNumber.subtraction(21,12);
//
LargeNumber.print(chin);
//
System.out.print(" -> 9");
//
LargeNumber.print(muoiHai);
//
System.out.print(" -> 12");
//
LargeNumber.print(haiMot);
//
System.out.print(" -> 21" );
//
LargeNumber.print(tong);
//
System.out.print(" -> 9 + 12" );
//
LargeNumber.print(hieu);
//
System.out.print(" -> 21 - 12"); }
} Chươ ng 3: HỆ MẬT RSA 3.1 GIỚI THIỆU
RSA là tên viết tắt của 3 tác giả Rivest, Sharmir , Adleman của trường MIT . RSA được đề xuất vào năm 1977 dựa trên cơ sở tính các lũy thừa trong số học . GVHD_TH.S 46
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Độ an toàn của hệ mật RSA dựa trên độ khó của việc phân tích thành thừa số nguyên tố của các số nguyên tố lớn.Nhiều hệ mật khóa công khai sau này đã được phát triển nhưng đều thua kém hệ RSA . Các hệ balo cửa sập đã bị phá vỡ và cho đến nay ngoài hệ RSA chưa có một hệ nào khác cung cấp độ an toàn và chữ ký số Hệ RSA gồm các thành phần n: modulo ϕ (n) : hàm phi ơ le của n
cho
tính
toán
modular
e một số nguyên có quan hệ nguyên tố với ϕ (n). d một số nguyên là phần tử nghịch đảo của e modulo ϕ (n). Bây giờ giả sử chúng ta gởi mỗi số nguyên M với M < n . nó được tượng trưng cho một thông điệp nào đó sau đó chúng ta có thể thay thế M bằng bản mã C được cho bởi công thức. C = Me mod n Chúng ta cũng có thể tìm M bằng công thức M = Cd mod n Ý tưởng trên có thể được dùng để tạo ra một kênh giao tiếp bí mật Một người A muốn nhận một thông điệp bí mật sẽ sử dụng một cặp sô nguyên {e,n} là khóa công khai của anh ấy . tại một thời điểm anh anh ấy có thể sử dụng cặp khóa {d,n} như là khóa bí mật . với định nghĩa của n,e,d được đưa ra ở phần trên Một người B muốn gởi một thông điệp M tới A một cách bi mật sẽ mã hóa M sử dụng khóa công khai của A {e,n} để tạo ra bản mã C . Chỉ A sẽ có thể giải mã C sử dụng khóa bí mật của anh ấy {d,n} câu hỏi quan trọng ở đây là điều kiện nào để thỏa mãn modulon M C M hoạt động. 3.2 LỰA CHỌN MODULO
Với định nghĩa d và e được đưa ra ở trên modulo n phải được lựa chọn sao cho đảm bảo :(Me)d = Med = M (mod n) Chúng ta phải có như vậy bởi vì C = Me mod n là công thức mã hóa cho thông điệp M và giải mã bằng Cd mod n. Nó được đưa ra bởi Rivest Shamir và Adlemant rằng chugns ta phải có thỏa mãn n có thể phân tích thành tích của 2 thừa số nguyên tố p và q. Tức là n = p * q với p và q là hai số nguyên tố. Phân tích ra thừa số nguyên tố sẽ giúp ích cho việc chứng minh thuật toán dựa vào lý thuyết nguyên tố và nguyên tố cùng nhau được cho bởi : GVHD_TH.S 47
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Nếu 2 số nguyên tố p và q nguyên tố cùng nhau (có nghĩa là chúng có quan hệ nguyên tố với nhau ) thì A = b (mod p) và a = b (mod q) thì a = b (mod pq) Sự tương đương dưới đây là đúng A = b mod p ha a – b = k 1 p với k 1 là một số nguyên Nhưng chúng ta cũng có a = b mod q dẫn đến a – b = k 2q Nó cũng đúng trong trường hợp k 1 = k 3 * q. bởi vậy chúng ta có thể viết a – b = k3 * p * q điều đó là tương đương . Thêm vào việc yêu cầu p và q là số nguyên tố chúng ta cần có chúng là các số khác nhau bởi vì chỉ khi p và q là các số nguyên tố khác nhau thì chúng ta có thể phân tích ϕ (n) thành các hàm ϕ (p) và ϕ (q)
ϕ (n) = ϕ (p) ϕ (q) = (p – 1 )(q - 1) (3) Vì vậy khó có thể bẻ khóa bằng phương pháp vét cạn số nguyên tố khi p và q là các số nguyên tố lớn bởi việc tìm thừa số nguyên tố lớn thì khó hơn rất nhiều với việc xác định nó có phải là số nguyên tố hay không . Chúng ta cũng cần chọn lựa sao cho n không phải là các số nhạy cảm trong mã hóa bởi điều đó có thể khiến hệ thống của bạn không an toàn 3.3 CHỨNG MINH RSA
Chúng ta cần chứng minh rằng khi n được tạo ra bởi 2 số nguyên tố p và q thì tính toán trên modulo n , chúng ta luôn có Med = M mod n Trong đó d là phần tử nghịch đảo của e trên modulo ϕ (n) Bởi vì d là phần tử nghịch đảo của e trên modulo ϕ (n) nên ta có ed = 1 mod n Điều đó có nghĩa rằng tồn tại một số nguyên k mà ed – 1 = 0 (mod ϕ (n) ) = k * ϕ (n) Rõ ràng trường hợp này ed -1 chia hết cho ϕ (n) nhưng vì ϕ (n) = ϕ (p) * ϕ (q) Nên ed -1 cũng chia hết cho ϕ (p) và ϕ (q) Hay ta có thể viết : ϕ (p) | ed -1 và ϕ (q) | ed – 1 Vì ed -1 chia hêt cho ϕ (p) nên chúng ta có thể viết ed - 1 = k 1 * ϕ (p) = k 1 (p -1) GVHD_TH.S 48
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Với k 1 là một số nguyên Vì vậy chúng ta có : Med (mod p) = M (ed - 1 + 1) (mod p) = Mk 1(p - 1) * M (mod p) (*) Và bây giờ có 2 khả năng chúng ta cần chú ý đến Vì p là số nguyên tố nên có hai trường hợp sảy ra Hoặc M và p nguyên tố cùng nhau hoặc M là bội của p Đầu tiên chúng ta coi M và p nguyên tố cùng nhau Theo định lý Fermat nhỏ ta có nếu p là số nguyên tố thì M(p - 1) = 1 (mod p)
Mk 1(p - 1)= 1 mod p
Vậy * tương đương với Med mod p = M (mod p) Bây giờ giả sử M là bội của p dẫn tới M (mod p) = 0
Mk mod p = 0
Vì vậy phương trình vẫn tiếp tục đúng trong trường hợp này Tương tự như vậy ta cũng có M ed mod q = M mod q Vì p và q có quan hệ nguyên tố nên Với bất kỳ số nguyên a b sao cho a = b mod p và a = b mod q thì a = b (mod pq) Bởi vậy Med (mod n) = M (mod n) 3.4 CÁC BƯỚC TẠO KHÓA RSA
1. tạo 2 số nguyên tố khác nhau p và q
2. tính toán n = p * q 3. tính PhiN = (p-1) * (q -1) 4. lựa chọn mũ công khai e sao cho 1 < e < (n) 5. tính mũ bí mật d với d = e-1 (mod (n))
6. Khóa công khai (e,n) GVHD_TH.S 49
ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
7. kh khóa óa bí mật mật (d,n (d,n)) LỰA CHỌN SỐ NGUYÊN TỐ P VÀ Q Đầu tiên bạn quyết quyết định dựa vào kích thước thước số nguyên modulo modulo n và nói rằng bạn phải thực thực hiện thuật toán toán RSA yêu cầu cầu một modulus modulus có kích kích thước B bits Tạo số nguyên tố p: Sử dụng tạo ngẫu nhiên một số , chúng ta sẽ tạo ra một số có kích thước B/2 bits Chắc chắn rằng số nguyên đó là số lẻ. Sử dụng thuật toán Rabin Miller kiểm tra kết quả số nguyên tố của số vừa chọn , nếu nó không phải số nguyên tố thì tăng lên 2 đơn vị và kiểm tra lại . Nếu đúng nó sẽ là giá trị của p .Tương tự làm như vậy với q .Trong trường hợp p = q thì thực hiện việc tạo ngẫu nhiên số nguyên tố q tới khi p # q Để bảo mật hơn thay vì tăng 2 đơn vị sau khi kiểm tra không phải là số nguyên tố dựa vào thuật toán RabinMiller RabinMiller chúng ta hãy tạo ra một số ngẫu nhiên mới 1. THUẬ THUẬT T TOÁ TOÁN N TẠO TẠO KH KHÓA ÓA Bước 1 : Bob (người nhận) tao 2 số nguyên tố lớn ngẫu nhiên p và q , với p # q; Bước 2 : Bob tính n = p * q; và ϕ (n) = (p - 1) (q - 1) Bước 3 : Bob chọn một số e ngẫu nhiên thỏa mãn e thuộc (0 ϕ (n)) sao cho GCD(e, ϕ (n)) = 1 . hay nói cách khác e và ϕ (n) nguyên tố cùng nhau Bước 4 : tính d = e-1 . trong đó d là phần tử nghịch đảo của e trên modulus ϕ (n) Bước 5 : công bố (n,e) là public key , d là private key 2. THUẬT THUẬT TOÁN TOÁN MÃ MÃ HÓA HÓA GIẢI GIẢI MÃ: MÃ:
• MÃ HÓA HÓA Bước 1 : Alice (người gởi) nhận khóa công khai của B Bước 2 : Alice biểu diễn thong tin cần gởi thành số M ∈ (0 , n-1) Bước 3 : tính C = Me (mod n) Bước 4 : Alice gởi C cho B
• GIẢI MÃ Bước 1 : B giải mã bằng cách tính M = Cd (mod n) Ví dụ cho 2 số nguyên tố GVHD_TH.S 50
ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
P = 47 Q = 103 Ta có N = 47 * 103 = 4841
ϕ (N) = 46 * 102 = 4692 Chọn e = 11 phần tử nghịch dảo của e trên ϕ (n) là d = 3839 Giả sử muốn mã mã hóa thông điệp M = 26 Ta tính C = Me (mod n) = 2611 (mod 4841) = 4321 Giải mã M = Cd (mod n) = 43213839 (mod 4841) = 26
Chươ ng 4: HỆ MẬT ECC 4.1 ĐỊNH NGHĨA
Hệ mật đường cong elliptic (Elliptic Curve Cryptography ) được đưa ra bởi Victor Miller và Neal Kobit vào giữa những năm 1980. Đường cong elliptic không phải là một đường ellipse Chúng ta đã được biết đến đường tròn với phương trình (x - a)2 + (y - b)2 = r 2 Trong đó a,b và r là các số thực . Một đường cong elliptic cũng được định nghĩa bởi một phương trình trình nhưng nhưng phức tạp hơn . GVHD_TH.S 51
ĐẠI HỌC CÔNG NGHIỆP HÀ HÀ NỘI - CÔNG NGHỆ THÔNG THÔNG TIN
Một đường cong elliptic E trên trường K được định nghĩa bởi phương trình E : y2 + a1xy + a3y = x3 + a2x2 + a4x + a6 (1) Trong đó các hệ số a1, a2, a4, a6 ∈ K
∆ # 0 trong đó ∆ là biệt thức của E và được định nghĩa như sau ∆ = -d22d8 - 8d43 - 27d62 + 9d2d4d6 d2 = a12 - 4a2 d4 = 2a4 + a1a3 d6 = a32 + 4a6 d8 = a12 a6 + 4a2a6 - a1a3a4 - a2a32 - a42 Nếu L là một trường mở rộng của của K thì tập hợp hữu hạn điểm điểm của E trên L là E(L) = {(x,y) ∈ L x L : y2 + a1xy + a3y - x3 - a2x2 - a4x - a6 = 0 } ∪ {∞} Trong đó ∞ là điểm vô cùng
• Phương trình 1 được gọi là phương trình Weierstrass • Chúng ta nói nói E được định nghĩa trên trên trường K bởi vì vì các hệ số a1, a 2, a 4, a 6 đều
thuộc trường K . trong một vài trường hợp chúng ta có thể viết E/K để nhấn mạnh rằng Elliptic E được định nghĩa trên trường K . và K là trường dưới (underlying field) Và chú ý rằng E được định nghĩa trên trường K thì E cũng được định nghĩa trên bất kỳ trường mở rộng nào của K • Điều kiện ∆ # 0 đường cong elliptic là trơn có nghĩa là không tồn tại một điểm
thuộc đường cong elliptic mà có thể vẽ được nhiều tiếp tuyến khác nhau
• Điểm Điểm tại vô cực cực chỉ chỉ là điểm điểm trên trên đường đường tại vô cực cực thỏa thỏa mãn phương phương trình trình Weierstrass • Tập Tập các điểm điểm L hữu hạn hạn trên E là tất cả các điểm điểm có tọa độ (x,y) (x,y) thỏa mãn mãn phương trình trình đường cong trong trong đó tọa độ x,y của L . điểm tại vô cùng cũng được cọi là điểm hữu tỷ tỷ cho tất cả các trường mở rộng L của K Chúng ta sẽ tập chung nghiên cứu hai dạng đường cong elliptic chính phục vụ cho mã hóa đó là đường cong trên trường hữu hạn gồm elliptic trên trường số nguyên tố và elliptic trên trường nhị phân. y2 + [xy] = x3 + ax2 + b Trong đó x,y là các biến và a,b là các hằng số . Tuy vậy chúng không nhất thiết phải là số thực , thay vào đó chúng có thể là giá trị của một trường nào đó. GVHD_TH.S 52
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Với mã hóa chúng ta luôn sử dụng trường hữu hạn có nghĩa rằng a,b,x,y được chọn từ tập hữu hạn các giá trị khác nhau Cho Elliptic E trên trường GF(p) GF(p = 2 m) . gọi N là số điểm trên đường cong ta có N ∈[ p + 1 - 2 √ p ; p + 1 + 2 √ p] BẬC CỦA ĐƯỜNG CONG ELLIPTIC Một tính chất quan trọng của đường cong elliptic là chúng ta có thể định nghĩa một quy tắc cho việc cộng 2 điểm trên đường cong . và cộng 3 điểm cũng thuộc đường cong Quy tắc cộng thỏa mãn thuộc tính chung của phép cộng với tính toán phức tạp , điểm và quy tắc cộng có công thức của một nhóm Abelian. Quy tắc cộng áp dụng cho hai điểm bất kỳ thuộc đường cong elliptic ngoại trừ điểm O vì nó không thỏa mãn phương trình của elliptic (điểm tại vô cùng). Bậc của đường cong là số lượng điểm khác nhau trên đường cong bao gồm cả điểm O Khi có định nghĩa về phép cộng chúng ta cũng có định nghĩa về phép nhân kP trong đó k là một số nguyên dương và P là một điểm trên trường cong elliptic kP giống như việc cộng k điểm P với nhau . kP = P + P + P + … + P (k lần) từ việc có được 2P = P + P 3P = P + P + P BẬC CỦA ĐIỂM Cho Elliptic y2 + [xy] = x3 + ax2 + b trên trường Hữu hạn GF(p) với p là số nguyên tố Người ta ký hiệu E(F p) hay E/P Gọi Q là một điểm trên đường cong elliptic và n là một số nguyên dương n được gọi là bậc của điểm Q nếu nQ = O trong đó O là điểm tại vô cực 4.2 MÔ TẢ HÌNH HỌC CỦA PHÉP CỘNG
Với mục đích tìm hiểu về hệ mật ECC chúng ta chỉ xét các đường cong có dạng y2 = x3 + ax + b (*) Trong đó x,y,a,b là các số thực Tập hợp các điểm (x,y) thỏa mãn phương trình (*)và điểm tại vô cực O là các điểm trên đường cong. Các đường cong này luôn đối xứng qua trục hoành Bởi * tương đương với y1 = sqrt(x3 + ax + b) và y2 = -sqrt(x3 + ax + b) GVHD_TH.S 53
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Quy tắc cộng (Point Addition Law) Cho P và Q là hai điểm khác nhau thuộc đường cong Elliptic P+Q: Từ P vẽ đường thẳng qua Q cắt Elliptic tại R’ khác P và Q Tiếp đó lấy điểm R đỗi xứng với R’ qua trục hoành . Điểm R là tổng của P+Q
GVHD_TH.S 54
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
2P : Từ P ta vẽ tiếp tuyến với Elliptic cắt Elliptic tại 1 điểm khác P . điểm đó chính là 2P
4.4 ELLIPTIC TRÊN TRƯỜNG HỮU HẠN NGUYÊN TỐ 4.4.1 ĐỊNH NGHĨA
Cho p là một số nguyên tố F p định nghĩa trường các số nguyên trên modulus p Elliptic E trên trường hữu hạn F p được định nghĩa bởi phương trình y2 = x3 + ax + b; (1) trong đó a,b ∈ F p thỏa mãn 4a3 + 27b2 # 0 một cặp (x,y) trong đó x,y ∈ F p là một điểm trên đường cong elliptic E nếu tọa độ (x,y) thỏa mãn phương trình 1. Điểm tại vô cực được ký hiệu ∞ nó cũng được coi thuộc đường cong Tập hợp tất cả những điểm trên E ký hiệu là E(Fp). GVHD_TH.S 55
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Ví dụ : nếu E là một đường cong elliptic trên trường F 7 với phương trình y2 = x3 + 2x + 4 (mod 7) khi ấy các điểm thuộc đường cong E kà E(F7) = {∞ , (0,2) ,(0,5),(1,0),(2,3),(2,4),(3,3),(3,4),(6,1),(6,6)} 4.4.2 QUY TẮC CỘNG Cho Elliptic E có phương trình y 2 = x3 + ax + b trên trường p với điều kiện 4a3 + 27b2 (mod p)# 0 Cho điểm P(x p, y p) và Q(xq, yq) là hai điểm khác nhau thuộc elliptic ( y p # yq và y p # -yq (mod p) )
• P+O=P • P+Q Ta có P + Q = R(xr , yr ) trong đó : L = (y p - yq) / (x p - xq) (mod p) Xr = L2 – x p – xq (mod p) Yr = -y p + L(x p - xr ) (mod p)
• 2P Ta có 2P = R(xr , yr ) trong đó : L = (3x p2 + a)/2y p (mod p) Xr = L2 – 2x p(mod p) Yr = -y p + L(x p - xr ) (mod p) Ví dụ với p = 23 a = 17 b = 4 ta có tập E23(17,4) có phương trình : y2 (mod 23) = x3 + 17x + 4 (mod 23) với các điểm thuộc elliptic (0 , 1) (0 , 21)
(2, 0)
(3, 6)
(9 , 9)
(16,18)
(9, 14)
(17, 10)
(10 , 1)
(17, 13)
(10 , 22)
(18,1)
GVHD_TH.S 56
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
(3, 17)
(6, 0)
(7,11)
(7,12)
(8 , 10) (8 , 13)
(11, 2)
(18,22)
(11, 21)
(20,8)
(12,2)
(20,15)
(12,21)
(21,10)
(15,0)
(21,13)
(16,5)
(22 ,3)
∝
(22,20)
GVHD_TH.S 57
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Biểu diễn của tập E23(17,4) Ví dụ về phép cộng : Cho P(3,6 ) và Q(16,18) 2P L = (3x p2 + a)/2y p (mod p) = 44 * 12-1 (mod 23) = 21 * 2 (mod 23) = 19 Xr = L2 – 2x p(mod p) = 361 – 6 (mod 23) = 10 Yr = -y p + L(x p - xr ) (mod p) = -6 + 19 *(3 - 10) (mod 23) = 17 + 19 * 16 (mod 23) GVHD_TH.S 58
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
= 17 + 5 (mod 23) = 22
2P = R(10 , 22)
-P+Q: Ta có L = L = (y p - yq) / (x p - xq) (mod p) = L = (y p - yq) * (x p - xq)-1 (mod p)
L = (6 - 18) *(3 - 16)-1 (mod 23)
= -12 * (-13)-1 (mod 23) = 11 * 10-1 (mod23) = 11 * 7 (mod 23) =8 Xr = L2 – x p – xq (mod p) = 64 – 3 – 16 (mod 23) = 22 Yr = -y p + L(x p - xr ) (mod p) = -6 + 8 * (3 - 22) (mod 23) = 17 + 8 * (4 mod 23) = 17 + 9 (mod 23) =3
P + Q = R(22,3)
ELLIPTIC TRÊN TRƯỜNG NHỊ PHÂN GF(2 m) Phương trình của elliptic trên trường nhị phân có dạng y2 +xy = x3 + ax2 + b với điều kiện b # 0. ký hiệu E2m(a,b) gồm tất cả những cặp (x,y) thỏa mãn phương trình trên và điểm vô cùng O. Cho P (x p,y p) và Q(xq,yq) là hai điểm khác nhau trên đường cong elliptic và Q không phải là điểm đối xứng của P (Q # P’(x p, x p + y) ) Ta có P + Q = R(xr , yr ) trong đó : L = (yq + y p) /(x p + xq) Xr = L2 + L + x p + xq + a GVHD_TH.S 59
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Yr = L(x p + xr ) + xr + y p + a 2P: 2P = R(xr , yr ) trong đó L = x p + y p / x p Xr = L2 + L + a Yr = x p2 + (L + 1)xr Chúng ta có thể sử dụng GF(24) với đa thức bất khả quy x 4 + x + 1 . phần tử sinh của GF(24) là g thỏa mãn f(g) = 0 ; g4 = g + 1 hay ở dạng nhị phân là 0010 chúng ta có bảng lũy thừa sau :
g0 = 0001
g4 = 0011
g8 = 0101
g12 = 1111
g1 = 0010
g5 = 0110
g9 = 1010
g13 = 1101
g2 = 0100
g6 = 1100
g10= 0111
g14= 1001
g3 = 1000
g7 = 1011
g11 = 1110
g15 = 0001
Ví dụ g5 = g4g = (g + 1) g = g2 + g = 0100 + 0010 = 0110 Xét đương cong elliptic y2 + xy = x3 + g4x2 + 1 trong đó a = g4 b = g0 = 1 Một điểm lằm trên đường cong là (g5,g3) g3 * g3 + g5 * g3 = g5 * g5 * g5 + g4 * g5 * g5 + 1
g6 + g8 = g15 + g14 + 1
1100 + 0101 = 0001 + 1001 + 0001
1001 = 1001 (Đúng)
Ta có các điểm trên E24(g4,1) (0,1)
(g5,g13)
(g9,g13)
(1,g6)
(g5,g11)
(g10,g)
(1,g13)
(g6,g8)
(g10,g8)
GVHD_TH.S 60
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
(g3, g18)
(g6,g14)
(g12,0)
(g3, g13)
(g9,g10)
(g12,g12)
Với biểu diễn tương đương
PHƯƠNG PHÁP TRAI ĐỔI KHÓA DIFF - HELLMAN Gọi E là đường cong Elliptic trên trường hữu hạn F p. Gọi P là một điểm trên đường cong .E(F p) có bậc nguyên tố n thì nhóm con tuần hoàn của E(F p) tạo bởi P là E ={∞, P, 2P, 3P, 4P, 5P (n-1)P} G là một điểm trên đường cong elliptic trong đó nó có bậc n
• Quá trình tạo khóa của Alice : Lựa chọn một số bí mật nA Tính toán khóa công khai P A • Quá trình tạo khóa của Bob : Lựa chọn một số bí mật nB GVHD_TH.S 61
với nA < n PA = nA * G với nB < n
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Tính toán khóa công khai P B
PB = nB * G
• Tính toán khóa bí mật của Alice K = nA * PB • Tính toán khóa bí mật của Bob K = nB * PA THUẬT TOÁN TẠO KHÓA ĐƯỜNG CONG ELLIPTIC INPUT :
miền tham số (p , E, G, n)
OUTPUT :
khóa công khai PA và khóa bí mật nA
Bước 1 : lựa chọn d ∈
[1 n-1] Trong đó nG = O với O là điểm vô cùng
Bước 2 : tính PA = nA * G Bước 2 : Return (PA, nA) // B cũng làm tương tự
LƯỢC ĐỒ MÃ HÓA Một bản rõ m được tượng trưng bởi một điểm M và sau đó mã hóa bởi việc them vào kQ trong đó k là một số nguyên lựa chọn ngẫu nhiên và Q là khóa công khai cố định Người gởi truyền điểm C1 = nA * G Và C2 = M + nA * PB Với PB là khóa công khai được nhận từ B THUẬT TOÁN MÃ HÓA INPUT
: Miền tham số của Elliptic (p, E, P, n) Khóa công khai Q Bản rõ m
OUTPUT : Bản mã (C 1,C2) Bước 1 : nhúng bản rõ m vào điểm M thuộc Elliptic E(F p) Bước 2 : lựa chọn nA ∈ [1 n-1] Bước 3 : tính C1 = nA * G Bước 4 : tính C2 = M + nA * PB GVHD_TH.S 62
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Bước 5 : Return (C1, C2) THUẬT TOÁN GIẢI MÃ : INPUT : miền tham số (p, E, P, n) OUTPUT : bản rõ m Bước 1 : tính M = C2 - nA * PB = C2 – nA * (nB * G) = C2 – nB * PA Bước 2 : chuyển đổi điểm M về m Bước 3 : return m; NHÚNG BẢN RÕ :
0
1
2
3
4
A
B
C
D
E
a
b
c
d
e
F
G
H
I
J
f
g
h
i
j
K
L
M
N
O
k
l
m
n
o
P
Q
R
S
T
p
q
r
s
t
U
V
W
X
Y
u
v
w
x
y
0
1
2
3
4
GVHD_TH.S 63
ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI - CÔNG NGHỆ THÔNG TIN
Z
,
.
?
5 z Như vậy để mã hóa thông điệp “Do Xuan Toai” thì bảng ký tự sẽ tương đương với {P1(0,3) , P2(2,4) ,P3(5,4) , P4(4,3) P7(2,3) ,P3(5,4) ,P8(3,4) ,P2(2,4),P6(0,0) ,P9(1,3)}
,
P5(4,0)
,P6(0,0)
,
Chúng ta cũng có thể định nghĩa một bảng với số lượng ký tự lớn hơn tùy thuộc vào mục đích mã hóa.
GVHD_TH.S 64