Các phương trình đồng dư tuyến tính

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, so sánh và đánh giá độ an toàn của hệ mật mã rabin và RSA (Trang 28)

1.4.4.1. Định nghĩa

Phương trình đồng dư tuyến tính là phương trình có dạng:

a.xb mod n (*)

Trong đó a, b là những số nguyên (a ≠ 0) được gọi là tham số của phương

trình, còn n ≥ 2 là modulo.

1.4.4.2. Cách giải.

- Định lý: Cho d = (a, n). Khi đó,

+ Nếu d là ước của b thì phương trình (*) có đúng d nghiệm nằm trong khoảng (0, n) là: xj= (b/d) x* + j (n/d) mod n j = 0, 1, …, d-1.

Trong đó, x* = (a/d)-1 mod (n/d)

+ Nếu d không là ước của b (b không chia hết cho d) thì phương trình nói trên vô nghiệm.

1.4.5. Các hệ phương trình đồng dư tuyến tính 1.4.5.1. Định nghĩa

Một hệ r phương trình đồng dư tuyến tính là một hệ phương trình có dạng:

xxi (mod di) , i = 1, 2, …, r (**)

Trong đó xi, i = 1, 2, 3, … , r là các số nguyên lớn hơn 1 và nguyên tố cùng nhau từng đôi một, tức là (di, dj) = 1 với mọi i j.

1.4.5.2. Cách giải

Ta áp dụng định lý đồng dư Trung hoa. Cụ thể:

- Định lý (CRT): Cho d1, … , dr là các số nguyên di ≥ 2 , i = 1, 𝑟̅̅̅̅ sao cho (di, dj) = 1 , ij. Khi đó hệ phương trình (**) có nghiệm duy nhất là:

x = ∑𝑟𝑖=1(n/di ) yi.xi(mod n). Trong đó, yi= (n/di)-1 mod di, n = d1.d2….dr. 1.4.5.3. Ví dụ Cho hệ: {𝑥 ≡ 2 mod 7 𝑥 ≡ 3 mod 8 (1) Ta có (7, 8) = 1. Do đó áp dụng định lý CRT, ta có hệ phương trình (1) có nghiệm duy nhất là: x = (n/d1) y1x1 +(n/d2)y2 x2 mod n

Vì 7.8/7 = 8 Do đó, y1 = (7*8/7)-1 mod 7 = 8-1 mod 7 = 1-1 mod 7 = 1

y2 = (7.8/8)-1 mod 7 = 7-1 mod 7 = 7

Vậy x = 8.1.2+ 7.7.3 mod 56 = 16 + 147 mod 56 = 51 mod 56 = 51.

Thử lại, rõ ràng là 51 ≡ 2 mod 7 và 51 ≡ 3 mod 8 Kết luận: x = 51 là nghiệm của hệ (1)

1.4.6. Thuật toán tính yn mod N

Input: Cho y, n, N nguyên dương, N ≥ 2.

Output: b = yn mod N

Bước 2: Đặt d = 1 nếu a chẵn và d = 0 nếu a lẻ; đặt a = [a/2] (phần nguyên của số a/2).

Bước 3: Nếu d = 1 đến bước 6

Bước 4: Tính b = b.c mod N;

Bước 5: Nếu a = 0 thì thuật toán dừng và b là đáp số. Bước 6: Tính c = c.c mod N và chuyển đến bước 2.

1.4.7. Thặng dư bậc 2

- Định nghĩa 1: Giả sử cho a và n sao cho (a, n) = 1 (a và n nguyên tố cùng

nhau). Phần tử a được gọi là thặng dư bậc 2 theo mod n nếu và chỉ nếu tồn tại x

nguyên sao cho:

x2 ≡ a mod n (1)

Nếu số a không thỏa mãn (1) thì nó được gọi là không thặng dư bậc 2 modn

Ta ký hiệu: Tập tất cả các số nguyên a là thặng dư bậc 2 mod n là Qn và tập tất cả các số không thặng dư bậc 2 mod n là 𝑄̅n

Ta có các định lý sau đây:

- Định lý 1: Cho p là một số nguyên tố lẻ và a thỏa mãn điều kiện (a, p) =

1. Khi đó, phương trình : x2 ≡ a mod p (2)

Có ít nhất 2 nghiệm khác nhau, nếu a∈Qpvà vô nghiệm nếu a ∈̅ Qp(tức là a ∈ 𝑄̅p)

- Định lý 2: Với giả thiết trong định lý 1. Khi đó a∈Qp

#Qp = #𝑄̅p = 𝑝−1

Trong đó, ≠A là lực lượng của A

- Định lý 3: Với giả thiết trong định lý 1. Khi đó

a(p-1)/2 ≡ { 1 mod 𝑝 nếu a ∈ 𝑄𝑝 −1 mod 𝑝 nếu a ∈ 𝑄̅𝑝

- Định nghĩa 2: Cho a ∈Qn. Nếu tồn tại x sao cho (x, n) = 1 và x2 ≡ a mod

n thì x được gọi là căn bậc 2 của số a theo modulon.

- Định lý 4: Cho n = p.q, trong đó p, q là 2 số nguyên tố lẻ khác nhau. Khi đó a thỏa mãn điều kiện (a, n) = 1 là thặng dư bậc 2 theo modulon nếu và chỉ nếu a ∈ Qp và a ∈ Qq.

- Định nghĩa 3: Số nguyên Blum là một hợp số dạng n = p.q trong đó p, q

là 2 số nguyên tố lẻ, khác nhau và thỏa mãn: p≡ 3 mod 4 và q≡ 3 mod 4 (3).

- Định lý 5: Cho n = p.q là một số nguyên Blum và a ∈ Qn. Khi đó a có đúng

4 căn bậc 2 và có đúng một trong chúng thuộc Qn.

- Định nghĩa 4: Với giả thiết của định lý 5. Căn bậc 2 duy nhất của a thuộc

Qn được gọi là căn bậc 2 chính tắc của a theo mod n.

1.4.8. Các ký hiệu Legendre và Jacobi 1.4.8.1. Định nghĩa, tính chất

Để tìm căn bậc 2 theo định nghĩa 2 ở (1.4.7), trước hết chúng ta phải xác

định xem một số a có thuộc Qn hay không. Nhưng để xem a ∈ Qn hay a ∈ Q̅n ta

phải sử dụng đến các ký hiệu Legendre và Jacobi. Trước hết ta có định nghĩa: - Định nghĩa 5: Cho p là một số nguyên tố lẻ và a là một số nguyên. Kí hiệu

Legendre (𝑎

𝑎 𝑝 = {

0 nếu a chia hết cho p 1 nếu a ∈ 𝑄𝑝 −1 nếu a ∈ Q̅p

Từ định nghĩa 5, ta có các tính chất cơ bản sau:

- Tính chất 1: Cho p là một số nguyên tố lẻ, a, b ∈ Z – các số nguyên. Khi

đó: (𝑎 𝑝) ≡ a(p-1)/2 mod p Đặc biệt; (1 𝑝) = 1 và (−1 𝑝) = (-1)(p-1)/2 = { 1 khi 𝑝 ≡ 1 mod 4 −1 khi 𝑝 ≡ 3 mod 4 - Tính chất 2: (𝑎𝑏 𝑝) = (𝑎 𝑝) (𝑏 𝑝) Do đó nếu (a, p) = 1 thì (a2/p) = 1 - Tính chất 3: Nếu ab mod p thì (𝑞 𝑝) = (𝑏 𝑝) - Tính chất 4: (2 𝑝) = (−1) Đặc biệt (2 𝑝) = { 1 nếu 𝑝 ≡ 1; 7 mod 8 −1 nếu 𝑝 ≡ 3; 5 mod 8 - Tính chất 5: Nếu q là một số nguyên tố lẻ và khác p thì (𝑝 𝑞) = -1(p-1)(q-1)/4 ( 𝑞 𝑝)

Trong các kí hiệu Legendre, ta chỉ giả thiết p là số nguyên tố lẻ. Trong thực hành, ta gặp phải trường hợp n là một hợp số lẻ tùy ý. Do đó, ta mở rộng sang ký hiệu Jacobi. Trước hết, ta có định nghĩa sau:

- Định nghĩa 6: Giả sử n là một số lẻ được phân tích thành:

N = 𝑝1𝑐1. 𝑝2𝑐2. 𝑝3𝑐3… . 𝑝𝑘𝑐𝑘

Ta định nghĩa ký hiệu Jacobi bởi hệ:

(𝑎 𝑛 ) = (𝑎 𝑝1)𝑐1(𝑎 𝑝2)𝑐2(𝑎 𝑝3)𝑐3… . . (𝑎 𝑝𝑘)𝑐𝑘 Trong đó, Pi là những số nguyên tố lẻ ( i = 1, 2, …, k), ci≥ 1

Rõ ràng nếu n là một số nguyên tố, thì ký hiệu Jacobi trùng với kí hiệu Legendre.

Các tính chất của ký hiệu Jacobi.

-Tính chất 1: Với n là hợp số lẻ, a số nguyên. Khi đó, (𝑎

𝑛) ∈ {0, −1, 1} và (𝑎 𝑛) = 0 khi và chỉ khi (𝑎 𝑛) ≠ 1. -Tính chất 2: (𝑎𝑏 𝑛 ) = (𝑎 𝑛) (𝑏 𝑛)

Vì vậy, nếu (a, n) = 1 thì, (𝑎2

𝑛) = 1

-Tính chất 3: Cho m, n là 2 số nguyên lẻ, a là 1 số nguyên. Khi đó: ( 𝑎 𝑚. 𝑛) = ( 𝑎 𝑚) . ( 𝑎 𝑛)

- Tính chất 4: Nếu a ≡ b mod n với n là số nguyên lẻ thì (𝑎 𝑚) = (𝑏 𝑛) -Tính chất 5: (1 𝑛) = 1 với mọi n lẻ. -Tính chất 6: (−1 𝑛) = (−1)𝑛−12 - Tính chất 7: (2 𝑛) = (−1) (𝑛2)−1 8 -Tính chất 8: Nếu m, n là số tự nhiên lẻ thì : (𝑚 𝑛) = (−1)(𝑚−1)(𝑛−1)4 (𝑛 𝑚)

1.4.8.2. Thuật toán tính ký hiệu Jacobi và kí hiệu Legendre

Input: số tự nhiên n lẻ (n ≥ 3) và số nguyên 0 ≤ an. Output: Kí hiệu Jacobi (𝑎

𝑛) (nếu n là số nguyên tố thì đây là kí hiệu Legendre)

1. s=1; j=1

2. Trong khi a ≠ 0 và a ≠ 1

2.1. Biểu diễn a = 2s .ai (a lẻ); 2.2. Nếu e chẵn thì s = 1

Nếu e lẻ thì {s = 1 nếu n ≡ 1 hoặc 7 (mod 8) và s = -1 nếu n ≡ 3 hoặc 5 (mod 8)}

2.3. Nếu aj = 1 thì Return (Sj)

2.5. j = k.s.j 2.6. n1 = n mod ai 2.7. a = ni ; n = ai 3. Nếu a = 0 thì Return (0) 4. Nếu a = 1 thì Return (j) - Ví dụ: Tính ký hiệu Jacobi (158 235) Có a = 158, n = 235, ta có: (158 235) = ( 2 235) (79 235) = (−1) (79 235) (Vì 235 ≡ 3 mod 8) =− (235 79) (−1)234.784 = (77 79) (Vì 235 ≡ 77 mod 79) = (79 77) (−1)76.784 =( 2 77) = -1 (Vì 77 ≡ 5 mod 8 )

Có thể dùng kết quả này để kiểm tra thuật toán vừa nếu trên.

CHƯƠNG 2: HỆ MẬT MÃ RABIN VÀ HỆ MẬT MÃ RSA 2.1. Các thuật toán liên quan đến mã hóa, giải mã.

2.1.1. Thuật toán tính căn bậc 2 mod p với p (p ≥ 3) là số nguyên tố lẻ

- Input: số nguyên tố lẻ p ≥ 3 và số nguyên a ∈ {1, 2, … , p-1}

- Output: Hai căn bậc 2 của a theo mod p, nếu a là thặng dư bậc 2 theo modulo p.

- Định lý (Tiêu chuẩn Euler): a là thăng dư bậc 2 theo modulo p (với p là số nguyên tố lẻ, p ≥ 3) ⟺ a(p-1)/2 ≡ 1 mod p

- Bây giờ ta trình bày các bước của thuật toán:

Bước 1: Tính ký hiệu Legendre (𝑎

𝑝 ); Nếu (𝑎

𝑝 ) = -1 thì thuật toán dừng

và a không có căn bậc 2 theo modulo p.

Bước 2: Chọn số nguyên b ∈ {1, 2, … , p-1} sao cho thỏa mãn (𝑏

𝑝) = −1

Bước 3: Chia liên tiếp cho 2 để có p -1 = 2st, t là số lẻ, s ≥ 1. Bước 4: Tính a-1 mod p (áp dụng thuật toán Euclide mở rộng) Bước 5: Đặt c = bt mod pr = a(t + 1)/2 mod p

Bước 6: Với i = 1, đến s – 1, thực hiện. - Tính d = (r2a-1)hmod p, với h = 2s-i-1

- Nếu d≡ -1 mod p thì đặt r = r.c mod p

- Đặt c = c2mod p.

Bước 7: Return (r, -r mod p) và Terminates algorithm.

2.1.2. Thuật toán tím căn bậc 2 mod p khi số nguyên tố p có dạng:p≡3mod 4

- Input: Số nguyên tố p thỏa mãn: p≡ 3 mod 4 và a ∈ Qp

- Output: 2 căn bậc 2 của a mod p

Bước 1: Tính r = a(p-1)/4 mod p

2.1.3. Thuật toán tím căn bậc 2 mod p khi số nguyên tố p có dạng: p ≡ 5 mod 8

- Input: số nguyên tố p, dạng p ≡ 5 mod 8 và a ∈ Qp

- Output: 2 căn bậc 2 của a mod p

Bước 1: Tính r = a(p-1)/4 mod p

Bước 2: Nếu d = 1 thì tính r = a(p+3)/8 mod p và đến bước 4 Bước 3: Nếu d = p - 1 thì tính r = 2a (4a (p-5)/8) mod p Bước 4: Return (r, -r mod p)

2.1.4. Thuật toán xét trường hợp n là hợp số lẻ

- Input: Hợp số n, các ước nguyên tố p, q của n và a ∈ Qn

- Output: 4 căn bậc 2 của a mod n

Bước 1: Tìm r là một căn bậc 2 của a mod p (thuật toán được trình bày ở

2.9.1)

Bước 2: Tìm s là một căn bậc 2 của a mod q (thuật toán được trình bày ở

2.9.1)

Bước 3: Giải 4 hệ phương trình đồng dư tuyến tính sau đây:

(I) { 𝑥 ≡ 𝑟 𝑚𝑜𝑑 𝑝 𝑥 ≡ 𝑠 𝑚𝑜𝑑 𝑞 (𝐼𝐼) { 𝑥 ≡ −𝑟 𝑚𝑜𝑑 𝑝 𝑥 ≡ 𝑠 𝑚𝑜𝑑 𝑞 (𝐼𝐼𝐼) { 𝑥 ≡ 𝑟 𝑚𝑜𝑑 𝑝 𝑥 ≡ −𝑠 𝑚𝑜𝑑 𝑞 (IV) { 𝑥 ≡ −𝑟 𝑚𝑜𝑑 𝑝 𝑥 ≡ −𝑠 𝑚𝑜𝑑 𝑞

2.2. Mật mã RSA

Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn.

Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983 (Số đăng ký 4,405,829). Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy nhiên, do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ. Ngoài ra, nếu như công trình của Clifford Cocks đã được công bố trước đó thì bằng sáng chế RSA đã không thể được đăng ký.

Thuật toán dựa trên độ khó của bài toán phân tích một số thành nhân tử.

2.2.1. Mô tả hệ mật mã RSA

- Tạo khóa: Giả sử A và B cần trao đổi thông tin bí mật thông qua một kênh không an toàn. Với thuật toán RSA, A đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:

+ Lấy 2 số nguyên tố p, q khác nhau và đủ lớn. Sau đó đặt n = p.q , ϕ(n) = (p-1)(q-1)

+ Lấy e sao cho: (e, ϕ(n)) = 1 với 1< e < ϕ(n) + Rồi tính: d = e-1 mod ϕ(𝑛)

Hay nói cách khác: tìm số x thỏa mãn: d = 𝑥.ϕ(𝑛)+1 𝑒 Bây giờ, hệ mật mã RSA, lấy:

𝒫 = 𝒞 = Zn= {0, 1, … , 𝑛 − 1} ; 𝒦 = { (n, d, e) : de-1 mod ϕ(n)} Trong đó cặp (n, e) là công khai, còn khóa bí mật là (n, d)

A gửi khóa công khai cho B, và giữ bí mật khóa cá nhân của mình. Ở đây, p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính d khi biết e. Nếu không sử dụng dạng sau của khóa bí mật thì p và q sẽ được xóa ngay sau khi thực hiện xong quá trình tạo khóa.

- Mã hóa: Giả sử m là một thông báo, m ∈ Zn , (e, n) là khóa công khai và

tính:

cmemod n ; c∈ 𝒞 , chính là bản mã ứng với bản thông báo m.

- Giải mã: Giả sử cho trước bản mã c với khóa riêng của người nhận B nào đó sẽ được tính: m = cdmod n - Ví dụ: Chọn p = 23, q = 41 là 2 số nguyên tố Có n = 23.41= 943; ϕ(𝑛) = 22.40 = 880 Chọn e = 7 (ƯCLN (7,880) =1) Có d = 𝑥.ϕ(𝑛)+1 𝑒 => 7d= 1 +880.x

Vậy d =503, x =4 (Theo thuật toán Euclide mở rộng)

A nhận khóa công khai là: n= 943 , e = 7 Giả sử thông tin cần gửi đi là m = 35

c = 357 mod 943 = 545

Vậy giải mã m = 545503 mod 943 => m= 35.

2.2.2. Nguyên lý hoạt động

Giả sử B có cặp khóa công khai (n, e) được công khai hóa trên danh bạ hoặc trên nơi công cộng và cặp khóa riêng (n, d) được giữ bí mật tuyệt đối.

Bây giờ giả sử thực thể A muốn gửi một thông điệp bí mật m cho B. Khi đó, A lấy khóa công khai của B là (n, e) rồi tính: c = memod n

Và gửi bản mã c cho B

Sau khi nhận được bản mã c từ A, người nhận B lấy khóa bí mật của mình là (n, d) và tính: m = cd mod n

2.2.3. Cơ sở khoa học của thuật toán giải mã

Ta có: cd mod n = med mod n Do: e.d ≡ 1 mod ϕ(𝑛)

Ta suy ra: e.d= 1+ Kϕ(𝑛) , k=1, 2, ……..

Từ đó:med mod n = 𝑚𝐾.ϕ(𝑛)+1 mod n = m. 𝑚𝐾.ϕ(𝑛)mod n = m mod n = m

Vậy có cdmod n = m .Đó là điều cần chứng minh.

2.2.4. Một số chú ý quan trọng về RSA

- Tốc độ: RSA có tốc độ thực hiện chậm hơn đáng kể so với các thuật toán mã hóa đối xứng. Trên thực tế, B sử dụng một thuật toán mã hóa đối xứng nào đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để giải mã (thông thường khóa ngắn hơn nhiều so với văn bản). Phương thức này cũng tạo ra những

vấn đề an ninh mới. Một ví dụ là cần phải tạo ra khóa đối xứng thật sự ngẫu nhiên. Nếu không, kẻ tấn công sẽ bỏ qua RSA và tập trung vào việc đoán khóa đối xứng. - Chiều dài khóa: Số n cần phải có kích thước không nhỏ hơn 512 bít. Năm 2006 hệ mật RSA được cho là hiệu quả với kích thước n phải từ 1024. Và họ khuyến cáo là tương lai thì chiều dài n phải từ 2024 bít.

- Chọn tham số công khai: Để nâng cao tốc độ mã hóa, thì chúng ta nên

chọn e với giá trị không lớn, thường là 3, 7. Các số này khi biểu diễn ở dạng nhị phân chỉ có 2 chữ số 1, nên khi thực hiện lệnh lũy thừa sẽ giảm đi lệnh nhân.

- Chọn tham số mật: p và q còn cần được chọn không quá gần nhau để phòng

trường hợp phân tích n bằng phương pháp phân tích Fermat. Ngoài ra, nếu p-1

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, so sánh và đánh giá độ an toàn của hệ mật mã rabin và RSA (Trang 28)

Tải bản đầy đủ (PDF)

(67 trang)