Tải bản đầy đủ
1 Cơ sở toán học

1 Cơ sở toán học

Tải bản đầy đủ

5

a
528
234
60
54
€6

b
234
60
54
6
0

r
60
54
6
0

Kết luận gcd (528, 234) = 6.
Ta biết rằng nếu gcd (a,b) = d, thì phương trình bất định: a*x + b*y = d
có nghiệm nguyên (x,y), và một nghiệm nguyên (x,y) như vậy có thể tìm được bởi
thuật toán Euclide mở rộng như sau:
Thuật toán Euclide mở rộng:
INPUT: Hai số nguyên không âm a và b với a = b.
OUTPUT: d = gcd (a,b) và hai số x,y sao cho a*x + b*y = d.
1. Nếu b = 0 thì đặt d ← a , x ←1, y ← 0, và cho ra (d, x, y).
2. Đặt x2 = 1, x1 = 0 , y2 = 0 , y1 = 1.
3. Trong khi còn b > 0, thực hiện:
3.1. q←a div b, r ← a mod b , x ← x2 - q*x1 , y ← y2 - q*y1.
3.2. a ←b, b ←r , x2 ← x1 , x1← x , y2← y1 và y1←y.
4. Đặt d ← a, x←x2 , y← y2 , và cho ra kết quả (d, x, y).
Ví dụ: Dùng thuật toán Euclide mở rộng tính gcd (528, 234)
Ta có bảng mô phỏng sau:
a
528
234
60
54
6

b
q
r
x
y
x1
y2
y1
y2
234
0
1
1
0
60
2
60
1
-2
1
0
-2
1
54
3
54
-3
7
-3
1
7
-2
6
1
6
4
-9
4
-3
-9
7
0
9
0
-39
88
-39
4
88
-9
Ta có thể kiểm chứng lại rằng sau mỗi lần thực hiện chu trình gồm hai lệnh

3.1 và 3.2, các giá trị x, y, r thu được luôn thoả mãn 532*x + 234*y = r.
Khi kết thúc các vòng lặp (ứng với giá trị b = 0), thực hiện tiếp lệnh 4 ta
được kết quả d = 6, x = 4 và y = -9, cặp số (4, -9) thoả mãn: 528*4 + 234*(-9) = 6.
1.1.2 Số nguyên tố
Số nguyên tố là số tự nhiên lớn hơn 1 và chỉ có hai ước là 1 và chính nó.

6

Số nguyên tố có vai trò và ý nghĩa to lớn trong số học và lý thuyết mật mã.
Bài toán kiểm tra tính nguyên tố của một số nguyên dương n và phân tích số n
thành thừa số nguyên tố là các bài toán rất được quan tâm. “Phương pháp kiểm tra
tính nguyên tố” Phương pháp ‘cổ điển’ và phương pháp ‘xác suất’.
1.1.3 Quan hệ đồng dư [3,4]
Cho các số nguyên a, b, m (n > 0). Ta nói rằng a và b “đồng dư” với nhau
theo modulo m, nếu chia a và b cho m nhận được cùng một số dư (hoặc a – b chia
hết cho m). Ký hiệu: a ≡ b (mod m).
Ví dụ:
23 ≡ 11 (mod 4) vì chia 23 và 11 cho 4, được cùng số dư là 3.
Phương trình đồng dư tuyến tính
Phương trình đồng dư tuyến tính có dạng: a*x = b (mod m )

(1)

Trong đó a, b, n là các số nguyên, m > 0, x là ẩn số. Phương trình (1) có nghiệm khi
và chỉ khi d = gcd (a,m ) / b, và khi đó nó có đúng d nghiệm theo modulo m.
Bây giờ ta xét hệ thống các phương trình đồng dư tuyến tính.

x ≡ a1 ( mod m1 )
x ≡ a ( mod m )

2
2

...

x ≡ an ( mod mn )
Ta ký hiệu: m = m1*m2*...*mk , Mi = m / mi . Ta có định lý sau đây:
Định lý Số dư Trung Hoa
Định lý số dư Trung Hoa là tên gọi do người phương Tây đặt cho định lý này.
Người Trung Hoa gọi nó là bài toán Hàn Tín điểm binh. Sử ký Tư Mã Thiên viết
rằng khi Hàn Tín điểm quân số, ông cho quân lính xếp hàng 3, hàng 5, hàng 7 rồi
báo cáo số dư. Từ đó ông tính chính xác quân số đến từng người.
Định lý: Giả sử n > 1 là số nguyên dương và m1, m2, ..., mn là n số nguyên lớn
hơn 1 đôi một nguyên tố cùng nhau. Đặt M = m 1*m2*...*mn. Cho trước các số
nguyên a1, a2, ..., an khi đó tồn tại duy nhất một số nguyên x (0≤xphương trình đồng dư sau đây:

7

x ≡ a1 ( mod m1 )
x ≡ a ( mod m )

2
2

...

x ≡ an ( mod mn )
Bản chất của bài toán Hàn Tín điểm binh là việc giải hệ phương trình đồng dư
bậc nhất:

x ≡ a1 ( mod m1 )
x ≡ a ( mod m )

2
2

...

x ≡ an ( mod mn )
Hệ phương trình đồng dư nói trên có nghiệm duy nhất theo modun
M = m1*m2*...*mk, trong đó m1, m2, ..., mn đôi một nguyên tố cùng nhau. Trong bài
toán Hàn Tín n = 3 và m1 = 3, m2 = 5, m3 = 7.
Ta xét phương trình đồng dư bậc hai có dạng đơn giản sau:
x2 ≡ a (mod m)
Trong đó m là một số nguyên dương, a là số nguyên với gcd (a,m) =1, và x
là ẩn số. Phương trình đó không phải bao giờ cũng có nghiệm, khi nó có nghiệm thì
ta nói a là một thặng dư bậc hai mod m:
Bây giờ ta xét việc giải phương trình đồng dư bậc hai: x 2 ≡ a (mod m) (2)
trong một trường hợp đặc biệt khi m = p là số nguyên tố có dạng p = 4*n +3, tức p
đồng dư với 3 theo mod 4, và a là một số nguyên nguyên tố với p. Theo tiêu chuẩn
Euler ta biết phương trình (2) có nghiệm khi và chỉ khi a(p-1)/2 ≡ 1 (mod p). Khi đó ta
có:
a(p-1)/2 ≡ a (mod p)
a2(n+1) ≡ a (mod p)
Do đó x = ±an +1 (mod p) là hai nghiệm của phương trình

(2)

8

1.2 Hệ mã hóa
1.2.1 Khái niệm hệ mã hóa dữ liệu
Mã hoá dữ liệu là mã hóa với mục đích làm cho dữ liệu không thể đọc được
bởi bất cứ ai, ngoại trừ những ai được phép đọc. Mã hóa sử dụng thuật toán và
khóa để biến đổi dữ liệu từ hình thức đơn giản rõ ràng (plain hay cleartext) sang
hình thức mật mã vô nghĩa (code hay ciphertext). Chỉ có những ai có thông tin giải
mã thì mới giải mã và đọc được dữ liệu.
1.2.2 Phân loại hệ mã hóa [4]
1.2.2.1 Hệ mã hóa khóa đối xứng
Hệ mã hoá khóa đối xứng là Hệ mã hóa mà biết được khóa mã hoá thì có thể
“dễ” tính được khóa giải mã và ngược lại.
Trong hệ thống mã hoá đối xứng, trước khi truyền dữ liệu, 2 bên gửi và nhận
phải thoả thuận về khoá dùng chung cho quá trình mã hoá và giải mã. Sau đó, bên
gửi sẽ mã hoá bản rõ (Plaintext) bằng cách sử dụng khoá bí mật này và gửi thông
điệp đã mã hoá cho bên nhận. Bên nhận sau khi nhận được thông điệp đã mã hoá sẽ
sử dụng chính khoá bí mật mà hai bên thoả thuận để giải mã và lấy lại bản rõ
(Plaintext).

Gửi

Nhận

Hình 1.1 Quá trình thực hiện cơ chế mã hóa
Mã hoá đối xứng có thể được phân thành hai loại:


Loại thứ nhất tác động trên bản rõ theo từng nhóm bits. Từng nhóm bits này

được gọi với một cái tên khác là khối (Block) và thuật toán được áp dụng gọi là mã

9

hoá khối (Block Cipher). Theo đó, từng khối dữ liệu trong văn bản ban đầu được
thay thế bằng một khối dữ liệu khác có cùng độ dài. Đối với các thuật toán ngày nay
thì kích thước chung của một khối là 64 bits.
• Loại thứ hai tác động lên bản rõ theo từng bit một. Các thuật toán áp dụng
được gọi là mã hoá dòng (Stream Cipher). Dữ liệu của văn bản được mã hoá từng
bit một. Các thuật toán mã hoá dòng này có tốc độ nhanh hơn các thuật toán mã hoá
khối và nó thường được áp dụng khi lượng dữ liệu cần mã hoá chưa biết trước.
Một số thuật toán nổi tiếng trong mã hoá đối xứng là: DES, Triple DES
(3DES), RC4, AES… [1,2]


DES: viết tắt của Data Encryption Standard. Với DES, bản rõ (Plaintext)

được mã hoá theo từng khối 64 bits và sử dụng một khoá là 64 bits, nhưng thực tế
thì chỉ có 56 bits là thực sự được dùng để tạo khoá, 8 bits còn lại dùng để kiểm tra
tính chẵn, lẻ. DES là một thuật toán được sử dụng rộng rãi nhất trên thế giới. Hiện
tại DES không còn được đánh giá cao do kích thước của khoá quá nhỏ 56 bits, và dễ
dàng bị phá vỡ.


Triple DES (3DES): 3DES cải thiện độ mạnh của DES bằng việc sử dụng

một quá trình mã hoá và giải mã sử dụng 3 khoá. Khối 64-bits của bản rõ đầu tiên
sẽ được mã hoá sử dụng khoá thứ nhất. Sau đó, dữ liệu bị mã hóa được giải mã
bằng việc sử dụng một khoá thứ hai. Cuối cùng, sử dụng khoá thứ ba và kết quả của
quá trình mã hoá trên để mã hoá.
C = EK3(DK2(EK1(P)))
P = DK1(EK2(DK3(C)))


AES: Viết tắt của Advanced Encryption Standard, được sử dụng để thay thế

cho DES. Nó hỗ trợ độ dài của khoá từ 128 bits cho đến 256 bits.
Do đó hệ mã hoá khoá đối xứng có ưu điểm và nhược điểm sau:
a. Ưu điểm
Giải mã và mã hoá “nhanh” hơn hệ mã hoá khoá công khai
b. Nhược điểm
Hệ mã hoá khoá đối xứng “không an toàn” so với hệ mã hoá khoá công
khai bởi lý do sau:

10



Người mã hoá và người giải mã phải có “chung” một khoá. Khóa phải được

giữ bí mật tuyệt đối, vì biết khoá này “dễ” xác định được khoá kia và ngược lại.
• Vấn đề thỏa thuận khoá và quản lý khóa chung là khó khăn và phức tạp. Người
gửi và người nhận phải luôn thống nhất với nhau về khoá. Việc thay đổi khoá là rất
khó và dễ bị lộ. Khóa chung phải được gửi cho nhau trên kênh an toàn.
1.2.2.2 Hệ mã hóa khóa công khai
Hệ mã hoá khoá công khai là hệ mã hoá có khoá lập mã và khoá giải mã
khác nhau, biết được khoá này “khó” tính được khoá kia.
Hệ mã hoá này được gọi là hệ mã hoá khoá công khai vì khoá lập mã được
công khai (gọi là khoá công khai – Public key), Khoá giải mã giữ bí mật (gọi là
khoá riêng – Private key). Điều quan trọng đối với hệ thống là không thể tìm ra
khóa bí mật nếu chỉ biết khóa công khai.

Nhận khóa công
khai

Gửi

Nhận khóa riêng

Nhận

Hình 1.2 Quá trình thực hiện mã hóa khóa công khai
Quá trình truyền và sử dụng mã hoá khoá công khai được thực hiện như sau:
Bên gửi yêu cầu cung cấp hoặc tự tìm khoá công khai của bên nhận trên một
server chịu trách nhiệm quản lý khoá.
Sau đó hai bên thống nhất thuật toán dùng để mã hoá dữ liệu, bên gửi sử
dụng khoá công khai của bên nhận cùng với thuật toán đã thống nhất để mã hoá
thông tin được gửi đi
Khi nhận được thông tin đã mã hoá, bên nhận sử dụng khoá bí mật của mình
để giải mã và lấy ra thông tin ban đầu.

11

Vậy là với sự ra đời của Mã hoá công khai thì khoá được quản lý một cách
linh hoạt và hiệu quả hơn. Người sử dụng chỉ cần bảo vệ khoá bí mật.
Một số hệ mã hóa khóa công khai phổ biến như RSA, Rabin, Elgaml, ...
Do đó hệ mã hoá khoá công khai có ưu điểm và nhược điểm sau:
a. Ưu điểm
Đơn giản trong việc lưu chuyển khóa: Chỉ cần đăng ký một khóa công khai
và mọi người sẽ lấy khóa này về để trao đổi thông tin với người đăng ký. Vì vậy
không cần kênh bí mật để truyền khóa.
Mỗi người chỉ cần một cặp khóa công khai – khóa bí mật là có thể trao đổi
thông tin với tất cả mọi người. Là tiền đề cho sự ra đời của chữ ký điện tử và các
phương pháp chứng thực điện tử.
b. Nhược điểm
Mã hóa và giải mã chậm hơn hệ mã hóa khóa đối xứng.
1.2.2.3 Hệ mã hóa khối (Modern Block Ciphers)
Trong mã hóa khối hiện đại, một trong những thuật toán được sử dụng rộng
rãi nhằm cung cấp các dịch vụ bảo mật hay xác thực.
Tiến trình mã hóa khối truyền thông điệp đến các khối, mỗi khối sẽ thực hiện
En/Decrypted sau khi nhận thông điệp. Như mã hóa thay thế, nó sử dụng một block
rất lớn 64 bit hay hơn.
Tiến trình mã hóa dòng truyền thông điệp thành dòng từng bit hay byte ở
một thời điểm khi En/Decryting.
Hiện có rất nhiều thuật toán mã hóa khối được sử dụng như DES, MD4,
MD5, SH1, SH2...
a. Ưu điểm
Chỉ cần biết một cặp khối bản rõ và bản mã người ta có thể dễ dàng suy ra
được khóa và dùng khóa để giải các khối bản mã khác.

12

b. Nhược điểm
Khi kích thước khối lớn thì số dòng của bảng khóa cũng lớn và gây trở ngại
cho việc lưu trữ cũng như trao đổi khóa giữa người gửi và nhận.
1.3 Một số hệ mã hóa khóa công khai
1.3.1 Hệ mã hóa khóa công khai RABIN

Sơ đồ
Hệ mã hóa là bộ gồm 5 thành phần: {P, C, K, E, D}, trong đó:
+ P (Plaintext): là tập hữu hạn các bản rõ có thể.
+ C (CipherText): là tập hữu hạn các bản mã có thể.
+ K (Key): là tập hữu hạn các khóa có thể.
+ E (Encyption): là tập hợp các hàm mã hóa có thể.
+ D (Decyption): là tập các hàm giải mã có thể.
Với mỗi k ∈ K, ta định nghĩa ek: P → C; dk: C → P là hai hàm cho bởi:

∀x ∈ P : y = ek(x); ∀y ∈ C : dk(y) = x. (vì: dk(ek(x)) = x).
 Tạo khóa
Hệ mã hóa là bộ gồm 5 thành phần {P, C, K, E, D}, trong đó:
+ P = C = Zn, trong đó n là một số nguyên Blum, tính n = p*q;
+ Chọn khóa công khai là n và b (0 ≤ b ≤ n-1); chọn khóa bí mật là p và q;
+ Chọn p và q là hai số nguyên tố lớn khác nhau có tính chất sau: p ≡ 3 (mod 4);
q ≡ (3mod 4) (tức là: p = 3 + 4*t, q = 3 + 4*m).
 Mã hóa
Với bản rõ x ∈ P, định nghĩa bản mã là: y = ek (x) = x* (x + b) (mod n).
 Giải mã
Với bản mã y ∈ C, bản rõ là: x = dk (y) =

b2 b
y+

(mod n).
4 2

+ Đặt z = x + b/2, ta có:
z2 = x 2 + b2/4 + 2x * b/2 = x2 + b2/4 + x*b = b2/4 + x*(x + b) (mod n).
Tức là z 2 = b2/4 + y (mod n).
+ Đặt T = b 2/4 + y, ta có phương trình z 2 ≡ T (mod n), n = p*q
Phương trình (1) tương đương với hệ phương trình (2):

(1)

13

z 2 ≡ T (mod p)
 2
z ≡ T (mod q)

(2)

+ Vì p, q là các số nguyên tố, nên ta có: T(p -1)/2 ≡ 1 (mod p), T(q -1)/2 ≡ 1 (mod q).
+ Nhân 2 vế với T ta được: T(p +1)/2 ≡ T (mod p), T(q +1)/2 ≡ T (mod q) hay ta có:

( ± T (p+1)/4 )2 ≡ T mod p

(p+1)/4 2
) ≡ T mod q
( ± T

(3)

+ Từ (2), (3) ta có hệ phương trình:

( ± T (p+1)/4 )2 ≡ z 2

(p+1)/4 2
) ≡ z2
( ± T

(4)

+ Hệ phương trình (2) và do phương trình (1) có 4 nghiệm theo mod n nên tương
ứng với 4 hệ phương trình sau:
(p +1) / 4
mod p
z ≡ T

(q +1) / 4
mod q
z ≡ T

(p +1) / 4
mod p
z ≡ T

(q +1) / 4
mod q
z ≡ −T

z ≡ −T (p +1) / 4 mod p

(q +1) / 4
mod q
z ≡ T

z ≡ − T (p +1) / 4 mod p

(q +1) / 4
mod q
z ≡ − T

Việc chọn giá trị nào trong 4 giá trị tìm được làm bản rõ là tùy thuộc vào những đặc
trưng khác của bản rõ mà người giải mã nhận biết.
1.3.2 Hệ mã hóa khóa công khai ELGAMAL

Sơ đồ
Hệ mã hóa là bộ gồm 5 thành phần: {P, C, K, E, D}, trong đó:
+ P (Plaintext): là tập hữu hạn các bản rõ có thể.
+ C (CipherText): là tập hữu hạn các bản mã có thể.
+ K (Key): là tập hữu hạn các khóa có thể.
+ E (Encyption): là tập hợp các hàm mã hóa có thể.
+ D (Decyption): là tập các hàm giải mã có thể.
Với mỗi k ∈ K, ta định nghĩa ek: P → C; dk: C → P là hai hàm cho bởi:

∀x ∈ P : y = ek(x); ∀y ∈ C : dk(y) = x. (vì: dk(ek(x)) = x).
*Tạo cặp khóa (bí mật, công khai) (a, h) :