You are on page 1of 68

Chương 1.

Hệ thống mật mã RSA
1.1. Thuật toán RSA
Thuật toán RSA được đề xuất bởi Rivest, Shamir và Adleman [41]. Gọi p và q là hai số nguyên tố lớn ngẫu nhiên phân biệt. Mô-đun n là tích của hai số nguyên tố này: n = pq. Hàm phi Euler (Euler's totient function) của n cho bởi:

Chọn một số

sao cho

và tính d với

sử dụng thuật toán Euclid mở rộng [19, 31]. Ở đây, e là số mũ công khai (public exponent) và d là số mũ bí mật (private exponent). Thông thường, người ta chọn số mũ công khai nhỏ, ví dụ e = 216 + 1. n và e được công khai. Giá trị của d và hai số nguyên tố p và q được giữ bí mật. Việc mã hóa được thực hiện bằng cách tính

với M là bản rõ (plaintext) thỏa 0 ≤ M < n. Số C là bản mã (ciphertext) tương ứng của M. Từ C, M được tính bằng

Tính đúng đắn của thuật toán RSA được chứng minh bằng định lý Euler như sau: Cho n và a là hai số nguyên dương nguyên tố cùng nhau. Khi đó,

Do ed = 1 mod

, nghĩa là ed = 1 + K Cd (mod n) (mod n)

với K nguyên, chúng ta có thể viết lại:

(mod n) (mod n) (mod n)

do gcd(M,n) = 1. Ngoại lệ gcd(M,n) > 1 có thể được giải quyết như sau. Theo định lý Carmichael

với (n) là hàm Carmichael có dạng đơn giản là n = pq, cụ thể

Chú ý rằng (n) luôn là ước thật sự (proper divisor) của (n) khi n là tích của các số nguyên tố lẻ phân biệt; trong trường hợp này, (n) nhỏ hơn (n). Giờ đây, quan hệ giữa e và d cho bởi

Do n là tích của các số nguyên tố phân biệt nên điều trên đúng với mọi M, do đó nó giúp đối phó với ngoại lệ gcd(M,n) > 1 nêu trên trong định lý Euler. Ví dụ, chúng ta xây dựng một hệ thống mã hóa RSA như sau: Cho p = 11, q = 13, và tính n =pq = 11  13 = 143,

(n) = (p – 1)  (q – 1) = 10  12 = 120.
Chúng ta cũng tính hàm Carmichael của n

Số mũ công khai e được chọn thỏa 1 < e < (n) và

Ví dụ, e = 17 thỏa ràng buộc này. Số mũ bí mật d được tính bởi

được tính bằng cách sử dụng thuật toán Euclid mở rộng hay bất cứ thuật toán nào khác để tính phần tử nghịch đảo mô-đun. Do đó, người dùng công bố số mũ công khai e và mô-đun n: (e,n) = (13,143), và giữ bí mật các giá trị sau: d = 113, p = 11, q = 13. Một tiến trình mã hóa/giải mã tiêu biểu được thực hiện như sau: Bản rõ: M = 50 Mã hóa: C := Me (mod n) C := 5017 (mod 143) C = 85 Bản mã: C = 85 Giải mã: M := Cd (mod n) M := 85113 (mod 143) M = 50.

1.2. Trao đổi các thông điệp bí mật:
Thư mục khóa công khai chứa các cặp (e,n) cho mỗi người dùng. Những người dùng muốn gởi các thông điệp bí mật đến người dùng khác sẽ tham khảo thư mục này để nhận các tham số này. Ví dụ, thư mục này được sắp xếp như sau: Người dùng Alice Bob Cathy … Các khóa công khai (ea,na) (eb,nb) (ec,nc) …

Cặp na và ea tương ứng là mô-đun và số mũ công khai cho Alice. Như trong ví dụ, chúng tôi sẽ trình bày cách Alice gởi thông điệp bí mật M cho Bob. Trong ví dụ giao thức đơn giản của chúng tôi, Alice thực hiện các bước sau đây: 1. Alice xác định tên của Bob trong thư mục và nhận số mũ công khai vùng với môđun: (eb,nb). 2. Alice tính .

3. Alice gởi C cho Bob thông qua mạng. 4. Bob tiếp nhận C. 5. Bob sử dụng số mũ bí mật và mô-đun của anh ấy, và tính thu được M. để

1.3. Ký văn bản điện tử
Thuật toán RSA cung cấp một tiến trình để ký văn bản điện tử và kiểm tra chữ ký có xác thực không. Việc ký văn bản điện tử khác với ký văn bản giấy, ở chỗ các văn bản giấy đều dùng một chữ ký. Chữ ký điện tử không thể bất biến, nó là một hàm số của văn bản điện tử khi được tạo. Sau khi chữ ký (chỉ là một phần nhỏ khác của dữ liệu điện tử) của một văn bản điện tử được tạo ra, nó được đính kèm vào văn bản để cho những ai muốn kiểm tra sự xác thực của văn bản và chữ ký. Ở đây chúng tôi sẽ minh họa ngắn gọn tiến trình ký sử dụng hệ mã RSA. Giả sử Alice muốn ký một thông điệp, và Bob muốn có bằng chứng rằng thông điệp này được ký bởi Alice. Trước tiên, Alice thực hiện các bước sau: 1. Alice tạo thông điệp M và tính 2. Alice làm cho thông điệp M và chữ ký S luôn sẵn sàng để được xác thực. Bob thực hiện các bước sau để xác thực chữ ký của Alice trên văn bản M:

chúng là những giao thức ‘giáo khoa’ (‘textbook’). người gửi cũng như những người nhận thực hiện một thao tác đơn để ký. ví dụ. Ngoài ra còn có cấu trúc phần cứng để thực hiện phép nhân và lũy thừa mô-đun. xác định tên của Alice trong danh bạ để lấy các thông số e và n (ea. xác thực. nghĩa là lũy thừa modulo. Bob nhận M và S. 25. các giao thức này thường phức tạp hơn. 28. Thuật toán RSA ở khía cạnh này là một trong những hệ mã đơn giản nhất. 3. chúng tôi sẽ đánh giá các kỹ thuật để cài đặt phép toán lũy thừa modulo trên các máy tính thông thường. Hơn nữa. . 46. kỹ thuật mã hóa khóa bí mật (secret-key) cũng có thể được dùng để gởi những thông điệp bí mật. số mũ công khai e và bí mật d được xác định và thành phần công khai được công bố. Tính lũy thừa Modulo Mỗi khi hệ mã RSA được cài đặt. Chữ ký thường được tính bằng cách trước tiên tính giá trị băm của thông điệp dài và sau đó ký giá trị băm này. các máy trạm và các máy tính lớn.15. chúng ta lưu ý rằng quá trình tính lũy thừa trong một hệ mã dựa trên bài toán logarit rời rạc có chút khác biệt: Cơ sở (M) và Mô-đun (n) được biết trước. nó được dùng trong nhiều hệ mã. Tuy nhiên. 1. Báo cáo này không bao gồm các đoạn mã thực sự. Nếu không. 50]. các bộ xử lý tính hiệu. để trả lời cho các câu hỏi của vấn đề này. như máy tính cá nhân. Ví dụ. mã hóa và giải mã. vì vậy chữ ký không hợp lệ. Ví dụ. Trọng tâm của báo cáo này là về hệ mã RSA như tiêu đề của nó. chúng ta biết trước số mũ e và mô-đun n nhưng không biết cơ sở. Nếu M’ = M thì chữ ký được xác thực.4. trong thực tế. Phép lũy thừa modulo là phép toán phổ biến để xáo trộn. việc ký được áp dụng cho các thông điệp có độ dài tùy ý. hoặc thông điệp gốc M hoặc chữ ký S bị sửa đổi. na) 2. Bob tính . Tương tự. 24. Thao tác bắt buộc là tính Me (mod n). xem [40. Đọc giả có thể tham khảo thêm báo cáo [42] và Các Chuẩn Mã Hóa Khóa Công Khai [43] được xuất bản bởi RSA Data Security. Bản đánh giá tóm lược có thể được tìm thấy trong [5]. sơ đồ chữ ký ElGamal và Chuẩn Chữ Ký Số (DDS) được đề xuất mới đây của Viện Tiêu chuẩn và Công nghệ Quốc gia [34] cũng đòi hỏi tính lũy thừa modulo. Chú ý rằng các ví dụ giao thức cho ở đây chỉ để minh họa. 26. sơ đồ trao đổi khóa Diffe-Hellman đòi hỏi phép lũy thừa modulo [8]. Trong chương tiếp theo. nó chủ yếu đề cập khía cạnh toán học và thuật toán của việc cài đặt phần mềm của thuật toán RSA. do đó việc tối ưu hóa vẻ không phù hợp. Điều này cho phép một số tiền-tính toán vì các lũy thừa của cơ sở có thể được tính toán trước và được lưu lại [6]. nghĩa là mô-đun n. các vi điều khiển. Trong quá trình tính lũy thừa đối với thuật toán RSA. các vi xử lý.1.

Tuy nhiên. Ví dụ. Phương pháp mà được tính không phải là cụ thể cho số cho bất kỳ e. ≔ ( ) Các kết quả tạm phải được quy về (rút gọn) modulo n tại mỗi bước của lũy thừa. điều đó sẽ cấm đối với số e lớn. 2. Phương pháp ngây thơ đòi hỏi e . phương pháp này tính tất cả các lũy thừa của M cho tới 15: → → → → → → →⋯→ trong đó cần đến 14 phép nhân.1 Modular Exponentiation Nguyên tắc đầu tiên của lũy thừa (mũ hóa) kiểu mô-đun là ta không tính bằng phép lũy thừa đầu tiên (first exponentiating) và sau đó thực hiện một phép chia để lấy phần dư ≔( )% . ta có thể làm cho một giả định rộng rãi rằng có 512 triệu máy tính. tổng số các bit có sẵn sẽ là 512 ∙ 2 ∙ 512 ∙ 2 ∙ 8 = 2 ≈ 10 . Bình phương được thực hiện tại mỗi bước. Điều này là bởi vì yêu cầu không gian (space requirement) của số nhị phân là rất lớn. và sự khai triển nhị phân của e được đưa ra bởi . ta không có cách nào lưu trữ nó.3 của cuốn sách của Knuth [19] để biết thêm thông tin. Tham khảo mục 4. và có từ cổ xưa. nếu chúng ta cần tính ( ).1 phép nhân mô-đun để tính ≔ ( ).6. M và e có 256 ( )= ∙ ( ) ≈ 2 ∙ 256 = 2 ≈ 10 bit để lưu trữ . Thuật toán phải sang trái đòi hỏi thêm một biến để giữ các lũy thừa của M. Thuật toán được gọi là phương mũ nào đó. Cho k là số bit của e. đó là chỉ đủ để lưu trữ với M và e là 55 bit. ta cần này xấp xỉ bằng số các hạt trong vũ trụ [1]. Con số bit. Dưới đây là một phương pháp nhanh hơn của phép tính : được → → → → → → trong đó cần đến 6 phép nhân. = 1 + . 2. tức là. một phép nhân tiếp theo được thực hiện. nó có thể được dùng để tính pháp nhị phân (binary method) hoặc phương pháp bình phương và nhân (square and multiply). Để tính sức chứa bit của tất cả các máy tính trên thế giới.2 Exponentiation Ta đặt ra câu hỏi sau đây: Có bao nhiêu phép nhân mô-đun cần thiết để tính ? Một ) và tiếp tục thực cách ngây thơ của phép tính ≔ ( ) là bắt đầu với ≔ ( ) cho đến khi ≔ hiện các thao tác nhân mô-đun ≔ ∙ ( ( ) đạt được.Chapter 2 Modular Exponentiation (Mô đun số mũ) 2. không phải tất cả các lũy thừa của M cần phải được tính để có . Như vậy. mỗi máy có 512 MBytes của bộ nhớ. Ta mô tả phương pháp nhị phân từ trái sang phải dưới đây. và tùy thuộc vào giá trị bit được quét.3 The Binary Method Phương pháp nhị phân quét các bit của số mũ hoặc từ trái sang phải hoặc từ phải sang trái. Giả sử.

phương pháp nhị phân yêu cầu: • • Bình phương (Bước 2a): k-1 với k là số bit trong việc triển khai (mở rộng) nhị phân của e. ( )−1 ≤ − 1. e. : ( − 1) + 0 = − 1. Phương pháp nhị phân để tính ⋯ = )= ( 2 ) được đưa ra dưới đây: Phương pháp nhị phân (The Binary Method) Input: M. n. ta có C: = M vì pháp nhị phân tiến hành như sau: Số lượng các phép nhân mô-đun cần thiết theo phương pháp nhị phân cho phép tính được tìm thấy là 7 + 5 = 12. 2. cho e = 250 = (11111010). ≔ ∙ ( ) 2b. Phép nhân (Bước 2b): H(e) . tổng số của phép nhân được tìm thấy là: : ( − 1) + ( − 1) = 2( − 1). ngụ ý k = 8. Đối với một số e k-bit tùy ý với = 1. Output: 1. Do đó. =1 ≔ = −2 0 2a. ≔1 ∙ ( ) = = 1. Ban đầu. = ( ).=( với ∈ 0. ta có 0 ≤ .1 . Phương 3.1 với H(e) là trọng lượng Hamming (Hamming weight) (số bit 1 trong việc triển khai nhị phân) của e. Giả sử e > 0. =1 ≔ Ví dụ.

: ( − 1) + ( − 1) = ( − 1). . số mũ được độn thêm (đệm) bằng r . các giá trị ký số có thể là (00) = 0. ta tính: . Sau đó.4 The m-ary Method Phương pháp nhị phân có thể được tổng quát bằng cách quét các bit của e • • 2 bit mỗi lần: phương pháp tứ phân. Ví dụ. vì được tính bằng cách nhóm các ) là mở rộng nhị phân bit của việc khai triển nhị phân của số mũ e.1 The Quaternary Method Trước hết ta xem xét phương pháp tứ phân. • bit mỗi lần: Phương pháp m-phân. Phương pháp m-phân đầu tiên tính giá trị của ( ) với w = 2. (01) = 1. . . hoặc 3 bit mỗi lần: phương pháp bát phân. 2. kết quả từng phần được tăng lên lũy thừa 2 và nhân y modulo n trong đó là giá trị (khác không) của phần bit hiện tại. và (11) = 3. khi ta giả định rằng 2.…. =1 Tổng quát hơn. 3. ta cần phải thực hiện một số tiền xử lý để có được và . Vì các bit của e được quét hai lần tại một thời điểm. Bước nhân (Bước 4b) có thể yêu cầu các giá trị . m-1. Khi m là một lũy thừa của 2.1 bit 0. Các kí số của e sau đó được quét và nâng lũy thừa (squarings / powerings) và tiếp theo phép nhân được thực hiện cho phù hợp. Phương pháp m-phân được dựa trên sự mở rộng m-phân của số mũ. cho e =250 và phân vùng các bit của e nhóm 2 bit là e = 250 = 11 11 10 10 Ở đây. ta có s = 4 (số lượng các nhóm s = k/r = 8/2 = 4).4. việc thực hiện của phương pháp m-phân là khá đơn giản. các bit của e được quét r bit kế tiếp nhau từ quan trọng nhất đến ít quan trọng nhất. vv. Ta định nghĩa =( ⋯ )= 2 Lưu ý rằng 0 ≤ ≤ − 1 và = ∑ 2 . Phương pháp này được mô tả trong cuốn sách của Knuth [19]. Cho = ( ⋯ của số mũ. Trong bước tiền xử lý. Ở mỗi bước. Sự biểu diễn này của e được phân chia thành s khối chiều dài r cho mỗi khối sao cho sr = k. (10) = 2. Nếu r không chia cho k. Vì vậy.

và quá trình (proceeds) để tính Số các phép nhân mô-đun cần thiết theo phương pháp tứ phân để tính = 11.4. Phương ( pháp bát phân sau ) như sau: đó gán ≔ = ( ). 6.2 The Octal Method ( ) là 2 + 6 + 3 Phương pháp bát phân phân vùng các bit của số mũ theo nhóm 3 bit. Ví dụ. 2. 3. và quá trình để tính . 5. Trong bước tiền xử lý.Phương pháp tứ phân sau đó gán ( ) như sau: ≔ = ( ). 7. ta tính ( ) cho tất cả các w = 2. cho s = k/r = 9/3 = 3. 4. e =250 được phân như sau e = 250 = 011 111 010 bằng cách đệm một bit 0 ở bên trái.

. Số trung bình của phép nhân đối với phương pháp nhị phân có thể được tìm thấy một cách đơn giản bằng cách thay r = 1 và m = 2. (111) = 7. Trong phần sau. phương pháp m-phân yêu cầu trung bình 2 −2+ − + − 1 (1 − 2 ) phép nhân với bình phương. và (010) = 2. Các giá trị tối ưu của r có thể được tìm thấy bằng cách liệt kê [21]. … . ta có thể sửa đổi một chút ở Bước 1 của phương pháp m-phân và tiền tính toán (precompute) ( ) cho các w chỉ xuất hiện trong phần mở rộng nhị phân được phân vùng của e. ta sẽ tìm hiểu các phương pháp của loại này mà cố gắng giảm số các phép nhân bằng cách sử dụng các thuộc tính của e đã cho. ta được ( − 1). Cũng lưu ý rằng có tồn tại một tối ưu (optimal) = ∗ cho mỗi k mà trung bình số các phép nhân được yêu cầu theo phương pháp m-phân là tối thiểu. Nói chung.Phép tính của ( ) bằng phương pháp bát phân đòi hỏi 6 + 6 + 2 = 14 phép nhân môđun. ta lập bảng các giá trị trung bình của phép nhân cộng với phép bình phương được yêu cầu theo phương pháp nhị phân và phương pháp m-phân với các giá trị tối ưu của r. 4. ta đã không dùng tất cả trong số chúng. các giá trị bit phân vùng là (011) = 3. 2 . nhận thấy rằng. mặc dù ta tính ( ) cho tất cả các w = 2. • • • Số phép nhân tiền xử lý (Bước 1): Số phép bình phương (Bước 4a): Số phép nhân (Bước 4b): −1 −1 ∙ = = −2=2 −2 − và là số 1− − 1 (1 − 2 ) Như vậy. Ta có thể tính các lũy thừa này chỉ sử dụng 4 phép nhân: Tổng số phép nhân được yêu cầu theo phương pháp bát phân cho phép tính ( ) là 4 + 6 + 2 = 12. 7. Ví dụ. e = 250. ta có thể sẽ phải tính ( ) cho tất cả các = 2. 3. Tuy nhiên. Phương pháp tính ( ) bằng phép tính trước đó ( ) cho các w chỉ xuất hiện trong phân vùng (partitioning) của số mũ được gọi là (termed) phụ thuộc dữ liệu (datadependent) hoặc một thuật toán thích ứng. Trong phần sau. Vì vậy. 6. 5. Ta tóm tắt (summarize) số trung bình các phép nhân và bình phương (squarings) được yêu cầu theo phương pháp m-phân mà giả định 2 = nguyên. 3. nói chung. Điều này sẽ có nhiều trường hợp khi k rất lớn.

d = 4 1011 0011 0111 1000 mà có nghĩa là ta cần phải tính ( 3. Tuy nhiên. Để chứng minh tuyên bố này. số các phép nhân tiền xử lý có thể được giảm nếu phần mở rộng nhị phân được phân vùng của e không chứa tất cả giá trị phần bit có thể w. Hãy xem xét số mũ dưới đây cho k = 16. 7. 11 có thể đạt được liên tục như sau: ) chỉ với w = 3. Như ta đã chỉ ra trước đó. Sau khi phần mở rộng nhị phân của số mũ đạt được. ta phân số này thành các nhóm d bit. 8. Các giá trị số mũ w = = = = ∙ ∙ ∙ .5 The Adaptive m-ary Methods (Các phương pháp m-phân hiệu chỉnh) Các phương pháp hiệu chỉnh là những nơi tạo ra phương pháp tính của chúng tùy theo dữ liệu đầu vào. cũng có các thuật toán hiệu chỉnh mà phân vùng số mũ vào một loạt các từ 0 và khác 0 để giảm số phép nhân cần thiết trong Bước 4b của phương pháp m-phân. một khi nó được cung cấp.Giá trị tiệm cận của việc tiết kiệm được cung cấp bởi phương pháp m-phân là bằng 33%. ta tính giới hạn của tỷ lệ lim → 2 −2+ − + 3 2 ( − 1) − 1 (1 − 2 ) = 2 1−2 1+ 3 ≈ 2 3 2. 8. 2. và đưa ra số phép nhân và lũy thừa được yêu cầu. Trong trường hợp lũy thừa. Sau đó ta tiền tính toán (precompute) và thu được ( ) chỉ dành cho các w mà xuất hiện trong phần mở rộng nhị phân. một thuật toán hiệu chỉnh sẽ điều chỉnh cấu trúc của nó theo số mũ e. Trong phần sau ta giới thiệu các phương pháp này.5. 11.1 Reducing Preprocessing Multiplications (Giảm các phép nhân tiền xử lý) Ta đã giới thiệu tóm tắt phương pháp này. 7.

The Sliding Window Method . . Ta sẽ nói thêm về các chuỗi cộng và chuỗi cộng vectơ trong phần cuối của chương này. Hơn nữa. 1. Do đó.2 = 14 phép nhân tiền xử lý.. . p-1 thì một vài sự không có sự tiết kiệm. trong khi sử dụng các giá trị tương đối lớn của d. 3. 2 − 1 thì một số tiết kiệm có thể đạt được nếu ta có thể tính đối với i = 0.. Điều này là do ta phân vùng số mũ bắt đầu từ bit ít quan trọng nhất. khi 0001 0001 0001 0001 Điều này ngụ ý rằng ta không tính trước bất cứ gì. p-1 sử dụng ít hơn 2 − 2 phép nhân.. nếu là một cửa sổ khác không.2 The Sliding Window Techniques (Các kỹ thuật cửa sổ trượt) Phương pháp m-phân phân tích các bit của số mũ thành các từ d-bit. ta phải tính ( ) cho tất cả = . .. vấn đề của việc đạt được một chuỗi cộng với chiều dài tối thiểu là một vấn đề NP-đầy đủ (NP-complete problem) [9]. Thật không may.. Ta cho d là chiều dài của cửa sổ dài nhất.= = = ∙ ∙ ∙ trong đó yêu cầu 6 phép nhân. 1. . 2. Xác suất của một từ của chiều dài d là 0 bằng 2 . Một thuật toán cho việc tính bất kỳ các giá trị số mũ đã cho p được gọi là một chuỗi cộng vectơ. Trong Bước 4b của phương pháp m-phân... Tuy nhiên nếu khoản là một tập con (đặc biệt là một tập con nhỏ) của các giá trị 2. ví dụ. chỉ cần dùng M. Phương pháp m-phân xem thường các giá trị số mũ cần thiết và tính tất cả trong số chúng sẽ yêu cầu 16 .. Điều này xảy ra khá hiếm.. Các thuật toán cửa sổ trượt cung cấp một sự thỏa hiệp bằng cách cho phép từ 0 và khác 0 của chiều dài biến thiên. tức là. ta bỏ qua một phép nhân bất cứ khi nào từ hiện tại bằng 0. xác suất mà ta phải thực hiện một phép tính nhân trong Bước 4a trở nên lớn hơn.1.. giả định rằng các bit 0 và 1 được đưa ra với xác suất bằng nhau. nó cũng không yêu cầu chiều dài của các cửa sổ bằng nhau. số phép nhân tiền xử lý (Bước 1) giảm gần một nửa. Nói chung. Vì vậy. 3.. vì chỉ được tính cho w lẻ. Tuy nhiên. . Thuật toán lũy thừa cửa sổ trượt đầu tiên phân tích e thành các từ (cửa sổ) 0 và khác 0 chiều dài L( ). k .. 1. … . Số cửa sổ p có thể không bằng / . thì bit ít quan trọng nhất của Fi phải bằng 1. chiến lược này nhằm mục đích tăng số trung bình của từ 0. .. Nói chung. và không có điểm trong việc bắt đầu một cửa sổ khác 0 với một bit 0.5.. một chuỗi cộng. khi d trở nên lớn hơn. = ( ( )) với i = 0. Ta thực hiện 2 − 2 phép nhân và đạt được tất cả các giá trị này. và trong trường hợp p = 1. đó là trường hợp khi tất cả các giá trị số mũ phân vùng bằng 1. Nếu khoản của tập { | i = 0.. tổng số phép nhân tăng lên khi giảm d. Số các phép nhân có thể được tiết kiệm bị giới hạn trên bởi − 2 = 2 − 2.} là các giá trị 2.

…. Những phương pháp này khác cho dù chiều dài của cửa sổ khác 0 phải là một hằng số (=d). ta phân biệt giữa đang ở trong NW và đang đi tới NW. Compute and store 2. ( ) 3. .2 downto 0 4a. hoặc có thể được thay đổi (tuy nhiên. Decompose e into zero and nonzero windows Fi of length L( ) for i =0. NW: Ở trong NW cho đến khi tất cả d bit được thu thập. hai cửa sổ khác 0 thể có liền kề.Input: Output: . chúng nhất thiết phải được nối. return C ( ) ∶= ) ∙ ( ) Các chiến lược phân vùng 2 cửa sổ trượt đã được đề xuất [19. Ví dụ. 7. 5. if ≠ 0 then 5. tuy nhiên. Thuật toán quét các bit của số mũ từ ít quan trọng nhất đến quan trọng nhất. 5.1. = ( ). ngược lại đi tới NW. ∶= ( 4b. Chú ý rằng trong khi ở NW. 2. ( ) for all w =3. Chiến lược phân vùng CLNW tạo ra các cửa sổ 0 chiều dài tùy ý và các cửa sổ khác 0 chiều dài d. ≤ d). for i = p . . Trong các phần sau. thuật toán hoặc là hình thành một cửa sổ 0 (ZW) hoặc cửa sổ khác 0 (NW). 2. Không thể có hai cửa sổ 0 liền kề. ∶= 4.4]. 1.3 Constant Length Nonzero Windows Thuật toán phân vùng cửa sổ khác 0 chiều dài hằng số (CLNW) là do Knuth[19]. Thuật toán được mô tả như dưới đây: ZW: Kiểm tra bit đơn đến: nếu nó là 0 thì ở lại trong ZW. Tại bất kỳ bước nào. ta đưa ra mô tả thuật toán của hai chiến lược phân vùng này. d = 3. Cái trước có nghĩa là ta tiếp tục để tạo thành cùng cửa sổ khác 0. .….1. 2d .5. 7. Sau đó kiểm tra bit đơn đến: nếu nó là 0 thì đi tới ZW. ngược lại đi tới NW. p . 1. trong khi cái sau ngụ ý bắt đầu của một cửa sổ mới khác 0. ta phân vùng e =3665 = (111001010001) như sau e = 111 00 101 0 001 Thuật toán cửa sổ trượt CLNW đầu tiên thực hiện các phép nhân tiền xử lý và đạt được ( ) cho w = 3.

Trong bảng dưới đây. Các giá trị tối ưu này cũng được tính đến trong bảng. Các chi tiết của phân tích này được đưa ra trong [23]. Cột cho các phương pháp m-phân chứa các giá trị tối ưu ∗ cho mỗi k. Mặc dù d-1 bit đến có thể tất cả bằng 0. Chiến lược tạo phân vùng CLNW làm giảm số trung bình các phép nhân 3-7% với 128 ≤ ≤ 2048. Theo dự kiến. có tồn tại một giá trị tối ưu d cho mỗi k đối với thuật toán cửa sổ trượt CLNW. thuật toán tiếp tục nối thêm chúng vào cửa sổ khác 0 hiện hành. Cột cuối của bảng chứa phần trăm khác nhau trong số trung bình của các phép nhân. Chi phí (overhead) của phân vùng không đáng kể. cho d = 3. số mũ e = (111001010001) đã được phân vùng như sau e = 111 00 101 0 001 .4 Variable Length Nonzero Windows Chiến lược phân vùng CLNW bắt đầu với một cửa sổ khác 0 khi bit 1 được gặp phải. Số trung bình của các phép nhân có thể được tìm thấy bằng cách mô hình hóa quá trình phân vùng như chuỗi Markov. Ví dụ. 2. số các phép tính bit yêu cầu để có được việc phân vùng tỷ lệ thuận với k.Thuật toán gán = = ( ) và sau đó tiến hành tính ( ) như sau: Như vậy. tổng cộng 4 + 9 + 2 = 15 phép nhân mô-đun được thực hiện. ta lập bảng số trung bình của phép nhân cho phương pháp m-phân và phương pháp cửa sổ trượt CLNW.5.

= + . Thuật toán tiến hành như sau: ZW: Kiểm tra bit đơn đến: nếu nó là 0 thì ở lại trong ZW. do đó l = 1 và r = 2. Chiến lược này đòi hỏi trong quá trình hình thành cửa sổ khác 0 (NW). Phân tích này được thực hiện trong [23]. giống như quá trình CLNW. một cửa sổ ở vị trí ít quan trọng nhất nhất thiết sẽ có d bit. ngược lại ở lại trong NW. Các thí nghiệm cho thấy rằng các giá trị tốt nhất của q là từ 1 đến 3 đối với 128 ≤ ≤ 2048 và 4 ≤ ≤ 8. 5 = 1 + 1 ∙ 2 + 2. Phân vùng VLNW tạo ra các cửa sổ khác 0 bắt đầu với một bit 1 và kết thúc với một bit 1. kiểm tra các bit đơn đến: nếu nó là 0 thì đi tới ZW. ta có thể phân vùng số này như sau e = 111 00 101 000 1 Ta thấy rằng chiến lược này tiếp tục làm giảm số trung bình các cửa sổ khác 0. Ngoài ra. số các bit đến sẽ bằng r. có thể được mô hình hóa bằng cách sử dụng chuỗi Markov. Thuật toán VLNW yêu cầu ít hơn 5-8% phép nhân phương pháp m-phân. cho d = 10. ngược lại ở lại NW. và q = 4. ngược lại đi tới NW. cho d = 5 và q = 2. Để tính số trung bình các phép nhân. Trong bảng dưới đây. quá trình phân vùng VLNW. q: số lượng tối thiểu các bit 0 cần thiết để chuyển sang ZW. Ví dụ. Cho + 1 trong đó 1 < ≤ . ta chuyển sang ZW khi các bit còn lại tất cả là 0. ta lập bảng các giá trị này cùng với các giá trị tối ưu của d và q. và so sánh chúng với phương pháp m-phân. Ở lại trong NW cho đến khi + 1 bit đạt được. Chiến lược phân vùng VLNW có hai tham số nguyên: • • d: chiều dài tối đa cua sổ khác 0. NW: Kiểm tra q bit đến: nếu tất cả chúng là 0 thì đi tới ZW. Chiến lược tạo phân vùng cửa sổ khác 0 chiều dài thay đổi (VLNW) được đề xuất bởi Bos và Coster [4]. và số trung bình các phép nhân đã được tính cho 128 ≤ ≤ 2048. nếu ta chấp nhận các cửa sổ khác không chiều dài biến đổi. Dưới đây minh họa việc phân vùng của số mũ dài theo các tham số này: 101 0 11101 00 101 10111 000000 1 00 111 000 1011. Sau khi tất cả các bit d được thu thập. Nếu những bit r này tất cả là 0 thì đi tới ZW. Hai cửa sổ 0 sẽ không liền kề vì chúng sẽ được nối. Hai cửa sổ khác 0 thể có liền kề. Một ví dụ phân vùng được minh họa dưới đây: 1011011 0000 11 0000 11110111 00 1111110101 0000 11011. có nghĩa l = 2 và r = 1. ngược lại đi tới NW.Tuy nhiên. tuy nhiên. Tại bước cuối cùng.

các thuật toán mphân và cửa sổ trượt như là một hàm của n = 128. 256. . Trong hình 2.6 The Factor Method Phương pháp thừa số được đưa ra bởi Knuth [19]. phương pháp mphân đòi hỏi phải có 636 phép nhân trong khi các thuật toán cửa sổ trượt CLNW và VLNW yêu cầu tương ứng là 607 và 595 phép nhân. ta vẽ đồ thị số trung bình các phép nhân / . Việc giảm số phép nhân là đáng chú ý. .. Hình 2. số trung bình các phép nhân T chia cho tổng số bit k. Ta tính bằng cách đầu tiên tính và sau đó nâng giá trị của lũy thừa thứ s: . giới thiệu chi phí không đáng kể (introducing negligible overhead)..Các thuật toán cửa sổ trượt dễ dàng để lập trình. nghĩa là.1 Các giá trị T/k đối với các thuật toán m-ary và cửa sổ trượt 2. ví dụ. Nó dựa trên sự tìm thừa số của số mũ = trong đó r là thừa số nguyên tố nhỏ nhất của e và > 1. với n = 512. 2048..1.

2. điều đó sẽ là rất khó khăn với các số lớn lớn. Nếu e là số nguyên tố.…. Tuy nhiên. Xây dựng mức ( + 1) bằng cách gắn dưới nút e các nút + . … . Phương pháp nhị phân. . Ví dụ. . ví dụ. Trong quá trình này. Xét nút e của mức k. (Lưu ý: = 1 và = ). + . = = . Giả sử rằng cây được xây dựng xuống mức thứ k. từ trái sang phải. mặt khác. phương pháp thừa số yêu cầu phân tích thừa số của số mũ. Thật không may. Nó cũng có thể hữu ích nếu số mũ được xây dựng cẩn thận. . Gốc của cây 1. Quá trình này tiếp tục cho đến khi giá trị số mũ cần tìm bằng 2. 2. ta phân tích thừa số = ∙ sao cho là thừa số nguyên tố nhỏ nhất của r và để tính > 1. Thuật toán này xây dựng cây theo heuristic. phương pháp này vẫn có thể được sử dụng cho hệ mã RSA bất cứ khi nào giá trị số mũ nhỏ. + với . . Cây lũy thừa xuống 5 mức như trong hình 2.= = . theo cách mà cho phép dễ dàng phân tích thừa số. là đường dẫn từ gốc của cây tới e. đòi hỏi 9 phép nhân vì = 55 = (110111) nghĩa là 5 phép lũy thừa (Bước 2a) và 4 phép nhân (Bước 2b). tức là. Các nút của cây được dán nhãn với số nguyên dương bắt đầu từ 1. thì ta tính sau đó nhân lượng này với M. ta loại bỏ bất kỳ bản sao đã xuất hiện trong cây. + .7 The Power Tree Method Phương pháp cây lũy thừa cũng là do Knuth [19]. Thuật toán đệ quy. ta minh họa phép tính của với = 55 = 5 ∙ 11 sau đây: Tính: → → → → → = → → → Gán: : = Tính: Gán: : = Tính: Tính: Phương pháp thừa số cần 8 phép nhân cho để tính .

8 Addition Chains Xét dãy các số nguyên . 2. phương pháp nhị phân đòi hỏi 4 + 3 = 7 phép nhân: → → → → → → → Ngoài ra. Nếu dãy được dựng theo cách mà tất cả k có tồn tại chỉ số . Ta bắt đầu với . . với = 1 và = . Dãy của các số mũ xảy ra trong phép tính của được tìm thấy trên đường từ gốc tới e. phương pháp nhị phân. thì dãy là chuỗi cộng đối với e. < sao cho = + . phương pháp m-phân. Phương pháp cây lũy thừa cũng có thể áp dụng được cho các số mũ nhỏ vì cây cần được "saved". phương pháp thừa số và phương pháp cây lũy thừa thực tế là các phương pháp của việc phát sinh các chuỗi cộng đối với giá trị số mũ đã cho e. Số phép nhân được yêu cầu là bằng r. phương pháp cây lũy thừa yêu cầu số ít hơn các phép nhân. . ví theo phương pháp cây lũy thừa đòi hỏi 6 phép nhân: dụ. và quá trình để tính sử dụng 2 giá trị đã tính trước và là = ∙ . phương pháp cửa sổ trượt. Chiều dài của chuỗi bằng r. phép tính của đòi hỏi phải có 5 phép nhân: → → → → → Với các giá trị số mũ cụ thể của e. … . phép tính của → → → → → → Tuy nhiên. các chuỗi cộng được tạo ra bởi một số các thuật toán này được trình bày dưới đây: Nhị phân: Tứ phân: 1 1 2 2 3 3 6 6 12 12 13 13 26 26 27 52 54 55 55 . vì 23 = (10111). Ví dụ. ta xác định vị trí e trong cây lũy thừa. vì 23 − 1 = 22 = 2 ∙ 11. cụ thể là. Chuỗi cộng với số mũ e đã cho là một thuật toán để tính . Xét ví dụ = 55. phương pháp thừa số đòi hỏi 1 + 5 + 1 = 7 phép nhân: → → → → → → → Knuth đưa ra một biến thể khác của cây lũy thừa heuristics trong Vấn đề 6 trang 463 [19]. Các thuật toán ta đã giới thiệu cho đến nay.Để tính . là chiều dài của chuỗi cộng.

…. Mỗi vector là tổng của hai vectơ trước đó. Các phương pháp thống kê. [0. Vấn đề này phát sinh cùng với việc giảm các phép nhân tiền xử lý trong phương pháp m-phân thích nghi và cũng như trong kỹ thuật cửa sổ trượt (xem Phần 2.….3.1.13. Điều này theo phương pháp nhị phân.0. [0. .1] [0.11] [4.2] [1. không có chuỗi cộng đối với e có thể ngắn hơn log + log ( ) − 2.1].5.0] [0.Bát phân: Thừa số: 1 1 2 2 2 3 4 3 4 5 5 5 10 10 6 20 11 7 40 22 12 50 44 24 55 55 48 55 Cây lũy thừa: 1 Với số nguyên dương e đã cho. Trong trường hợp xấu nhất. Ví dụ. 52].9 Vectorial Addition Chains Một vấn đề liên quan khác (mà ta đã nêu một cách ngắn gọn tại mục 2.1. ta đạt được chuỗi cộng vectơ như sau: [1. phép tính của chuỗi cộng ngắn nhất đối với e được thành lập là một vấn đề NP-đầy đủ [9]. chẳng hạn như mô phỏng luyện kim.0.8. Giới hạn dưới được thiết lập bởi Schönhage [44]: log + log ( ) − 2. • Các thuật toán đã đưa ra trước đây để tính là tất cả các heuristics để tạo ra các chuỗi cộng ngắn.….0.12] [7.1) là sự phát sinh của chuỗi cộng vectơ. Như vậy.….0].1.6] [3.5).0.0].3] [1.5] [2. Các heuristics cụ thể để đạt được chuỗi cộng ngắn được thảo luận trong [4.2. Một chuỗi cộng véctơ của một vector đã cho của các thành phần nguyên là danh sách các vectơ với các thuộc tính sau: • • • Các vector ban đầu là các vectơ đơn vị [1. Vector cuối cùng bằng vector đã cho. vì giới thiệu đầu tiên của vấn đề chuỗi cộng ngắn nhất bởi Scholz [19] vào năm 1937.1] [1.0.1.1] mà chiều dài 9. Điều này ngụ ý rằng ta phải tính tất cả các chuỗi có thể dẫn tới e để đạt được chuỗi ngắn nhất. ta có thể sử dụng phương pháp nhị phân để tính bằng cách sử dụng tối đa log + ( ) − 1 phép nhân. một vài thuộc tính của chuỗi cộng đã được thiết lập: • Giới hạn trên về độ dài của chuỗi cộng ngắn nhất đối với e bằng: log + ( ) − 1 với H(e) là trọng Hamming của e.4. cho vector [7.15. có thể được sử dụng để tạo các chuỗi cộng ngắn cho các số mũ cụ thể. Tuy nhiên.0] [0.15.13. 2.1.23] [0. Ta gọi những thuật toán này heuristics bởi vì chúng không đảm bảo một cách tối thiểu. Chuỗi cộng vector ngắn có thể được dùng để tính môt cách hiệu quả đối với một số số nguyên .7.23].

⋯ .Nếu các giá trị mũ xuất hiện trong phân vùng của việc khai triển nhị phân của e là chỉ 7. ta chuyển đổi chuỗi cộng vectơ trên thành dãy cộng với các số được đề nghị 7. 15. 15. và 23 như 1 2 3 4 7 8 15 23 mà chiều dài 7. và 23. Điều này đạt được bằng cách ghi nhận một sự tương ứng một-một giữa các dãy cộng và các chuỗi cộng vectơ. . thì trên chuỗi cộng vectơ có thể được dùng để đạt được các giá trị mũ này. Một dãy cộng đơn giản chỉ là một chuỗi cộng. Kết quả này được thiết lập bởi Olivos [35] đã chứng minh rằng sự phức tạp của việc tính toán của đa thức ⋯ là giống như việc tính toán đồng thời của các đơn thức . xảy ra một nơi nào đó trong chuỗi [53]. với i số được đề nghị . . Sử dụng thuật toán Olivos. . Nhìn chung một dãy cộng chiều dài r và i số đề nghị có thể được chuyển đổi thành một chuỗi cộng vectơ chiều dài + − 1 với kích thước i.⋯. .

-1}. Nó được thiết lập sao cho k-1 là chặn dưới cho các phép toán bình phương cần thiết khi tính Me với k là số lượng bit có trong e.May 3. Tính chất của những thuật toán này là cần sự nghịch đảo của M modulo n để có thể tính toán hiệu quả Me (mod n). b. Từ đó thu được chuỗi số có dấu biểu diễn lũy thừa sử dụng {0. chúng ta có thể sử dụng phương pháp nhị phân (hay phương pháp m-ary) để tính Me (mod n) với điều kiện M-1 (mod n) được cung cấp cùng với M. If 2. 1. Thu được một chữ ký số đại diện f của e . Ví dụ như (011110) có thể recode lại: Khi mà có được recoding của số mũ.10 Những phương pháp recode. For a. If then 1 then downto 0 else . Tuy nhiên. phương pháp recoding nhị phân như sau: Phương pháp tái mã hóa nhị phân :  Input :  Output : 0. 1. Trong phần này chúng ta sẽ thảo luận về những thuật toán tính lũy thừa mà về bản chất là khác so với những cái đã nghiên cứu trước đây. Kỹ thuật recoding như sau: 2i + j – 1 + 2i + j -2 + … + 2i = 2i + j – 2i Thu gọn vế trái để được vế phải có dạng phép toán số mũ đơn giản hơn. có khả năng giảm số lượng phép nhân bằng cách sử dụng recoding của phép lũy thừa. 2012 2. Ví dụ.

nhưng số lượng bit của số mũ đã recode của f có thể là k + 1. ít hơn 2 lần so với phương pháp nhị phân. M-1 = M119 Step 2a M (M)2 = M2 (M2)2 = M4 (M4)2 = M8 (M8)2 = M16 Step 2b M M2 M4 M8 M16 . chúng ta có được một dãy biểu diễn nhị phân có dấu của 119. 2012 Else if 3. Số lượng các phép nhân kèm theo lại giảm xuống. Return C then Lưu ý mặc dù số bit của e bằng k. với f = e. Điều này dễ thấy bằng cách đếm số lượng chữ số có dấu trong chuỗi nhị phân.May 3. M-1 = M15 Số lượng phép bình phương và phép nhân là 7 + 2 = 9. Với phương phải recode nhị phân. ví dụ (111) được recode lại là (100¬1). Số lượng phép toán bình phương thực hiện bởi recode nhị phân có thể nhiều hơn phương pháp nhị phân. Phương pháp không recode nhị phân đòi hỏi phải dùng 6 + 5 = 11 phép tính để tính M119. 2 . Chúng tôi sẽ giới thiệu ngắn gọn kỹ thuật để tạo ra dãy như vậy. Thay vì thuật toán recoding nhị phân bắt đầu từ bit ở vị trí k để tính Me (mod n) thì bây giờ là tính Mf (mod n) với f là (k + 1) bit lũy thừa đã recode. tuy nhiên dễ dàng để phân tích:  Số mũ 119 = 01110111  Số mũ đã recode 119 = 1000¬100¬1 Phương pháp recode nhị phân để tính M119 (mod n) như sau fi 1 0 0 0 ¬ 1 0 0 ¬ 1 (M15)2 = M30 (M30)2 = M60 (M60)2 = M120 M30 M60 M120 . Ví dụ cho e = 119 = (1110111).

Những kỹ thuật này áp dụng đối với phép lũy thừa. Ví dụ recoding của e = (111001111) sẽ là 100¬101000¬1. Do đó số lượng phép toán có thể được giảm xuống nếu chúng có được chuỗi các chữ số có dấu của các số nhân. 1. Chúng ta không làm gì khi bit của số là 0. 3 . Trường hợp xấu nhất xảy ra với e = (101010101) là 1¬11¬11¬11¬11¬1. ngoài ra nó ko làm gì và thực hiện sang bit kế tiếp. Tốt nhất là không thực hiện phép toán với số mũ như vậy. Do đó kết quả có thể sẽ thưa nhiều hơn. ta lấy e-1 = 0. Tuy nhiên thuật toán Booth có thiếu sót: chuỗi lặp lại (01) được recode thành chuỗi lặp (1¬1). thuật toán Booth không kết hợp chúng lại được mặc dù là chúng có thể. chỗ mà ta thay phép cộng bằng phép nhân và trừ bằng chia hay phép nhân bởi phép nghịch đảo. thưa hơn số mũ bình phương. Thuật toán Booth và những cải tiến phối hợp Thuật toán Booth quét qua các bit của 1 dãy nhị phân e = (ek-1ek-2…e1e0) từ trái sang phải và thu được những chữ số của số đã recode f theo bản chân trị ei 0 0 1 1 ei-1 0 0 0 1 fi 0 1 ¬1 0 Để có f0. 2012 Trong phần tiếp theo sẽ mô tả một số thuật toán để có được chuỗi nhị phân có dấu.May 3. sự cộng thêm được thực hiện nếu bit hiện tại là 1. Một vấn đề khác là. Nó được biết đến như là kiểu shift-add của những thuật toán nhân biểu diễn 1 phép tính shift cho mỗi bit của phép nhân. Ví dụ e = (11101111) được recode thành 100¬110000¬1 mặc dù là chuỗi thưa hơn là 1000¬1000¬1 vì (¬11) = -2 + 1 = -1 = (0¬1). 2 dẫy được phân cách bởi số 0. cộng nếu là 1 và trừ nếu là ¬1. Những thuật toán này đã được sử dụng để có được các thuật toán nhân hiệu quả.

0110 được recode lại thành 10¬10 và bất kỳ dấu vết nào của phần đầu có chiều dài i ≥ 3 được recode thành 10…0¬1. Tất cả các thuật toán này được thiết kế cho phép nhân được áp dụng cho lũy thừa. Thực hiện việc phân tích thời gian của một số thuật toán Booth cải tiến trong ngữ cảnh lũy thừa modular. Phương pháp recode ở trên được trình bầy trong [21]. Phương pháp recode nhị phân cần ít phép nhân hơn và số lượng phép bình phương tăng thêm nhiều nhất là 1. ta tính xác suất trị có dấu so với trị khác không ví dụ 1 hay ¬1.May 3. Ví dụ cải tiến phối hợp Booth ở [21] quét qua 4 bit của lũy thừa cùng lúc và chia sẻ 1 bit với cái phái trước. Để đếm số lượng trung bình của phép nhân. một vài thay đổi đã được đề xuất. Chúng ta thấy rằng phương pháp nhị phân cần trung bình 3/2(k – 1) phép bình phương và phép nhân. Số phép bình phương và nhân giảm xuống: Số lượng trung bình của phép nhân và bình phương 4 . 2 bít với trường hợp tiếp theo: Kỹ thuật này recode 1 số bằng cách cô lập phần thứ nhất bị ảnh hưởng. Phương pháp recode nhị phân sử dụng chiến lượt recode cần 11/8(k – 1) phép bình phương và nhân. Những thuật toán này quét một vài bit cùng lúc và tránh tạo ra những số khác 0 không cần thiết để recode 1 số. 2012 Để vượt qua những thiếu sót của thuật toán Booth.

1. 2. Nếu sự mở rộng nhị phân của E được xem như được đệm bắt đầu bằng 0.May 3. 0. Thuật toán recode canonical tính số có dấu f = (fkfk-1fk-2…f0) bắt đầu từ số ít có ý nghĩa nhất. Thuật toán recode Canonical. 2012 2. Số được recode theo canonical fi và giá trị tiếp theo của biến đệm nhị phân phụ ci+1 với i = 0. Với bit 1 ở vị trí thứ i biểu diễn bằng +2i và ¬1 là -2i. n được tính theo bảng chân trị 5 . 1} cho phép biễu diễn 1 dãy số. Một vecto với với chữ số có dấu nhỏ nhất f = (fkfk-1…f1f0) không chứa các số khác 0 liền kề (fifi-1 = 0 với 0 < i < k) được gọi là 1 vector có dấu canonical. 3 ký hiệu {¬1. Chúng ta đưa thêm biến c0 = 0 và kiểm tra sự mở rộng nhị phân của e 2 bit cùng 1 lúc. thì có thể chứng minh rằng tồn tại duy nhất một vecto số canonical của e [38]. …. Trong chữ số có dấu với cơ số 2.

2012 Ví dụ e = 3038. và M-1 (mod n) cũng được cung cấp. Ví dụ e = 3038 biểu diễn bởi thuật toán Booth chứa 5 số khác 0 thay vì là 4. Phương pháp này tối ưu khi có ít nhất những số khác 0 trong số tất cả vecto có dấu biểu diễn cùng 1 số. Theo đó. Chúng ta lưu ý rằng thuật toán recode kinh điển của Reitwiesner không có những thiếu sót. có thể tạo nhiều phần thưa bằng cách sử dụng chỉ mục . tái mã hóa f được tạo ra là có thể chứng minh số chữ ký số tối ưu [38]. đầu tiên là 2 thuật toán đã cho trong [33] thay thế xuất hiện của bằng .May 3. Ví dụ . Ví dụ. phương pháp nhị phân cần 11 + 8 = 19 phép nhân để tính M3038 trong khi áp dụng việc mở rộng nhị phân của E chỉ cần 12 + 3 = 15 phép nhân khi áp dụng vecto có dấu canonical f. Một số biến thể của thuật toán Booth cũng biểu diễn recode là tối ưu số lượng chữ số 0 của recode. recode tối ưu nhất là recode . Chúng ta thấy rằng khi số mũ được recode bằng cách sử dụng kỹ thuật recode bit kinh điển thì số lượng các phép nhân trung bình với k lớn có thể giảm 6 . Thuật toán thứ 2 trong [33] đúng nhưng các số nhị phân gần điểm cực thuận trong 2 được recode thành cách là cách 1 được tách biệt bởi (010) . Tính vector dấu canonical f là Chú ý là trong ví dụ lũy thừa e chứa 9 bit khác 0 trong khi phiên bản recode theo canonically chỉ chứa 4 số khác 0. và do đó recode thành .

có các ký thuật tinh vi hơn.May 3. chúng ta quét chúng nhiều hơn 1 bit cùng một thời điểm. Phương pháp recode m-ary kinh điển Các phương pháp recode nhị phân có thể tổng quát hóa thành các recode mary tương ứng. Điều này dễ dàng thực hiện bằng cách tính (M-1)w (mod n) bởi vì M-1 (mod n) được giả định đã được cung cấp cùng với 7 . Đường tiệm cận trung bình làm giảm số lượng của các phép bình phương cộng với các phép nhân bằng Số lượng trung bình các phép bình phương cộng với các phép nhân được biểu diễn ở dạng bảng theo bảng sau : 3. qua bước tiền xử lý Mw với w < 0 có thể được tính. Điều đó đã được chứng minh trong [11] bằng cách sử dụng các ngôn ngữ định dạng để mô hình hóa tính chất tự nhiên Markovian của luật các số ký số recode kinh điển từ các số nhị phân và đếm số lượng trung bình của các bit khác không . như là kỹ thuật cửa sổ trượt cũng có thể được dùng để tính Me (mod n) khi thu được recode của số mũ e. Trong thực tế. Vì các giá trị số mũ phân vùng cho phép các số âm. Một khi các chữ số của số mũ được recode. 2012 xuống miễn là M-1 được cung cấp với M.

Trong bảng dưới đây chúng ta so sánh các giá trị Tr(k. Trở ngại chính trong việc sử dụng chúng trong các hệ thống mã hóa RSA dường như là thời gian cần để tính M-1 (mod n) vượt quá thời gian thu được do sử dụng ký thuật tái mã hóa. và phương pháp thập phân tương ứng cần số lượng phép nhân trung bình: Hơn nữa. Một hy vọng rằng các thuật toán phức tạp này một ngày nào đó sẽ trở nên hữu ích. bậc bốn. 2012 M. nhị phân tiêu chuẩn. và recode thập phân (d = 3) tương ứng: Khi so sánh.May 3. d)/k với k lớn. Nó hiển thị số lượng trung bình của các phép bình phương cộng các phép nhân cho các phương pháp recode nhị phân (d = 1). d)/k và Ts(k. recode tứ phân (d = 2). số lượng trung bình của phép bình phương cộng với các phép nhân trong phương pháp recode m-ary kinh điển với bằng Cho k lớn và d xác định. hoạt động và của phương pháp m- ary chuẩn được phân phối bởi hệ số k. Một phân tích của phương pháp recode m-ary kinh điển đã được thực hiện trong [12] . Chúng ta có thể tính trực tiếp từ các biểu thức 8 .

Các giá trị chính xác của và và được đưa vào trong bảng sau đây cùng với các giá trị tương ứng của 256. 2048.May 3. ngụ ý . 2012 Tuy nhiên. Trong hình sau đây. nó thú vị để lưu ý rằng nếu chúng ta xem xét các giá trị tối ưu và của d (phụ thuộc vào k) với số lượng trung bình của các phép nhân theo yêu cầu của tiêu chuẩn và các phương pháp tái mã hóa m-ary. với k=128. chúng ta lược đồ số lượng trung bình của các phép nhân theo yêu cầu tiêu chuẩn. 9 . tương ứng: Với k lớn. và các phương pháp recode m-ary kinh điển như là một chức năng của hàm d và k. …. được biểu diễn trong [12] là: Cho k lớn.

Một cuộc thảo luận sau sẽ là về sự hữu ích của các kỹ thuật lũy thừa. các thuật toán này có thể khá hữu ích kể từ khi họ nhận ra chính sách tiết kiệm trong số lượng các phép nhân. 2012 Hình cho thấy phương pháp recode m-ary không tốt bằng phương pháp mary đơn giản. Mặc dù nghịch đảo được cung có thể dễ dàng được tính toán bằng cách sử dụng các thuật toán Euclide mở rộng. Các phương pháp recode cho thuật toán mã hóa Các phương pháp recode lũy thừa có lẽ có thể hữu ích nếu cấp mà không có thêm quá nhiều chi phí. chi phí tính toán này đều vượt quá thời gian đạt được bằng cách sử dụng kỹ thuật recode trong lũy thừa.May 3. 4. ngoài trừ 10 . với M cũng như nghịch đảo thì có vài lý do. thời điểm này các kỹ thuật recode không có vẻ là đặc biệt áp dụng đối với các hệ thống mã hóa RSA. Trong một số ngữ cảnh. Như vậy.

mở ra con đường mới trong tính toán modular lũy thừa tăng tốc bằng cách sử dụng các kỹ thuật recode . phương pháp nhị phân tái mã hóa cần 1. Kaliski [18] gần đây đã chỉ ra rằng nếu tính nghịch đảo Montgomery thay vì nghịch đảo. Ngoài ra. cách tiếp cận của Kaliski co thể được sử dụng để tính toánh nghịch đảo nhanh chóng. Như vậy.May 3. 11 . Một thuật toán để tính có thể dễ dàng chuyển thành một thuật toán để tính . 2012 trong trường hợp nhị phân. một trong những phép tính trong đó e là một số nguyên lớn và M là một điểm trên đường cong elliptic.5k phép nhân.33k phép nhân trong khi phương pháp nhị phân không recode cần 1. Ví dụ. nơi mà chúng ta có thể thay thế phép nhân bằng cộng và chia (nhân với nghịch đảo) bằng trừ. tiết kiệm nhất định có thể đạt được bằng cách sử dụng các thuật toán nhị phân right-shifting. Phép toán nhân được xác định bởi một tập luật của đường cong elliptic . Trong bối cảnh này. Mặt khác. 20]. các kỹ thuật recode được chứng minh là hữu ích cho việc tính toán trên đường cong elliptic trên các trường hữu hạn vì trong trường hợp nghịch đảo là không có chi phí bổ sung [33.

Khi tính toán. Vì k thường lớn hơn 256. t là một số gồm 2k-bit. ● Phương pháp Blakey Phương pháp này thực thi phép nhân và tính modulo xen kẽ nhau. sao cho (s-1) < k <= s . R. chúng ta cần xây dựng những cấu trúc dữ liệu có thể giải quyết cho trường hợp lớp những số nguyên lớn này. Phương pháp Montgomery Phương pháp này gồm các bước sắp xếp lại phần dư của phép modulo. Phương phán Nhân và Rút gọn. 3. các giá trị tạm có thể là số lớn hơn s words. Trong phần này này. sau đó sử dụng các phép modulo số học cho lớp số 2j ● . chúng ta cần cài đặt hàm thực thi nhân modular. a. Giả sử kích thước của một word là w (thường là 16 hoặc 32 bits).Chương 3: Nhân Modular (Modular Multiplication) Thuật toán tính lũy thừa modular cần thực hiện bình phương modular và nhân modular tại mỗi bước của thuật toán. và n là các số nguyên k-bit. Trong bước tính modulo. chúng ta sẽ tìm hiểu về các thuật toán để tính: với a. Để tính Me (mod n). và n là các số gồm k-bit. b. ta chỉ quan tâm tới phần dư. chúng ta sẽ chia nhỏ một số kbit thành s-words. nên trong thuật toán chia chúng ta cần phải giảm lược các phép toán tốt nhấ có thể để tăng tốc độ tính toán. chúng ta sẽ xem xét 3 thuật toán/phương pháp để tính biểu thức: R=a ● b (mod n).1 Nhân Modular (Modular Multiplication) Trong chương này. vì vậy chúng ta cũng cần phải xây dựng cấu trúc đủ tốt để có thể lưu trữ được các giá trị tạm này. phương pháp gồm các bước sau ○ Đầu tiên tính giá trị t: t := a b ○ Sau đó giảm dần giá trị t: R := t mod n Ở đây. b.

1 Thuật toán cơ bản ( Standard Multiplication Algorithm) Xem xét 2 số a và b là 2 số gồm s-chữ số (s-words) được biểu diễn dưới dạng cơ số W như sau: ở đây. Dòng cuối cùng thể hiện giá trị của phép nhân. sau đó thực hiện phép cộng. giá trị này gồm 2s-words. ai. Thuật toán thực thi theo các bước cụ thể như sau. t ij = (Carry. Sum) của phép nhân a i * bj. Dưới đây là chi tiết thuật toán nhân cơ bản: . W-1]. bj trong khoang [0.3. tại mỗi bước sẽ thực thi nhân theo từng số bj với các số ai tương ứng. kết quả như ví dụ dưới đây: trong đó.

857 .Sau đây là ví dụ cụ thể thực thi từng bước của thuật toán cơ bản này cho phép nhân: a b = 348 .

Để cài đặt thuật toán này hiệu quả. Thuật toán nhân cơ bản nhìn chung là đơn giản và dễ cài đặt.) 2 số W-bits và 2 phép cộng (+) với các số gồm W-bits.. khi nhân 2 số đủ nhỏ thì cho kết quả gần như tốt bằng các thuật toán tối ưu hơn như Karatsuba. càng hiệu quả thì thuật toán sẽ càng hiệu quả. và S là các số gồm W-bits. giả sử rằng k là lũy . Trong các phần kế tiếp chúng ta sẽ tìm hiểu thêm 2 thuật toán nhân Karatsuba-Ofman và Thuật toán nhân dựa trên FFT.. Đây là 2 thuật toán có độ phức tạp (thời gian/phép toan thực thi) nhỏ hơn nhiều so với thuật toán cơ bản này. 3.3 Karatsuba-ofman Algorithm Tác giả miêu tả thuật toán đệ quy đòi hỏi tính gần đúng ít hơn O(k2) phép tính bit để nhân 2 số k-bit. Vì vậy. Chi tiết của thuật toán Karatsuba-Ofman được tìm thấy trong sách của Knuth [19]. Thuật toán thực thi s2 lần tính toán cho bước này. chúng ta cần xem xét bước 4 (trong thuật toán ở trên): Mỗi biến ti+j. giả sử rằng k là chẵn và 2h=k. tác giả chỉ quan tâm đến tính gần đúng của thuật toán. Thuật toán này được giới thiệu bởi hai nhà toán học Nga là Karatsuba và Ofman vào năm 1962. Phần dưới giải thích ngắn gọn thuật toán này. aj. và s = k/ với là hằng số. C. Đầu tiên. Vì vậy giá trị lớn nhất cho phép toán tính biểu thức ở bước này là một số 2W-bits: Dễ thấy. bước tính toán này là bước tính cơ sở nhất trong toàn thuật toán. vậy thuật toán này có độ phức tạp là O(k2) (theo toán tử trên bit khi nhân 2 số k-bits với nhau). Bước này gồm 1 phép nhân (. nên khi cài đặt bước này càng đơn giản. bi. phân tích a và b thành 2 phần kích thước bằng nhau : Nghĩa là a1 là h bit cao hơn của a và a0 là h bits thấp hơn của a.

b0. Sau đó thuật toán nhân đệ quy chuẩn là ở đây αk là số phép toán bit đòi hỏi để tính toán cộng phép toán cộng và dịch chuyển in thuật toán trên (α là hằng số). a1. tác giả nhận thấy rằng thuật toán nhân đệ quy chuẩn đòi hỏi O(k2) phép toán bit để nhân 2 số k-bit Thuật toán Karatsuba-Ofman dựa trên quan sát dưới đây. Vì vậy. Phép nhân 2 số 2h-bits đòi hỏi nhân bốn số h-bit.thừa của 2. thực tế 3 nhân half-size đủ để thực hiện mục đích này : . Công thức này thực hiện một thuật toán đệ quy mà tác giả gọi là thuật toán nhân đệ quy chuẩn (SRMA) Đặt T(k) là số phép toán bit đòi hỏi nhân 2 số k-bit. Thuật toán này chia phép nhân a và b thành nhân những phần a0. Giải quyết đệ quy này với điều kiện khởi tạo là T(1) = 1. và b1.

Vì vậy. Cách biểu diễn này cũng giống với việc các đa thức được biểu diễn bằng các cơ số.Điều này tạo ra thuật toán nhân đệ quy Karatsuba-Ofman được minh họa dưới đây : Đặt T(k) là số phép toán bit đòi hỏi nhân 2 số k-bit dùng thuật toán KaratsubaOfman. Tuy nhiên. chúng ta giải quyết đệ quy và có được thuật toán Karatsuba-Ofman yêu cầu phép toán bit để nhân 2 số k-bit. thuật toán KaratsubaOfman bắt đầu cho kết quả k gets lớn hơn.4 Thuật toán nhân dựa trên FFT (Fast Fourier Transform) FFT có thể được sử dụng trong phép nhân các số nguyên lớn. Tuy nhiên. Cho ví dụ. 857 = 8x2 + 5x + 7 với x = 10. các số nguyên được biểu diễn bằng các kí hiệu vị trí. Ví dụ 348 = 3x2 + 4x + 8 với x = 10. do bản chất đệ quy của thuật toán này nên có thể bị quá tải. tác giả cũng có tùy chọn dừng ở bất kỳ lúc nào trong quá trình đệ quy. Trong thuật toán nhân chuẩn. thuật toán Karatsuba-Ofman là nhanh hơn một cách tiệm cận so với thuật toán chuẩn đòi hỏi O(k2) phép toán bit. Dùng điều kiện khởi tạo T(1) = 1. có thể áp dụng một mức độ đệ quy và sau đó tính toán 3 phép nhân dùng thuật toán nhân không đệ quy chuẩn 3. Hiện thực hiện nay chỉ ra rằng k = 250 nó bắt đầu nhanh hớn thuật toán nhân không đệ quy chuẩn. Vì lý do này. vì vậy vài khó khăn khi hiện thực có thể xuất hiện. chúng ta có thể nhân các đa thức lại với nhau trước: . Tương tự. Ngoài ra. lưu ý rằng vì a0 + a1 là một số bit lớn hơn. Sau đó Tương tự. Để nhân 348 cho 857. trừ và dịch chuyển đòi hỏi trong thuật toán Karatsuba-Ofman đệ quy. βk đại diện sự đóng góp của phép cộng.

s đơn vị sinh với độ phức tạp tính toán O(s log s). cho trước bậc s – 1. Nói cách đa thức này dưới dạng khác. bước nội suy cũng có độ phức tạp tính toán O(s log s). sau đó lần lượt nhân những giá trị đó với nhau và cuối cùng nội suy để có được các hệ số của đa thức kết quả.(3x2 + 4x + 8)(8x2 + 5x + 7) = 24x4 + 47x3 + 105x2 + 68x + 56 Và sau đó tính toán kết quả của đa thức với x = 10 24(10)4 + 47(10)3 + 105(10)2 + 68(10) + 56 = 298236 Như vậy 348*857 = 298236. t là số nguyên dương và t < n. Nếu chúng ta có thể nhân các đa thức nhanh thì cũng có thể nhân các số nguyên lớn nhanh. ta sử dụng phép biến đổi Fourier rời rạc. Trước hết ta phải xem xét hai khái niệm sau đây: . khi đó được gọi là đơn vị sinh Với là đơn vị sinh nguyên thủy thứ . Thuật toán FFT cho phép tìm một đa thức. ta phải tìm các đa thức dưới dạng các đơn vị sinh. với n là một số nguyên nào đó được gọi là đơn vị sinh. Giả sử A(x) là một đa thức bậc – 1 . . Để nhân hai đa thức. Một đa thức được xác định bởi các hệ số của nó.Đơn vị sinh nguyên thủy thứ n: đối với n là một số nguyên dương. Đầu tiên. Tương tự. với và nguyên thủy thứ n.Đơn vị sinh: một phần tử thuộc trường k bất kỳ có tính chất . thuật toán FFT tính vectơ . thuật toán FFT có thể được sử dụng để tìm với độ phức tạp tính toán O( log ).

b = (bs-1bs-2…b0) được biểu diễn trong cơ số W.…. -1. trong đó . Cho trước là đơn vị sinh nguyên thủy thứ . .….….1. Lấy = 2s sao cho là lũy thừa của 2. Thuật toán FFT tính toán phép nhân số nguyên: Bước 1.…. định nghĩa đa thức A(x) duy nhất. – 1 có thể tìm được bằng cách sử dụng biến đổi Fourier ngược Trong đó và là các nghịch đảo của và và ngược lại.t0) . với i = 0. Với các đa thức a(x) và b(x) Và a = (a s-1as-2…a0). Cho trước những giá trị 1. thuật toán sau tính toán tích t = (tl-1. 1. tl-2…t0). tl-2.Để có được các hệ số của đa thức. Bước 2: Nhân từng điểm ta có được Bước 3: Nội suy bằng cách tìm trên sử dụng FFT Bước 4: trả về các hệ số (tl-1. Những giá trị này cũng thì các hệ số Ai với i = 0.1 bằng FFT. Thuật toán nhân đa thức sử dụng các thủ tục con này. Đi tìm và với i = 0.

Danh sách sau là 10 số nguyên tố lớn nhất có dạng p = 2rs + 1 nhất của chúng. Từ những phần tử nguyên thủy này. Hơn nữa. ví dụ số nguyên tố p sao cho FFT tồn tại đối với phép toán số học modulo p. Ví dụ. 231 – 1 với r > 20 và chính là đơn vị sinh nhỏ Đơn vị sinh nguyên thủy thứ có thể dễ dàng được tính toán từ sử dụng . Thêm vào đó. Bất kì số nguyên tố nào như vậy cũng có thể được sử dụng để tính toán FTT với kích thước 220. FFT ban đầu được phát triển cho trường số phức tuy nhiên có những khó khăn tính toán khi sử dụng số phức trên máy tính. không khó để tìm những số nguyên tố p như vậy. Phương pháp nhân các số nguyên lớn sử dụng FFT trên các trường hữu hạn đã được khám phá bởi Shonhage và Strassen và được mô tả chi tiết bởi Knuth. Ở đây. Pollard chỉ ra và đơn vị sinh nguyên thủy thứ của tất cả các trường có thể sử dụng. Có rất nhiều số nguyên tố Fourier. câu hỏi đặt ra là trường nào được sử dụng. các đơn vị sinh nguyên thủy có thể dễ dàng được tính toán. Các đơn vị sinh nguyên thủy của chúng cũng có thể được tìm thấy trong một lượng thời gian hợp lý. Một phân tích cẩn thận của thuật toán chỉ ra rằng tích của hai số . Vào năm 1971. May mắn thay. Trường được lựa chọn là trường Galois gồm có p phần tử. Điều này dựa trên cơ sở lý thuyết rằng nếu p là số nguyên tố và chia hết cho p – 1 thì thuộc GF(p) và GF(p) có một đơn vị sinh nguyên thủy thứ . tồn tại một thuật toán hiệu quả để xác định những số nguyên tố như vậy dựa vào những phần tử nguyên thủy của chúng. với p là một số nguyên tố và chia hết cho p – 1. có sấp xỉ 180 số nguyên tố p = 2rs + 1 < 231 với r 20. Chúng ta chỉ tập trung vào các trường hữu hạn vì máy tính chỉ có thể thực hiện các phép tính hữu hạn. các phép tính mod p FFT có thể được tính toán dễ dàng.Thuật toán nhân số nguyên ở trên hoạt động đối với một trường bất kỳ trong đó và một đơn vị sinh nguyên thủy thứ tồn tại.

Do đó.aj. Điều này thực hiện được là do tij = ai.1 < 22w+1 -2w+1 < 22w+1 – 1 . Tuy nhiên.1) = 22w+1. Bình phương là một thao tác dể hơn phép nhân thông thường bởi vì phân nữa độ chính xác đơn(single precision)được bỏ qua. ta có thể cải tiến phép nhân thông thường để lấy ưu lợi thế của phép nhân bình phương.1) + (2w .1)(2w .1) + 2(2w .5 Squaring is Easier – Bình phương thì nhanh hơn. thuật toán này không phù hợp lắm với các phép toán RSA. aj = tji. 3. Phép nhân bình phương cơ sở Tuy nhiên.S) được tính bởi thao tác: (C.ai + C ở bước 4 có thể 1 bít dài hơn một số có độ chính xác đơn(single-precision) mà chính nó đòi hỏi w bit. S) := ti+j + 2. chúng tôi nhắc nhở người đọc là cặp carry-sum (C. Bởi vì: (2w .2w+1 Và 22w .nguyên k-bit có thể được tính toán với độ phức tạp O(k log k log log k) phép toán trên bit.

Giải thuật restoring và nonrestoring xử lí theo hai hướng khác nhau khi phần dư là số âm được xác định.Kế tiếp.a) sử dụng thuật toán nhân bên trên.Các bước đơn giản có thể đạt được nhờ sử dụng một trong những giải thuật chia nổi tiếng. chúng ta bỏ qua các bit phát sinh trong thương số của giải thuật.6.Giải pháp này phụ thuộc vào cách sử dụng bit chứa bởi kiến trúc xử lí cụ thể.Do chúng ta không quan tâm tới thương số.rút gọn mudilo trước tiên tính toán kết quả a. ví dụ R0 = t.b(hoặc a.Tuy nhiên. giá trị khởi tạo của R được gán bởi t. 3. Do đó các bước của giải thuật chia có thể được đơn giản hóa để tăng tốc quá trình thực thi. 3. Tiếp theo ta dịch n từ t để có R1. Bởi vì t là số 2k bit trong khi n là số k bit.Quá trình tính toán được thực hiện từ bên trái của t và n. một số chia n.5. Cho một số bị chia t. Giải thuật chia Restoring .6 Computation of the Remainder – Tính toán số dư Thuật toán nhân dựa trên các phép nhân.Vấn đề này tốt nhất là cài đặt một các độc lập và sẽ không được thảo luận tại đây. nếu R1 là số dương hoặc số 0 ta tiếp tục lặp lại.Thuật toán chia liên tục lấy n trừ t cho tới khi phần dư R đạt giá trị nằm trong khoảng 0<R<n. như đã đề cập ở phần 3. việc tính toán từ bên trái nhấn mạnh rằng n được dịch k bít sang trái. Trước tiên nó gồm hai thành phần: thương số và số dư.Các bước nhân được thực hiện ngay sau phép chia để tính toán phần dư. sau khi trừ xong ta nó thể nhận được một số dư là số âm. ví dụ ta bắt đầu với 2kn. Tuy nhiên. Phép chia là phép toán phức tạp nhất trong bốn phép toán cơ bản.Tới khi nó là số âm thì phần dư là số được lưu ở bước trước đó. một thương số Q và một số dư R được tính toán để thỏa: t = Q.1 Giải thuật chia Restoring Đặt Ri là phần dư trong bước thứ i của giải thuật chia. Trong các phần tiếp theo chúng ta mô tả giải thuật chia phục hồi (restoring) và không phục hồi (nonrestoring) trong quá trình tính toán số dư của phép chia t cho n.6.Do đó chúng ta cần sử dụng một bit mở rộng trong suốt quá trình tính toán ở các bước 4.1 chúng ta không quan tâm tới thương số mà chỉ lấy số dư.n + R Nếu t và n dương sẽ kéo theo thương số Q và số dư R dương.Cặp carry-sum cần 2w+1 bits thay vì 2w cho sự hiện diện của nó.

trong đó w có kích thước của kiểu word trên máy tính. ta kiểm tra chúng ta có thể kiểm tra bit trái nhất của phần dư có là 1 hay không. Nếu Ri vẫn còn là số dương. Ví dụ bên dưới minh họa giải thuật chia restoring cho máy tính với số 3019 cho 53. ta không restore nó.phần dư ở bước trước đó được xem như phần dư mới ví dụ như một toán tử phục hồi được thực hiện. ngươc lại nếu chúng bằng 0 ta không cần phải trừ vì lúc này Ri < n. kết quả bằng 51 = (110011)2 Trước khi trừ.Ở bước thứ của giải thuật chúng ta kiểm dấu của phần dư.Nếu nó là số âm. Bằng cách . nếu chúng là 1 ta trừ tiếp. Giải thuật chia restoring thực thi k phép trừ để rút gọn số 2k bit t chia cho số k bit n.Chúng ta dịch n tới khi nó khớp với bit không âm trái nhất của Ri.Do đó nó nhanh hơn so vớ phép chia thông thường đòi hỏi s = k/w phép lặp. với 3019 = (101111001011)2 và 53 = (110101)2 .

6.2 Giải thuật chia nonrestoring Giải thuật chia nonrestoring cho phép số dư là số âm. nó phụ thuộc vào dấu của phần dư là số âm hay dương.n/2 Lúc này nó sẽ có cùng giá trị. 3. Do đó phần còn dư được phép là số âm và ta tiếp tục sử dụng phần bù trong co số 2 để minh họa nó.Trong ví dụ bên dưới ta tính toán 51= 3019 mod 53 dùng giải thuật chia non restoring. Các phép nhân và chia trong thuật toán đảm bảo cùng thao tác trên đơn vị là các bits với nhau. Các bước của giải thuật norestoring được minh họa như bên dưới: Giải thuật chia norestoring Lưu ý rằng giải thuật chia nonrestoring yêu cầu số dư trong chu kì lặp cuối cùng là số âm và được hiệu chỉnh lại bằng cách cộng thêm n ngược vào. Lúc này ta có: Ri+1 = Ri + n/2 = (Ri-1 .n/2 Tuy nhiên nếu Ri = Ri-1 .7 Phương pháp Blakley (Blakley's Method ) Phương pháp Blakey tính trực tiếp giá trị a b mod n bằng cách thực hiện xen kẽ các phép toán nhân (sử dụng dịch bit kết hợp với phép cộng) với phép chia (sử dụng dịch bit kết hợp với phép trừ) trong toàn bộ thuật toán.n < 0. ta có: Ri+1 = Ri . 3.n) + n/2 = Ri-1 .Điều này thực hiện được nhờ quan sát bên dưới: giả sử Ri = Ri-1 .thuật toán restoring sẽ gán R i = Ri-1 và thực thi phép trừ với n đã được dịch phải.này ta có thể bỏ qua một số bước trong giai đoạn trừ/phục hồi. Ri vẫn là số âm và ta cộng n đã dịch phải trong chu kỳ tính toán.n < 0.n/2 = Ri-1 . một phép trừ hoặc một phép cộng được sử dụng trong chu kỳ tính toán.Để hiệu chỉnh lại số dư. . Trung bình k/2 phép trừ được thực thi.

gọi a và b là 2 số gồm k-bits với ai và bj là các bit tương ứng.3. ta chỉ cần thực hiện tối đa 2 phép toán trừ tương ứng như sau: . vậy để đảm bảo 0 <= R <= n-1 trong phép toán R mod n. R <= n-1. phép toán mod thực chất chỉ cần tối đa 2 phép trừ. dễ thấy rằng ta cần 1 phép dịch bit (dịch 1 bit sang trái cho phép nhân 2R). Để chứng minh cho kết luận này ta có thể giả sử 0 <= a.Sau đây chúng ta sẽ cùng phân tích thuật toán Blakley. tại mỗi bước thực hiện sau khi thực hiện phép nhân đều thực thi phép giảm dần (bằng cách thực hiện nhiều phép trừ tương ứng) để đảm bảo phần dư còn lại là luôn nhỏ hơn n. Tại bước 4 (R := R mod n). một phép cộng và một phép nhân cho ak-1-i b (chú ý ak-1-i là 1 bit). Dưới đây là chi tiết thuật toán: Tại bước 3 (R := 2R + ak-1-i b) của thuật toán. phép nhân t = a b có thể được phân tích như sau: Mấu chốt của thuật toán Blakley là dựa vào phân tích trên. khi đó sau khi thực hiện bước 3 ta có: tức là 0 <= R <= 3n . b.

b. mô hình toán học chính của thuật toán. chúng ta định nghĩa phần dư n đối với số r là: nó thực chất là tập các số thỏa: nó cũng chính là lớp số dư đầy đủ gồm các số trong khoảng [0. Với số nguyên a < n. Với sự biến đổi phù hợp. Điều kiện này sẽ luôn thỏa nếu n là một số lẻ. và n là các số gồm k-bits. n) = 1.8 Phương pháp Montgomery (Montgomery's Method) Phương pháp Montgomery là thuật toán hiệu quả cho việc tính giá trị biểu thức trong đó a. Thuật toán này khai thác hiệu quả tính chất của phép nhân trên lớp số dư này để cho tốc độ thực thi nhanh hơn nhiều so với các thuật toán được đề xuất trước đây. Thuật toán này thích hợp và phù hợp khi cài đặt cho hệ thống xử lý tín hiệu số cũng như vi xử lý. Cho số modulo n là một số k-bits với 2k-1 <= n < 2k và r = 2k. else R := 2R ■ tối đa 2 phép trừ cho bước 4 3. Sau đây chúng ta sẽ tìm hiểu chi tiết ý tưởng. cũng như không thực thi bất kỳ tính toán phép chia lấy phần dư với số n do đó nó rất hiệu quả trong thực tế. vì nó dựa trên việc tính toán modulo số học trên số 2k (các phép toán cơ sở nhất trong bộ vi xử lý máy tính). hay nói cách khác gcd(r. thuật toán né tránh được việc thực thi phép chia cho n bằng phép toán chí cho số dạng lũy thừa 2. n-1]. Thuật toán có ràng buộc là 2 số n và r phải là nguyên tố cùng nhau.Kết luận: thuật toán Blakley thực hiện tính biểu thức a b mod n qua k bước. Cho 2 số phần dư n là a và b phép nhân Montgomery được định nghĩa như sau: . được đề xuất bởi Montgomery vào năm 1985. tương ứng tại mỗi bước cần: ■ ■ 1 phép dịch 1 bit qua trái (2R) tối đa 1 phép cộng: if ak-1-i > 0 then R := 2R + b.

ở đây r-1 là nghich đảo của r modulo n. Giá trị R thật ra chính là phần dư n của R trong biểu thức: thực vậy: Để làm rõ tính chất của thuật toán Montgomery. Thuật toán Montgomery (MonPro) tính tóan biểu thức sau: Dưới đây là chi tiết thuật toán: Để tính toán bài toán ban đầu (R = a b mod n) ta sử dụng kết hợp thuật toán ở trên. chúng ta cần tính thêm một số nguyên n' thỏa tính chất sau: Hai số r-1 và n' dễ dàng tính được bằng định lý Euclide mở rộng. cụ thể như sau: .

Ví dụ trong trường hợp này ta cần thực hiện tính lũy thừa modular. Sử dụng một chuỗi các thuật toán đã nêu ở Chương 2. vì: x = MonPro( x .Thuật toán này trả về giá trị x đúng với giá trị R ta cần tìm. 3. . Thuật toán Montgomery rất hiệu quả cho lớp bài toán này. như tính giá trị biểu thức Me mod n. nên cân nhắc khi áp dụng thuật toán này nếu ta biết trước chỉ có một phép nhân modular n trong bài toán lớn. b r-1 r-1 mod n [MonPro] = (a r) (b r) r-1 r-1 mod n = a b mod n =R [Step 2. 3] Ta có thể cải tiến thuật toán tốt hơn như ở dưới.8. 1) [MonPro] [Step 4] [Step 5] = ( x 1 r-1) mod n = MonPro( a . Sau đây là tóm tắt của việc áp dụng hiệu quả hàm thực thi MonPro trong phần trước cho việc tính lũy thừa modular hiệu quả.1 Phương pháp Montgomery tính lũy thừa modular (Montgomery Exponentiation) Thuật toán Montgomery hiệu quả hơn đối với lớp bài toán thực hiện nhân modular cho cùng modulo. chúng ta thay thế việc tính lũy thừa bằng các phép bình phương và nhân modulo n. dựa vào tính chất sau: Do phải tính giá trị n' trước. b ) r-1 mod n = a .

gồm cả việc tính giá trị n' hiệu quả hơn. thuật toán thực thi hàm MonPro với đầu vào là x và 1. Tuy nhiên. chia trên các số lũy thừa 2 nên rất nhanh. Cuối cùng. Chúng ta sẽ mô tả những điều này trong Phần 4. những người đã cài đặt thuật toán này. dễ thấy rằng phép toán này là đúng. ví dụ [10. như tính chất sau: Tốc độ thực thi của thuật toán là khá nhanh như dẫn chứng của nhiều nhà nghiên cứu và kỹ sư. tại Bước 2.2 Lũy thừa Montgomery . các phép tính còn lại chỉ thực thi trên bit. 30].8.2. thuật toán này có thể chỉnh sửa thêm để cho hiệu quả hơn nữa. một khi bước tính toán trước này hoàn thành. 3 cần các phép chia. cũng như thực hiện nhân. 3. Tuy nhiên.Chúng ta bắt đầu với việc tính phần dư n (M) sử dụng phép toán giống phép chia như thực thi các phép dịch bit và trừ tương ứng. Ví dụ. Dussé and Kaliski [10] đã có những cải tiến thuật toán đơn giản hơn.

3) = 8 t = 8*3 = 24 m = 24*11 (mod 16) =8 u = (24 + 8*13) /16 = 126/16 = 8 o Tính MonPro (8.2 Một ví dụ của Lũy thừa Làm thế nào để tính toán x = 710 mod 13 bằng cách sử dụng các thuật toán lũy thừa Montgomery.3.   o  o  o  B1: Khi n = 13. B2: Tính n’ Sử dụng các thuật toán Euclid mở rộng. 3) = 3 t = 3*3 = 9 m = 9*11 (mod 16) =3 u = (9 + 3*13) /16 = 48/16 = 3 o Tính MonPro (8.8. chúng ta có r = 24 = 16> n. 8) = 4 t = 8*8 = 64 m = 6*11 (mod 16) =0 u = (64 + 0*13) /16 = 64/16 = 4 o Tính MonPro (4. chúng ta xác định rằng 16*9-13*11=1 do đó r-1=9 và n’=11 B3: Tính M Khi M=7 ta có M=M * r (mod n) = 7*16 )mod 13) = 8 B4: Cho x=1 tính x Ta có x = x*r (mod n) = 1*16 (mod 13) = 3 B5+6: lặp ModExpL o Tính MonPro (3. 4) = 1 t = 4*4 = 16 m = 16*11 (mod 16) =30 u = (16 + 0*13) /16 = 16/16 = 1 .

Trong trường hợp số nguyên có độ chính xác đơn(singleprecision).Giả sử n được phân tích thành n = q2j với q là số dương lẻ. việc tính toán: x=ae mod n thì được tách thành hai phần tử độc lập như sau: x1=ae mod q x2=ae mod 2 j .Ta có r = 2k bởi vì thao tác trên số dựa vào phép chia nhị phân modulo 2w với w có kích thước là kiểu word trên máy tính. ta có k = w.d) = gdc(2k. Điều này được thực hiện dịch số chẵn n sang bên phải cho tới khi bít ít ảnh hưởng nhất (least-significal) của nó thành 1.Tuy nhiên. 7) = 12 t = 7*7 = 49 m = 49*11 (mod 16) =11 u = (49 + 11*13) /16 = 192/16 = 12  B7: x = MonPro(12. khi gặp số lớn. chúng ta có được x = 4 là kết quả của lũy thừa 710 mod 13.8. 1) = 7 t = 8*1 = 8 m = 8*11 (mod 16) =8 u = (8 + 8*13) /16 = 112/16 = 7 o Tính MonPro (7.3 Trường hợp Mudulus chẵn. Bây giờ ta minh họa một kỹ thuật cơ bản [22]mà chính nó có thể dùng bất cứ khi nào có ai đó muốn tính toán luy thừa modulo với ràng buộc modolu chẵn.Chúng ta không sử dụng giải thuật Montgomery được nếu điều kiện này không được thỏa mãn.o Tính MonPro (8.Sau đó áp dụng định lí về số dư Trung hoa . Do r = 2k. giải thuật lũy thừa modular Montgomery đòi hỏi điều kiện: gdc(r.1) = 4 t =12*1 = 12 m = 12*11 (mod 16) =4 u = (12 + 4*13) /16 = 64/16 = 4 Vì vậy. Do sự hiện diện của r-1 và n’ yêu cầu n và r phải nguyên tố cùng nhau.n) = 1 mà để điều kiện này được thỏa mãn thì n phải là số lẻ. 3.ta chọn k là số nguyên chia hết cho w.

Tuy nhiên có một số thường hợp vượt quá mức bởi vì theo định lý Trung hoa về số dư.4 Ví dụ về Modulus chẵn.Lưu ý là khi rút gọn lần lượt theo thứ tự a và e modulo q và . Những thông tin này thì thừa nhưng nó sẽ làm giảm khối lượng tính toán của hàm ModExp. Trong khi công việc tính toán x2 dể dàng hơn bởi vì nó liên quan tới số modulo 2j. j = 2 Bước 2. Nó được tính toán bằng cách sử dụng giải thuật đơn giản được giới thiệu trong phần 4. Do đó q = 97. Kết quả cuối cùng là khả thi nếu ta biết các thừa số của q. n = 388 = (110000100)2 = (1100001)2x22=972.x1 )q-1 mod 2j Số nghịch đảo q-1 mod 2j tồn tại vì q là số lẻ. Tính ae mod n với a = 375.Dựa vào giải thuật đổi single radix.Ngoài ra công việc tính toán x1 có thể được thưc hiện bằng cách sử dụng giải thuật ModExp vì q là số lẻ.y với y = (x2. hàm ModExp trả về x1=78.97). Tính x1= ae mod q bằng cách gọi ModExp với tham số a = 375 và e =249. Giả sử ta không biết các thừa số của q. Bước 3 . n = 388 được minh họa bên dưới.Cuối cùng kết quả x có giá trị x = x1 mod q x= x2 mod 2j và có thể tìm thấy được dựa theo một trong những giải thuật của số dư Trung hoa: Giải thuật chuyển đổi single radix hay mix radix [49-19-31]. e = 249. còn lại là x1 và x2 modulo q và 2 j tương ứng: x = x1 + q. Bây giờ chúng ta dựa theo giải thuật bên dưới: 3.và q = 97. Tính x2=ae mod 2j bằng cách gọi hàm lũy thừa dựa vào phương pháp nhị phân và số modulo 2j . chúng ta chỉ rút gọn a như sau: a mod q = 375 mod 97 = 84 Sau đó gọi hàm ModExp với các tham số (84.249.8. Bước 1.2. Do q là số lẻ.

y = 78 + 97. Tính toán kết quả trả về x = x1 +q.a mod 2 j=375 mod 4 = 3 e mod = 249 mod 2 = 1 =2j-1 Trong trường hợp này ta có thể bỏ qua số mũ bởi vì Do đó.1. Kết quả trả về x2= 3 Bước 4. Sử dụng giải thuật Euclide mở rộng.1 = 175.4). . tính toán: q-1mod 2 j =97-1 mod 4 = 1 Ta có: y = (x2 – x1).1 mod 4 =1 Bước 5. ta có thể gọi hàm lũy thừa với các tham số (3.q-1mod 2 j =(3-78).

.

Chương 4 – Các cải tiến và vấn đề phân tích hiệu suất
1. Mã hóa nhanh sử dụng định lý số dư Trung Hoa (CRT) Thao tác giải mã RSA và thao tác ký, nghĩa l{ cho trước C, tính có thể thực hiện nhanh hơn bằng cách sử dụng định lý số dư Trung Hoa (Chinese Remainder Theorem - CRT) do người dùng biết được các nhân tử của mô đun n = p.q. Phương ph|p n{y được đề xuất bởi Quisquater và Couvreur [37] dựa trên định lý số dư Trung Hoa (một số lý thuyết kh|c như: phương ph|p nhị phân có từ thời cổ đại). Cho với là các số nguyên, đôi một nguyên tố cùng nhau, nghĩa l{ ( Cho trước sao cho Định lý số dư Trung Hoa cho chúng ta biết việc tính có thể được chia thành hai phần như sau: [ ] với ) với , định lý số dư Trung Hoa ph|t biểu ] trong đó

rằng: tồn tại một số nguyên u duy nhất trong đoạn [

Sau đó gi| trị M cuối cùng được tính (lifted) bằng cách áp dụng thuật toán phần dư Trung Hoa. Có hai thuật toán cho việc tính toán này: thuật toán chuyển đổi cơ số đơn (Single-Radix Conversion - SRC) và thuật toán chuyển đổi cơ số hỗn hợp (MixedRadix Conversion - MRC). Ở đ}y, c|c t|c giả mô tả tóm tắt các thuật toán này (chi tiết có thể xem trong [14, 49, 19, 31]). Trở lại với ví dụ tổng quát, chúng ta thấy rằng thuật toán SRC hoặc MRC tính u với tính u bằng cách sử dụng tổng ∑ Trong đó và cho trước. Thuật toán SRC

là nghịch đảo nhân của

theo modulo

, nghĩa l{

Do đó, |p dụng thuật to|n SRC để giải m~ RSA, trước hết chúng ta tính

Tuy nhiên, áp dụng định lý Fermat cho các số mũ (exponent), chúng ta chỉ cần tính

Trong đó

This provides some savings do dụng tổng

; thực sự, kích thước

bằng

phân nửa kích thước của d. Áp dụng với thuật toán SRC, chúng ta tính M bằng cách sử

Trong đó

. Ta thu được

Để chứng minh điều này, chúng ta thấy một c|ch đơn giản là

Mặt khác, thuật toán MRC tính số u cuối cùng bằng c|ch: trước tiên tính bảng tam giác các giá trị

Trong đó, cột đầu tiên của các giá trị

là các giá trị cho trước của

, nghĩa l{

. Các giá trị trong các cột còn lại được tính toán một cách tuần tự bằng cách sử dụng các giá trị từ cột trước theo công thức đệ qui

( Trong đó là nghịch đảo nhân của

) theo modulo , nghĩa l{

Ví dụ, Trong đó

được tính như sau là nghịch đảo của theo modulo . Giá trị u cuối cùng được tính

bằng cách sử dụng tổng mà không yêu cầu rút gọn modulo P cuối cùng. Áp dụng thuật to|n MRC để giải m~ RSA, trước tiên chúng ta tính

Trong đó và bao gồm

giống như trên. Bảng tam giác trong trường hợp này khá nhỏ

Trong đó

Vì vậy, M được tính bằng cách sử dụng [ Biểu thức n{y l{ đúng, do ]

Thuật toán MRC có nhiều ưu điểm hơn thuật toán SRC vì hai lý do:  Đòi hỏi một phép tính khả nghịch duy nhất:  Không yêu cầu rút gọn modulo n cuối cùng. Giá trị khả nghịch có thể được tính to|n trước v{ lưu lại. Ở đ}y,

chúng ta chú ý đến thứ tự của p và q trong phép tính tổng trong chuẩn mật mã khóa công khai (PKCS) l{ ngược với ký hiệu của các tác giả. Cấu trúc dữ liệu [43] lưu trữ các giá trị khóa bí mật của người dùng có các biến: exponent1 INTEGER, -- d mod (p-1)

(inverse of q) mod p Do đó. Do đó. c|c t|c giả kết luận rằng thuật toán dựa trên CRT sẽ xấp xỉ nhanh hơn gấp 4 lần. bây giờ chúng ta sử dụng thuật toán MRC để tính tổng số thao tác bit được tính to|n trước và thuật toán tính lũy thừa được áp dụng ở đ}y l{ phương ph|p nhị phân.exponent2 INTEGER. Cải tiến phương pháp Montgomery Phương ph|p Montgomery sử dụng thuật to|n nh}n Montgomery để tính các phép nhân và c|c bình phương được yêu cầu trong suốt qu| trình tính lũy thừa. ⁄ -bit. thuật toán không áp dụng định lý số dư Trung Hoa sẽ tính một cách trực tiếp. chúng ta tính số phép  Tính M: một phép trừ cộng k-bit. Giả sử nh}n được yêu cầu như sau  Tính  Tính : : ⁄ ⁄ phép nhân phép nhân ⁄ -bit ⁄ -bit ⁄ -bit. -. Giả sử p và q là các số nhị phân cho quá trình giải mã RSA. có tính chất . 2. d là một số nguyên k-bit và lớn như n. Bằng cách đảo ngược p. chúng ta có như được yêu cầu. sử dụng [ Phép tính tổng n{y cũng đúng. Cho ] và được định nghĩa như ở trên.d mod (q-1) coefficient INTEGER. hai phép nhân ⁄ -bit và một phép Cũng giả sử là các phép nhân có bậc tổng số thao t|c bit như sau ⁄ ⁄ ⁄ và các phép trừ có bậc k. sử dụng n{y đòi hỏi ⁄ phép nhân k-bit. do thay vì . Một hạn chế của thuật toán là nó yêu cầu tính . xét c|c số hạng có bậc cao hơn. số phép nhân ⁄ thao t|c bit. chúng ta tính Mặt khác. q và trong phép tính tổng. -.

Sau đó. chúng ta có thể dùng thuật to|n bình phương trong phần 5 của có chương 3. thủ tục nhân hoàn tất công việc của nó bằng cách tính một chuỗi các thao tác tích trong (inner-product). Trước tiên chúng ta có chuẩn và cuối cùng chia nó cho thấp hơn của u). Giá trị kết quả thu được là số nguyên xen. Ví dụ. Ký hiệu thông qua các số nguyên theo cơ số diễn theo cơ số W của chúng. Trong phần này. Khi đó. phép nhân ̅ và ̅ trong Bước 1 được thực hiện bằng cách sử dụng Khi ̅ ̅ . Do by word). Giả sử. C|c tính to|n m v{ u trong Bước 2 và 3 của thủ tục MonPro được đan vào. Phép nhân các số nhiều độ chính x|c n{y được thực hiện bằng cách chia nhỏ chúng thành các từ (words) như được thấy trong phần 2 của chương 3. sau đó cộng thêm độ chính xác 2s. chúng ta có là kích thước từ (wordsize) của máy tính. các tác giả cho bên trong thủ tục MonPro. các số n{y đòi hỏi s từ trong biểu . c|c số lớn này có thể được biểu diễn . sử dụng thủ tục nhân bằng cách dùng toán tử shift (hoặc bỏ qua các bit v{ qu| trình đan xen xử lý theo từng từ (word thay vì . chúng ta có thể sử dụng .Trong đó và số n k-bit l{ mô đun của RSA. Các tác giả lặp lại thủ tục thấy làm thế n{o để tăng tốc độ tính toán tiên của các tác giả là không cần tính toàn bộ giá trị function MonPro( ̅ ̅ ) Bước 1: Bước 2: Bước 3: Bước 4: Nếu Ngược lại return ⁄ thì return – ̅ ̅ MonPro từ phần 8 của chương 3 để giải thích cho quan sát này. Quan s|t đầu . Thuật toán này sẽ tiết kiệm được khoảng 50% thời gian tính toán trong Bước 1 của thủ tục MonPro. Quan s|t n{y được thực .

chúng ta có một thủ tục MonPro đơn giản hơn nhiều bằng cách không tính toàn bộ và chỉ sử dụng phép nhân với độ chính x|c đơn để nhân t và . Do đó. Giá trị m sau đó được sử dụng trong bước tính tích trong. C|c bước 13. Sau Bước 16. nếu u lớn hơn n. chúng ta có một ví dụ trong đó c|c tính to|n được thực hiện trong thủ tục . Gi| trị kết quả u sau đó được so sánh với n. các tác giả tiến hành với mã giả bên dưới để cập nhật t nhằm tính Trong Bước 9. Tuy nhiên. trước khi đưa ra thuật toán. các tác giả chia t cho r. Bên dưới. các tác giả nhân với theo modulo để tính m. Chúng ta không cần c|c bước này trong phép nhân ̅ và ̅ (C|c bước từ 1 đến 6) do giá trị khởi tạo của t l{ 0. c|c t|c giả trừ u cho n và trả về kết quả. Trong Bước 16. Do đó. sau khi t được tính bởi phép phân ̅ và ̅ sử dụng mã giả bên trên. chiều dài của biến t trở thành . C|c bước của thủ tục MonPro n{y được thấy như sau Do đó. nghĩa l{ một c|ch đơn giản là bỏ qua phân nửa các giá trị thấp hơn t. chúng ta sẽ có một thuật toán hiệu quả để tính . các tác giả lưu thao t|c được thực hiện cuối cùng trong Bước 14. 14 và 15 are needed to take of the carry propagating từ cuối cùng của t.hiện bởi Dusse v{ Kaliski [10] v{ được sử dụng trong c{i đặt RSA trên Motorola DSP 56000.

Trong ví dụ này. nghĩa l{ t = 000 000 Sau đó. chúng ta thực hiện Bước 7 đến Bước 16 để tính dùng giá trị Bước 16 được trình b{y bên dưới bằng cách . Giá trị khởi tạo của t là 0. bằng 248 do Bước đầu tiên của thuật toán là tính tích 216.MonPro được tóm tắt. chúng ta sẽ dùng số học thập ph}n để đơn giản cho việc minh họa.123. được thực hiện trong các Bước từ 1 đến 6. Chúng ta sẽ tính tích Montgomery của 216 và 123. Bước 7 đến . Dễ thấy rằng nghịch đảo của r là V{ cũng thấy rằng V{ do đó . Giá trị khởi tạo của t = 026 586 có được từ bước trước. Cho n = 311 và r = 1000.

. Như c|c t|c giả đ~ đưa ra trước đó. Do đó. Do trong ví dụ của các tác giả 248 < 311. thu được giá trị u là 248. Việc tính toán có thể được thực hiện bằng thuật và toán Euclidean thay vì thuật toán Euclidean mở rộng. Do Chúng ta lấy modulo Hoặc nói cách khác Trong đó và tương ứng là các từ có giá trị nhỏ nhất (least significant và . Sau đó. Để tính với x là một số lẻ. 123) trả về giá trị 248 l{ đúng. chúng ta chia t cho r bằng cách shift sang phải s từ. phép trừ được thực hiện để kiểm tra nếu thủ tục MonPro(126. kết quả của words) (các bit w có giá trị nhỏ nhất) của sử dụng thuật to|n bên dưới để tính .Sau Bước 15. chúng ta cả hai vế v{ thu được thì được trả về như giá trị tích cuối cùng. có một thuật toán hiệu quả để tính toán số nguyên với độ chính x|c đơn.

C|c bước của thuật toán. các tác giả đưa ra c|c ph}n tích về mặt thời gian với các thao tác mã hóa và giải m~ RSA. Phân tích này dựa trên các giả thiết như sau Các vấn đề về thuật toán: . tại mỗi bước i. w = 6. do như bên dưới 3. chúng ta có Thuật toán này rất hiệu quả. Như một ví dụ. Phân tích hiệu suất Trong phần này. Thật ra đ}y l{ một giá trị đúng. các giá trị tạm và phần tử khả nghịch kết quả (final) được thấy bên dưới Do đó. C|c ph}n tích n{y được sử dụng để ước lượng hiệu suất của các thao tác mã hóa và giải mã RSA trên một hệ thống m|y tính cho trước. Ở đ}y chúng ta có x = 23.Tính đúng của thuật to|n có được từ quan sát: tại mỗi bước i. chúng ta tính dùng thuật toán bên trên. sử dụng các phép nhân và phép cộng với độ chính x|c đơn để tính . chúng ta có . chúng ta tính Ngoài ra.

các tác giả phân tích từng thao tác mã hóa và giải mã RSA dựa trên các giả thiết cho trước. Mặt khác. 2. Kích thước của d là 7. Do đó. Phép toán tích trong yêu cầu 2A + P chu kỳ Trong các phần sau. Sau đó tiếp tục tính ̅ và ̅ . Trọng số Hamming của d bằng với Các giá trị được tính toán trước 1. Phép cộng hai số nguyên với độ chính x|c đơn yêu cầu A chu kỳ (cycles) 3. 3. Thuật to|n lũy thừa l{ phương ph|p nhị phân. Việc tính . Các số mũ bí mật 2. Trọng số Hamming của e bằng với 6. Kích thước e là bit . Kích thước từ của máy tính là w bit. Kích thước p và q là ⁄ từ 3. Kích thước M và C là s từ 4. 3. các thao tác này cùng yêu cầu . yêu cầu và hoặc được tính to|n trước và có thể sử dụng được tính to|n trước và có thể sử dụng toán ̅ yêu cầu sw phép trừ với độ chính xác s. Kích thước n là s từ 2. Thuật toán rút gọn Montgomery được sử dụng cho các thao tác nhân modulo. Hệ số Nền tảng máy tính 1. Các cải tiến trên phương ph|p Montgomery được đưa v{o phép tính.1. Phép nhân hai số nguyên với độ chính x|c đơn yêu cầu P chu kỳ 4. Kích thước dữ liệu: 1. trong đó bit 5. việc tính toán ̅ có thể yêu cầu hơn w phép trừ với độ chính x|c s.1 Mã hóa RSA Thao tác mã hóa sử dụng phép nhân Montgomery trước tiên tính ∑ chu kỳ. trong đó . 2.

Bước này yêu cầu tổng cộng chu kỳ. thủ tục tính bình phương Montgomery yêu cầu tổng cộng chu kỳ. số chu kỳ yêu cầu được tính bởi ̅ và . Sau đó. Do đó. phương cho lần số chu kỳ được yêu cầu bởi bởi và phương trình lần số chu kỳ . Thao tác trừ với độ chính xác s thực hiện trong c|c bước 18 – 21 yêu cầu tổng của s phép trừ có độ chính x|c đơn. c|c bước từ 7 đến 15 yêu cầu ∑[ ∑ ∑ ] thao t|c bình phương thao tác nhân Montgomery. Thuật to|n tính lũy thừa yêu cầu Montgomery và tiên tính tích ̅ ̅ . Tổng số chu kỳ được đòi hỏi bởi thao t|c m~ hóa RSA sau đó được xác định bằng cách cộng thêm số chu kỳ để tính ∑ phương trình thao t|c tính bình cho bởi phương trình ̅ cho bởi .chu kỳ. chúng ta tính tổng số chu kỳ được yêu cầu bởi thủ tục tính phép nhân Montgomery như sau Thủ tục tính bình phương Montgomery dùng thuật to|n bình phương tối ưu trong phần 5 của chương 3 để tính ̅ ̅. Thao tác nhân Montgomery trước chu kỳ. Do đó. tích này yêu cầu ∑∑ chu kỳ. c|c bước từ 7 đến 22 yêu cầu tổng cộng Do đó. Phần còn lại của thuật toán tính bình phương Montgomery giống như thuật toán tính phép nhân Montgomery.

được yêu cầu bởi thao tác tính tích Montgomery cho bởi phương trình . . Tổng số chu kỳ được xác định [ [ 3. Giả sử số từ như sau dùng để biểu diễn p là ⁄ . tính và yêu cầu ) tương ứng l{ kích thước bit và trọng số Hamming của . +.3 Giải mã RSA với CRT Thao tác giải mã RSA sử dụng định lý số dư Trung Hoa trước tiên tính sử dụng ] ] và Tính tương đương với mã hóa RSA với số mũ v{ mô đun p. tổng số chu kỳ yêu cầu bởi thao tác giải mã RSA giống như * * .2 Giải mã RSA không sử dụng CRT ] ] Thao tác giải mã RSA không sử dụng định lý số dư Trung Hoa không quan tâm các số hạng của mô đun người dùng như thao t|c m~ hóa RSA. ngoại trừ và phương + và trình được thay thế tương ứng với [ [ 3. chúng ta tìm số chu kỳ yêu cầu để tính ( Trong đó Tương tự. Do đó.

và ⁄ ⁄ . hai phép nh}n có độ chính xác s và một phép cộng có độ chính xác s. Khi đó. chúng ta sẽ xem xét 3 trường hợp để đơn giản vấn đề phân tích hiệu suất của các thao tác mã hóa và giải mã RSA. Trường hợp n{y tương đương với trường hợp giải mã RSA không sử dụng CRT (tương đương về số chu kỳ yêu cầu để thực hiện thao tác). Tổng số chu kỳ được tính như sau [ ] [ ] [ ] Giải mã RSA với CRT: Số bit và các trọng số ⁄ chúng ta có ⁄ và ⁄ giả sử được cho trước là ⁄ .( ) chu kỳ. Mã hóa RSA với số mũ nhỏ: Chúng ta sẽ lấy số mũ công khai và . ) ) ( ) ( ) ) có thể sử dụng. Do đó. chúng ta tính tổng số chu kỳ được yêu cầu bởi thao tác giải mã RSA với CRT như sau Mã hóa RSA với số mũ lớn: Chúng ta giả sử rằng số mũ công khai chính x|c có k bit (nghĩa l{ số bit trong n) và trọng số Hamming của số mũ công khai bằng ⁄ . Do và . . Tổng số chu kỳ sẽ là [ ] [ ] . Cách tính này yêu cầu tổng cộng ( chu kỳ với giả thiết là hệ số ( ( 3. Do đó.4 Phân tích đơn giản Trong phần này. thuật toán chuyển đổi cơ số hỗn hợp (MRC) tính M bằng cách dùng Cách tính này yêu cầu một phép trừ có độ chính xác ⁄ . Vì vậy.

Trong phần này. các giá trị w. Tuy nhiên. Xét đến số lần đọc và ghi.( 3. số chu kỳ yêu cầu là một hàm của s (chiều dài từ của mô đun). các tác giả áp dụng các phân tích bên trên cho bộ xử lý tín hiệu Analog Devices Signial Processor ADSP 2105. Các biểu thức đã đơn giản hóa cho cho bên dưới và được Sử dụng thời gian chu kỳ xung đồng hồ (clock cycle time) của ADSP 2105 là 100ns. 384. mã hóa Các thử nghiệm của tác giả với bộ mô phỏng ADSP chấp nhận các giá trị được ước lượng n{y. Bảng bên dưới mô tả tóm tắt thời gian (tính bằng miligiây) xử lý của thao tác mã hóa RSA với số mũ nhỏ RSA với số mũ lớn và giải mã RSA với CRT .5 Ví dụ ) ( ) Khi triển khai c{i đặt trên máy tính. Do đó. chúng ta có A = 3 và P = 3. các tác giả lập bảng thời gian mã hóa và giải mã với các giá trị k = 128. lưu ý l{ c|c gi| trị của P và A phải được x|c định một cách . …. các tác giả đ~ x|c định rằng bộ xử lý tín hiệu ADSP 2105 thực hiện thao tác cộng hoặc nhân hai số với độ chính x|c đơn trong một chu kỳ đồng hồ duy nhất. 24. Bộ xử lý tín hiệu này có đường dẫn dữ liệu (data path) w = 16 bit và thực thi với tốc độ xung đồng hồ là 10 MHz. 16. P và A là cố định. 64. Hơn nữa khi kiểm tra các chỉ thị toán học. 256. … 1024 tương ứng với các giá trị s = 8.

thận trọng để có thể tin cậy trong việc ước lượng thời gian xử lý các thao tác mã hóa và giải mã RSA. .