Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

Phương pháp số mũ lớn

GIỚI THỆU:
Trong các bài toán mã hoá công khai, chúng ta sử dụng nhiều phép toán lũy thừa
với số mũ lớn, ví dụ như RSA, khi cả công việc mã hóa và giải mã đểu liên quan
đến việc xử lý lũy thừa rất lớn theo modulo. Việc đơn thuần tính lũy thừa đó rất
tốn thời gian và tài nguyên của máy tính vì giá trị rất lớn.

Sau đây, bọn em sẽ trình bày một số thuật toán, định lý để đơn giản hóa quá trình
này.

THUẬT TOÁN & ỨNG DỤNG:


Thuật toán bình phương và nhân liên tiếp:
Ví dụ: tính 3200 mod 50

Nếu tính trực tiếp giá trị 3200 rồi mới mod 50 có thể gây lỗi tràn bộ nhớ trên máy
tính vì giá trị khá lớn, một số ngôn ngữ lập trình sẽ bắt phải sử dụng thư viện khác
lớn hơn. Như vậy cần có thuật toán nhanh hiệu quả đối với phép toán này. Nhớ lại
công thức của số học mô đun:

[ ( a mod n ) × ( b mod n ) ] mod n= ( a ×b ) mod n

Như vậy, chúng ta có thể rút gọn các kết quả trung gian theo modulo n. Điều này
làm cho việc tính toán trở nên đơn giản hơn rất nhiều.

Cụ thể ở thuật toán này, ta muốn tìm giá trị của ab với a, b là số nguyên dương.
Nếu ta phân tích số mũ b dưới dạng nhị phân: b k , b k−1 , … b0 , ta có thể viết b dưới
dạng:
Ta có:

Quay lại ví dụ trên, số mũ 200 d=11001000=27 +26 +23


7 6 3 7 6 3
200 2 +2 +2 2 2 2
3 =3 =3 . 3 . 3

mod 50=( 3 . 3 .3 ) mod 5=[ ( 3 mod 50 ) . ( 3 mod 50 ) . ( 3 mod 50 ) ] mod50


7 6 3 7 6 3
200 2 2 2 2 2 2
3
i

Ta tính các giá trị 32 (mod 50)với i chạy từ 1 đến 7:

Với i = 0, 31 mod 50 = 3

Với i = 1, 32 mod 50 = 9

Với i = 2, 34 mod 50 = (32)2 mod 50 = 92 mod 50 = 31

Với i = 3, 38 mod 50 = (34)2 mod 50 = 312 mod 50 = 11

Tiếp tục tính, ta có bảng:

i 0 1 2 3 4 5 6 7
i
1 2 4 8 16 32 64 128
32 3 3 3 3 3 3 3 3
i
2
3 (mod 50) 3 9 31 11 21 41 31 11

Từ đó:
[( 3 mod 50 ) . ( 3 2 mod 50 ) . ( 3 2 mod 50 ) ] mod 50¿ ( 11.31.11 ) mod 50=3751mod 50=1
7 6 3
2

Vậy, 3200 mod 50=1

Định lý Fermat nhỏ:


Định lý nhỏ của Fermat khẳng định nếu p là một số nguyên tố, thì với số nguyên a
bất kỳ, ap – a sẽ chia hết cho p:
p
a ≡ a(mod p)

Một cách phát biểu khác: nếu p là số nguyên tố và a là số nguyên không chia hết
cho p, thì ap-1 – 1 sẽ chia hết cho p:

a p−1 ≡1( mod p)

Cũng có 1 cách phát biểu khác là: Nếu p là một số nguyên tố và a là số nguyên
không chia hết cho p. thì ap-1 – 1 sẽ chia hết cho p.

Ví dụ: Tính 2831821 mod 241

Ta thấy 241 là số nguyên tố và 283 không chia hết cho 241, áp dụng đinh lý
Fermat:
a p−1 ≡1( mod p)

240
¿>283 mod 241=1

Tiếp theo, biểu diễn 1821 = 240 * 7 + 141.

mod 241=( 283 ) mod 241=283141 mod 241


1821 240∗7 +141
¿>283

Quy về bài toán bình phương liên tiếp, ta tính được 283141 mod 241=168
1821
Vậy 283 mod 241=168

Ứng dụng:
Kết quả trên được dùng trong mã khoá công khai. Nó cũng được sử dụng để kiểm
tra tính nguyên tố của một số nguyên p nào đó, bằng cách lấy ngẫu nhiên các số a
và kiểm tra xem có tính chất nêu trên không, kết luận là p nguyên tố càng thuyết
phục nếu phép thử trên đúng với nhiều lần chọn ngẫu nhiên các số a.

Định lý Euler:
Định lý Euler phát biểu nếu n là số nguyên dương bất kỳ và a là số nguyên tố cùng
nhau với n thì:

a φ ( n) ≡ 1(mod n)

Hay có thể hiểu:

a φ ( n) mod n=1

Trong đó, φ ( n ) là ký hiệu của hàm phi Euler.

Hàm phi Euler:


Hàm số Euler của một số nguyên dương n được định nghĩa là số các số
nguyên dương nhỏ hơn hoặc bằng n, nguyên tố cùng nhau với n.

Ví dụ:

φ ( 10 ) =4 vìcó 4 giá trị 1, 3 , 7 , 9 nguyên tố cùng nhau với 10.

Một số tính chất của hàm φ ( n ) :

1. φ ( 1 )=1.
2. φ ( p )= p−1 nếu p là số nguyên tố .
3. φ ( p e ) =p e −p e−1 nếu p là số nguyên tố .
4. φ ( m ×n ) =φ ( m ) × φ ( n ) nếu m và n nguyên tố cùng nhau .
5. φ ( m ×n ) =( m−1 ) × ( n−1 ) nếu m và n là 2 số nguyêntố khác nhau .
Ví dụ: Tính 2831821 mod 242

Ta nhận thấy 242 không phải số nguyên tố, vì vậy không áp dụng được định lý
Fermat. Ta sử dụng định lý Euler.

Trước hết, tách số modulo 242 dưới dạng thừa số nguyên tố: 242 = 2 * 112

Vì 2 và 112 = 121 nguyên tố cùng nhau, áp dụng tính chất của hàm phi euler
φ ( m ×n ) =φ ( m ) × φ ( n ) :

φ ( 242 )=φ ( 2× 11 )=φ ( 2 ) × φ(11 )


2 2

Vì 2 là số nguyên tố, áp dụng tính chất của hàm phi Euler φ ( p )= p−1 :

φ ( 2 )=1

Vì 11 là số nguyên tố, áp dụng tính chất của hàm phi Euler: φ ( p e ) =p e −p e−1:
φ ( 11 ) =11 −11 =110
2 2 2−1

Từ đó, ta có:

φ ( 242 )=φ ( 2 ) × φ ( 112 )=110

Ta có 283, 242 là hai số nguyên tố cùng nhau vì có ước chung lớn nhất bằng 1, áp
dụng định lý Euler:

a φ ( n) mod n=1

¿>283 φ ( 242 ) mod 242=283 110 mod 242=1

Biểu diễn 18211 qua giá trị hàm phi của 242 (tức 110): 1821 = 110*16 + 61
1821 110× 16+61 61
283 mod 242=283 mod 242=283 mod 242

Quy về bài toán bình phương liên tiếp, ta tính được 28361 mod 242=19
1821
Vậy , 283 mod 242=19

Ứng dụng: Định lý Euler cũng là định lý cơ bản của các hệ thống mã hóa RSA
MÔ PHỎNG:

THAM KHẢO:
http://eldata11.topica.edu.vn/HocLieu/v1.0/IT201/Giao%20trinh/
05.%20IT201_Bai%203_v1.0011103219.pdf

3-Cryptography-and-Network-Security-Principles-and-Practice_-5th-Edition.pdf

https://www.youtube.com/watch?
v=t0jZDNKuUWs&list=PL1MYBVskDVJXW6D9mwvaX37nNbeGVfAbP

https://vi.wikipedia.org/wiki/Định_lý_Euler

https://en.wikipedia.org/wiki/Euler%27s_totient_function

https://vi.wikipedia.org/wiki/Định_lý_nhỏ_Fermat

You might also like