Tải bản đầy đủ (.pdf) (66 trang)

Thuật toán RSA và ứng dụng chữ ký điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.27 MB, 66 trang )

MỤC LỤC
LỜI NÓI ĐẦU .............................................................................................. 3

CHƯƠNG 1. CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ........ 4
1.1. ĐỒNG DƯ VÀ SỐ HỌC MODULO ...................................................................4
1.2. HÀM Φ – EULER (EULER’S TOTIENT FUNCTION).......................................6
1.3. TÌM PHẦN TỬ NGHỊCH ĐẢO ..........................................................................7
1.4. THUẬT TOÁN LŨY THỪA NHANH................................................................8

CHƯƠNG 2. TỔNG QUAN VỀ MÃ HÓA............................................. 9
2.1. GIỚI THIỆU CHUNG VỀ MÃ HÓA...................................................................9
2.1.1. Mục tiêu của an toàn bảo mật thông tin ......................................................10
2.1.2. Khái niệm hệ mật mã .................................................................................11
2.1.3. Mã hoá và giải mã......................................................................................11
2.1.4. Quy trình mã hoá và giải mã dữ liệu...........................................................12
2.1.5. Thuật toán mã hóa đối xứng (Symmetric Algorithms) ................................12
2.1.6. Thuật toán mã hóa phi đối xứng (Puclic-key-Algorithms) ..........................14
2.1.7. Thám mã (Cryptanalyis).............................................................................15
2.2. MẬT MÃ CỔ ĐIỂN..........................................................................................18
2.2.1 Mã dịch vòng ..............................................................................................18
2.2.1.1. Mô tả...................................................................................................18
2.2.1.2. Đánh giá độ an toàn...........................................................................19
2.2.2. Mã thay thế ................................................................................................19
2.2.2.1. Mô tả...................................................................................................19
2.2.2.2. Đánh giá độ an toàn............................................................................20
2.2.3. Mã Affine ..................................................................................................20
2.2.3.1. Mô tả...................................................................................................20
2.2.3.2. Đánh giá độ an toàn............................................................................22
2.2.4. Mã Vigenere ..............................................................................................22
2.2.4.1. Mô tả...................................................................................................22
2.2.4.2. Đánh giá độ an toàn............................................................................23


2.2.5. Hệ mã Hill .................................................................................................24
2.2.5.1. Mô tả...................................................................................................24
2.2.5.2. Đánh giá độ an toàn............................................................................26
2.2.6. Hệ mã Hoán vị ...........................................................................................26
2.2.6.1. Mô tả...................................................................................................26
2.2.6.2. Đánh giá độ an toàn............................................................................27
2.2.7. Sơ lược về thám mã các hệ mã cổ điển.......................................................27
2.2.8. Nhận xét chung về các hệ mật mã cổ điển ..................................................28

CHƯƠNG 3. MỘT SỐ THUẬT TOÁN MÃ HÓA CÔNG KHAI....... 29
3.1. HỆ MÃ CÔNG KHAI .......................................................................................29
3.2. HỆ MÃ BA LÔ (MHK).....................................................................................32
3.2.1. Tạo khoá ....................................................................................................32
3.2.2. Mã hoá.......................................................................................................32
3.2.3. Giải mã ......................................................................................................33
3.2.4. Ví dụ..........................................................................................................33
3.3. HỆ MÃ HÓA - RSA..........................................................................................34

1


3.3.1 Thuật toán RSA ..........................................................................................35
3.3.2. Đặt vấn đề..................................................................................................37
3.3.3. Giải thuật RSA...........................................................................................37
3.3.3.1. Tạo khoá .............................................................................................37
3.3.3.2. Mã hoá................................................................................................38
3.3.3.3. Giải mã ...............................................................................................39
3.4. VÍ DỤ MINH HỌA ...........................................................................................40
3.5. MỘT SỐ VẤN ĐỀ ............................................................................................41
3.6. ĐỘ AN TOÁN CỦA HỆ MẬT MÃ RSA...........................................................43

3.7. SƠ LƯỢC VỀ THÁM MÃ RSA........................................................................44
3.7.1. Tấn công dựa trên thời gian........................................................................44
3.7.2. Tấn công lựa chọn thích nghi bản mã .........................................................45
3.8. ỨNG DỤNG CỦA HỆ MẬT MÃ RSA..............................................................45
3.8.1. Giới thiệu về chữ ký điện tử và vấn đề xác nhận.........................................46
3.8.2. Sơ đồ chữ ký RSA .....................................................................................47
3.8.3. Tấn công chữ ký điện tử.............................................................................49
3.9. HỆ MÃ ELGAMAL..........................................................................................51

CHƯƠNG 4. GIỚI THIỆU VỀ NGÔN NGỮ C# VÀ MỘT SỐ GIAO
DIỆN CHƯƠNG TRÌNH....................................................................... 54
4.1. LỊCH SỬ NGÔN NGỮ C# ................................................................................54
4.2. NHỮNG THẾ MẠNH CỦA NGÔN NGỮ C# ...................................................54
4.3. CÁC BƯỚC CHUẨN BỊ CHO CHƯƠNG TRINH............................................57
4.4. MỘT SỐ GIAO DIỆN.......................................................................................58
4.4.1. Giao diện chính..........................................................................................58
4.4.2. Giao diện chương trình nhập khóa cho thuật toán RSA ..............................59
4.4.3. Giao diện chương trình thuật toán RSA......................................................60
4.4.4. Giao diện chương trình chữ ký (phần ký văn bản) ......................................61
4.4.5. Giao diện chương trình chữ ký (phần ký kiểm tra chữ ký) ..........................62

KẾT LUẬN............................................................................................. 63
TÀI LIỆU THAM KHẢO...................................................................... 65
PHỤ LỤC................................................................................................ 66

2


LỜI NÓI ĐẦU
Từ xưa đến nay thông tin luôn là yếu tố quan trọng trong các hoạt động

của đời sống con người. Trong thời đại ngày nay, các phương thức truyền đạt
thông tin ngày càng đa dạng và phát triển. Với sự ra đời của máy tính và mạng
máy tính, việc trao đổi thông tin đã trở lên dễ dàng hơn, nhanh chóng hơn, đa
dạng hơn. Nhưng kèm theo đó là các nguy cơ xâm phạm thông tin cũng ngày
càng tăng. Nắm bắt được thông tin nhiều khi mang ý nghĩa quyết định, sống còn
đặc biệt trong các lĩnh vực: kinh tế, chính trị, an ninh, quốc phòng…Vì vậy việc
bảo mật thông tin đã, đang và sẽ là vấn đề được đặt ra rất cấp bách. Để giải quyết
vấn đề đó các hệ mật mã đã ra đời. Từ các hệ mật mã sơ khai cổ điển như: Hệ mã
Dịch Vòng, hệ mã Hill, hệ mã Affine,…, cho đến các hệ mật mã hiện đại, phức
tạp như hệ mã DES. Các hệ mật mã công khai như hệ mã RSA, hệ mã Ba Lô.
Nhưng đi kèm với sự ra đời và phát triển của các hệ mật mã là các phương pháp
phá khoá các hệ mật mã đó. Cuộc chiến giữa bảo mật thông tin và xâm phạm
thông tin vẫn luôn diễn ra một cách thầm lặng nhưng vô cùng gay gắt.
Với mong muốn tìm hiểu được phương pháp bảo mật thông tin em đã
chọn đề tài THUẬT TOÁN RSA VÀ ỨNG DỤNG CHỮ KÝ ĐIỆN TỬ làm
đồ án tốt nghiệp. Tuy đã có nhiều cố gắng trong việc xây dựng đề tài nhưng do
còn hạn chế về mặt thời gian cũng như kiến thức và kinh nghiệm thực tế nên đề
tài không tránh khỏi những thiếu sót. Vì vậy em rất mong được sự chỉ bảo, đóng
góp ý kiến của các thầy cô giáo cho đề tài của em ngày càng hoàn thiện hơn.
Em xin chân thành cảm ơn sự giúp đỡ nhiệt tình của cô: Th.s Nguyễn
Hiền Trinh– Bộ môn khoa học máy tính và các thầy cô đã trang bị kiến thức
cho em để em hoàn thành đề tài này.

3


CHƯƠNG 1
CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ
1.1. Đồng dư và số học modulo
Lý thuyết đồng dư là cơ sở để hiểu được các phương pháp, kỹ thuật tính toán

trong các thuật toán mã hóa và giải mã của hệ mật mã khóa công khai.
Định nghĩa 1.1: Cho các số nguyên tố a,b và n ta nói hai số nguyên a và b
đồng dư với nhau theo modulo n, nếu trong các phép chia a và b cho n có cùng số
dư (nghĩa là: a mod n = b mod n) và được kí hiệu hay a ≡ b (mod n).


Các phát biểu sau đây là tương đương:
-

a và b đồng dư với nhau theo mod n (a ≡ b mod n)

-

n chia hết a − b, nghĩa là n ước của (a – b), kí hiệu là n|(a-b).

-

Tồn tại số nguyên t sao cho a = t* n + b



Một số các tính chất của đồng dư thức:
– Có thể cộng, trừ hoặc nhân từng vế của nhiều đồng dư thức theo cùng một

modulo n . Cụ thể nếu ai  bi (mod n) với i= 1,2,…,k thì ta có:
 a1  a2  ...  ak  b1  b2  ...  b k (mod n)


a1 * a2 * ... * ak  b1 * b2 * ... * bk (mod n).


-

Nếu a * c  b * c (mod n) và USCLN(c, n) = 1 => a ≡ b (mod n).

-

Nếu a ≡ b (mod ni ) thì a ≡ b (mod n), với n = BSCNN(ni, n2,…, nk ).

-

Nếu a ≡ b (mod n) và c|n, c > 0 thì ta có a ≡ b (mod c ).



Các phép toán số học modul
Các phép cộng (+) và phép nhân (*) trong số học modulo n cũng giống các

phép cộng, phép nhân thông thường nhưng kết quả được chia cho n để lấy phần
dư.
-

Phép cộng : Cho a, b  Z và n  N*
c = (a+b) mod n = [(a mod n) + (b mod n)] mod n
Ví dụ 1.1: (8+9) mod 5 = 17 mod 5 = 2
(8+9) mod = (8 mod 5 + 9 mod 5) mod 5 = (3+4) mod 5 = 7 mod 5 = 2

4


+


0

1

2

3

4

0

0

1

2

3

4

1

1

2

3


4

0

2

2

3

4

0

1

3

3

4

0

1

2

4


4

0

1

2

3

Bảng 1.1 Kết quả minh họa phép cộng với modulo n = 5
Chú ý: Phép cộng trong số học modulo n cũng có phần tử nghịch đảo cộng
(hay số âm) được định nghĩa như sau: với bất kì số x  Zn   y  Zn: (x + y)
mod n = 0.
Ví dụ 1.1: (3+2) mod 5 = 0,4 + 1 mod 5 = 0.
-

Phép nhân: Cho a, b  Z và n  N*
c =(a * b) mod n = [(a mod n) * (b mod n)] mod n

Ví dụ 1.2: (6 * 9) mod 5 = 54 mod 5 = 4
(6 * 9) mod 5 = [(6 mod 5) * (9 mod 5)] mod 5 = (1 * 4) mod 5 = 4
*

0

1

2


3

4

0

0

0

0

0

0

1

0

1

2

3

4

2


0

2

4

1

3

3

0

3

1

4

2

4

0

4

3


2

1

Bảng 1.2 Kết quả minh họa phép nhân modulo n = 5
Chú ý: Tương tự như phép cộng, phép nhân modulo n cũng có phần tử nghịch
đảo được định nghĩa như sau: cho a  Zn nếu ! x  Zn sao cho:
a * x  1 (mod n)
Thì x gọi là phần tử nghịch đảo nhân của a mod n, ký hiệu x = a-1 mod n.
Ví dụ thứ 2 là phần tử nghịch đảo của 3 mod 5 vì ta có: (3* 2) mod 5 = 1.

5




Các tính chất của các phép toán số học modulo:
- Nghịch đảo của a  Zn trong phép cộng modulo là: (n – a) với a  Zn
: (a + (n – a)) mod n = ((n – a) + a) mod n = 0
- Nghịch đảo của a  Zn trong các phép nhân modulo là a-1 với a  Zn
: (a * a-1) mod n = (a-1 * a) mod n = 1
- Có tính giao hoán với a, b  Zn ta có:
(a+b) mod n = (b+a) mod n
(a * b) mod n = b * a mod n
- Có tính kết hợp với a, b, c  Zn ta có:
[(a+b) * c] mod n = [(a * c) + (b * c)] mod n
[a * (b+c)] mod n = [(a * b) + (b * c)] mod n

1.2. Hàm Φ – Euler (Euler’s totient function)

Định nghĩa 1.2: Cho n là số nguyên dương, hàm Φ-Euler của n, ký hiệu
Φ(n), là số các số nguyên dương nhỏ hơn hoặc bằng n và nguyên tố cùng nhau
với n.
Công thức tính tổng quát hàm Φ-Euler như sau: Giả sử n được phân tích
thành các thừa số nguyên tố: n   piei , với pi là các số nguyên tố, ei  0, và
1 ≤ i ≤ n. Thì:  (n)   piei 1( pi 1)
* Định lý 1.1 ( Định lý Euler)
Cho n là một số nguyên dương khác 0 và a là một số nguyên, a nguyên tố
cùng nhau với n. Nghĩa là gcd(a,n) = 1 thì khi đó ta có :
aф(n)  1 (mod n)
* Định lý 1.2 ( Định lý Fermat )
Cho p là một số nguyên tố và a là một số nguyên không chia hết cho p.
Nghĩa là gcd(a,p) = 1 thì khi đó ta có :
a(p-1)  1 (mod p)
* Định nghĩa 1.3 : Một trường hữu hạn là một trường F chứa một số hữu
hạn các phần tử. Bậc của nhóm F là số các phần tử tồn tại trong F.

6


* Định lý 1.4 : Cho Fq là một trường hữu hạn, và một phần tử g Fq, định
nghĩa bậc (order) của g là số nguyên dương m nhỏ nhất sao cho : gm  1 (mod q),
và ký hiệu là: Ord q(g) = m.
* Định nghĩa 1.5: Số g được gọi là phần tử sinh của trường hữu hạn Fq,
nếu g có bậc q – 1 ;
Nói cách khác : g là phần tử sinh ( chính ), nếu lũy thừa của g có thể sinh ra tất cả
các phần tử khác 0 của Fq*. Nghĩa là: {gx : 0 ≤ x ≤ q – 2} = Fq*.
* Định lý 1.3: Mỗi trường hữu hạn đều có phân tử sinh. Nếu g là một phần
tử sinh của Fq* thì gj cũng là phần tử sinh nếu và chỉ nếu gcd(j, q – 1) = 1. Vậy có
tổng cộng Φ(q – 1) phần tử sinh khác nhau của Fq*. (gcd: greatest common

divisor)
1.3. Tìm phần tử nghịch đảo
Thuật toán tìm phần tử nghịch đảo còn được gọi là thuật toán Euclide mở
rộng. Cho phép tính phần tử nghịch đảo của một số theo modulo, được sử dụng
trong một số hệ mật mã khóa công khai ở các quá trình tạo khóa và giải mã.
* Thuật toán Euclide
Để tìm UCLN của a và b ta tiến hành như sau:
- Lấy số lớn (giả sử là b) chia cho số nhỏ a được phần dư r (0 ≤ r < a)
- Tiếp tục coi a là số lớn, r là số nhỏ và lặp lại quá trình trên cho đến khi số
dư trong phép chia r = 0
Số chia trong phép chia cuối cùng là UCLN (a,b )
Ví dụ: Tìm UCLN của a=180, a=72
180=2*72+36
72=2*36+0
 UCLN(180,72)=36
 Hay 36=180-2*72
Tổng quát: Nếu d=(a,b) thì tồn tại m, n là số nguyên sao cho d=m*a+n*b

7


1.4. Thuật toán lũy thừa nhanh
Thuật toán lũy thừa nhanh modulo N (y = xe mod N), được sử dụng rất
nhiều trong các hệ mật mã khóa công khai. Tốc độ thực hiện của các quá trình
mã hóa và giải mã của hệ mật mã, phụ thuộc rất nhiều vào phép tính này với toán
hạng là những số nguyên cực lớn. Vì vậy đòi hỏi cần phải có một thuật toán thực
hiện phép tính lũy thừa modulo càng nhanh càng tốt. Trong phần này sẽ trình bày
chi tiết về thuật toán và chi phí thực hiện của thuật toán thường được sử dụng
nhất hiện nay, gọi là : “ Thuật toán lũy thừa nhanh”.
Thuật toán này, dựa vào biểu diễn nhị phân của số mũ để thực hiện phép

tính lũy thừa modulo của một số nguyên, chỉ với một vài phép tính nhân và phép
tính bình phương. Thuật toán có các tham số đầu vào là: Số M, số N và biểu diễn
k 1

nhị phân của số mũ: e  e(k 1)e(k 2)...e(1)e(0)  i 0 ei  2i ở đây ei= {0,1}.
k 1

i

ei*2
k 1
e 2i
Kết quả của phép tính ở đầu ra là: C  M  M i 0 i  i 0 M
mod N .
e

Đầu tiên gán biến C = 1, sau đó duyện từng giá trị bit, thông qua biểu diễn
nhị phân của số mũ, bắt đầu từ phía bên trái sang phía bên phải. Tại mỗi vòng lặp
thứ i, thực hiện một phép tính bình phương của kết quả hiện tại (Ci = Ci-1 * Ci-1
mod N). Nếu giá trị bit tại vị trí đang xét ei = 1 thì kết quả vừa tính được nhân với
M modulo N, (C = C* M Mod N). Khi kết thúc lần lặp thứ k ta có kết quả là C =
Me mod N.
Ví dụ: Tính 12554 mod 1024 (M = 125, e = 54, n = 1024)
Biểu diễn nhị phân (54)10 = (110110)2. Chỉ thực hiện 6 bước tính sau:
B1:

e5 = 1

 C = (1 * 1) *125 = 125


B2:

e4 = 1

 C = (125 * 125) *125 mod 1024 = 357

B3:

e3 = 0

 C = (357 * 357) mod 1024 = 473

B4:

e2 = 1

 C = (473 * 473) * 125 mod 1024 = 685

B5:

e1 = 1

 C = (685 * 685) * 125 mod 1024 = 453

B6:

e0 = 0

 C = (453 * 453) mod 1024 = 409


8


CHƯƠNG 2
TỔNG QUAN VỀ MÃ HÓA
2.1. Giới thiệu chung về mã hóa
Mọi người đều biết rằng khi muốn giữ một cái gì đó cho riêng mình thì
cần phải che giấu nó đi. Để gửi bức thư riêng cho một người bạn, chúng ta phải
cho nó vào một bao thư và gián nó lại. Nhưng nếu bức thư đó quan trọng mà
chúng ta không muốn cho ai khác ngoài người nhận biết được nội dung bức thư
đó. Chúng ta không thể chắc chắn rằng trên đường bức thư đó tới tay người nhận,
bức thư đó có được an toàn hay không.
Từ đó nảy sinh vấn đề bảo vệ thông tin. Từ xa xưa, người ta đã biết áp
dụng các biện pháp bảo vệ thông tin thô sơ như là giấu thông tin, cho người canh
gác,…Khi trí tuệ sáng tạo của con người phát triển thì không thể áp dụng biện
pháp thô sơ này được.
Ngày nay với sự bùng nổ của công nghệ thông tin đặc biệt là Internet và
Email, thì vấn đề bảo vệ thông tin càng trở nên quan trọng quyết định sự sống
còn của một công ty, đảm bảo an ninh quốc phòng cho mỗi quốc gia,…
Có hai phương pháp để đạt được mục tiêu này: Kiểm soát lối vào ra và mã
hóa dữ liệu.
Phương pháp kiểm soát lối vào nhằm ngăn cản sự xâm nhập trái

1.

phép vào hệ thống nhờ xây dựng các kiểm soát thích hợp, ví dụ như
các hệ sử dụng mật khẩu, mà trong đó chỉ những người được phép
sử dụng mới qua được để thâm nhập vào hệ thống. Hệ này có một
số nhược điểm. Chẳng hạn dữ liệu lưu trữ bên ngoài cũng cần được
bảo vệ và việc này dường như chỉ có sự bảo vệ thuần túy vật lý là

có thể đạt được. Như vậy, điều đó dẫn đến sự kém an toàn đối với
hệ thống. Một nhược điểm nữa của phương pháp này đó là không
thực tiễn khi ta quan hệ với các hệ số lớn.
2.

Sự truy nhập thông tin còn được kiểm soát bằng một phương pháp
khác: mã hóa dữ liệu. Điều này có nghĩa là thông tin được lưu trữ

9


trong hệ dưới dạng đã được mã hóa. Khi đó, những người truy nhập
trái phép dù có lấy được thông tin, nhưng nó lại ở dạng mã hóa, do
đó thông tin này vô nghĩa nếu họ không biết cách giải.
Mật mã học nghiên cứu các hệ thống dùng cho việc truyền thông bí mật,
gồm có hai lĩnh vực nghiên cứu: Mã hóa (Cryptography) – thiết kế các hệ truyền
thông bí mật, và Giải mã (Cryptanalysis) – nghiên cứu các phương pháp để giải
mã các hệ truyền thông bí mật. Mật mã học trước đây chủ yếu được áp dụng
trong các hệ truyền thông quân sự và ngoại giao, nhưng các áp dụng có ý nghĩa
thực tế của nó ngày nay đã xuất hiện trong tất cả các lĩnh vực của xã hội. Hai ví
dụ minh chứng là các hệ thống tập tin máy tính (trong đó mỗi người sử dụng lưu
trữ riêng các tập tin của họ) và các hệ chuyển ngân điện tử. Một người sử dụng
máy tính chỉ muốn cất giữ riêng các tập tin máy tính của mình cũng như ta cất
các giấy tờ trong tủ hồ sơ, và một ngân hàng thì muốn việc chuyển ngân điện tử
sẽ an toàn như là được chuyển ngân bằng xe bọc thép vậy.
2.1.1. Mục tiêu của an toàn bảo mật thông tin
Bên cạnh việc làm thế nào để che dấu nội dung thông tin thì mã hoá phải
đảm bảo các mục tiêu sau:
1.


Tính bí mật (Confjdentialy): Đảm bảo dữ liệu được truyền đi một cách an
toàn và không thể bị lộ thông tin nếu như có ai đó cố tình muốn có được
nội dung của dữ liệu gốc ban đầu. Chỉ những người được phép mới có khả
năng đọc được nội dung thông tin ban đầu.

2.

Tính xác thực (Authentication): Giúp cho người nhận dữ liệu xác định
được chắc chắn dữ liệu mà họ nhận là dữ liệu gốc ban đầu. Kẻ giả mạo
không thể có khả năng để giả dạng một người khác hay nói cách khác
không thể mạo danh để gửi dữ liệu. Người nhận có khả năng kiểm tra
nguồn gốc thông tin mà họ nhận được.

3.

Tính toàn vẹn (Integrity): Giúp cho người nhận dữ liệu kiểm tra được
rằng dữ liệu không bị thay đổi trong quá trình truyền đi. Kẻ giả mạo
không thể có khả năng thay thế dữ liệu ban đầu bằng dữ liệu giả mạo.

10


4.

Tính không thể chối bỏ (Non-repudation): Người gửi hay người nhận
không thể chối bỏ sau khi đã gửi hoặc nhận thông tin.

2.1.2. Khái niệm hệ mật mã
Một hệ mật mã là một bộ 5 (P,C,K,E,D) thoả mãn các điều kiện sau:
- P: Là một tập hợp hữu hạn các bản rõ, nó được gọi là không gian bản rõ.

- C: Là tập hữu hạn các bản mã, nó được gọi là không gian bản mã. Mỗi phần
tử của C có thể nhận được bằng cách áp dụng phép mã hoá Ek lên một phần tử
của P, với k  K
- K: Là tập hữu hạn các khoá hay còn gọi là không gian khoá. Đối với mỗi
phần tử k của K được gọi là một khoá. Số lượng của không gian khoá phải đủ lớn
để “kẻ địch” không có đủ thời gian để thử mọi khoá có thể ( phương pháp vét
cạn).Đối với mỗi k  K có một quy tắc mã ek: PC và một quy tắc giải mã
tương ứng dk D. Mỗi ek: P C và dk: CP là những hàm mà: Dk (ek(x))=x với
mọi bản rõ x P.
2.1.3. Mã hoá và giải mã
 Mã hoá (Encryption)
Là quá trình biến đổi thông tin từ dạng nhận thức được sang dạng không
nhận thức được.
 Giải mã (Decryption)
Là quá trình ngược lại với mã hoá, tức là biến đổi thông tin từ dạng không
nhận thức được (dữ liệu mã hoá) về dạng nhận thức được (dạng gốc).

11


2.1.4. Quy trình mã hoá và giải mã dữ liệu

Khoá Ke

DL gốc

Mã hoá

Quản lý
khóa


DL mã hoá

Khoá Kd

Giải mã

DL gốc

Hình 2.2.3 Quy trình mã hoá dữ liệu

Quy trình thực hiện như sau:
Bộ phận quản lý khoá thực hiện lập khoá mã hoá (Ke) và khoá giải mã (Kd).
Dữ liệu gốc được mã hoá nhờ khoá mã hoá. Vấn đề ở đây là quản lý khóa như
thế nào để cho việc mã hoá và giải mã tương đối đơn giản và đảm bảo tuyệt đối
bí mật cho khoá giải mã.
2.1.5. Thuật toán mã hóa đối xứng (Symmetric Algorithms)
Mật mã đối xứng cũng được gọi là mật mã Private key Cryptograpgy hay
mật mã Secret key Cryptography. Nó sử dụng một chìa khoá duy nhất để mã hoá
và giải mã dữ liệu đây là hạn chế sự an toàn và phổ biến của phương pháp đối
xứng, đồng thời cũng là điểm yếu, bởi vì chỉ cần một bên để lộ khoá thì bí mật sẽ
bị mất.
Hệ mã cổ điển là loại mã được thực hiện thông qua hàm f có tính thuận
nghịch, sử dụng f để mã hoá, biết f có thể suy ra hàm giải mã f-1.
Khi một mật mã đối xứng được sử dụng cho một bản rõ, người sử dụng
thực hiện mã hoá với một secret key. Khi một giao tiếp được sử dụng mã hoá
đối xứng, hai giao tiếp sẽ chia sẻ nhau cùng một mật mã để mã hoá và giải mã
gói tin.

12



Hình 2.2.4 Một hệ thống mật mã đối xứng
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).
Sự bảo mật của một thuật toán đối xứng dựa trên khoá. Tiết lộ khoá có
nghĩa rằng bất cứ ai biết khoá đều có thể mã hoá và giải mã thông tin trên hệ
thống này.
Nhóm mã hoá và giải mã bằng thuật toán đối xứng được thể hiện bằng
công thức:
Ek(P)=C
Dk(C)=P
Dk(Ek(P))=P
 Một số hệ mã cổ điển
- Mã dịch vòng
- Mã thay thế
- Mã hoán vị
- Mã Affine
- Mã Vigenere
- Mã Hill
- Mã dòng

13


2.1.6. Thuật toán mã hóa phi đối xứng (Puclic-key-Algorithms)

Hay còn được gọi với một cái tên khác là mã hoá khoá công khai (Public
Key Cryptography), nó được thiết kế sao cho khoá sử dụng trong quá trình mã
hoá khác biệt với khoá được sử dụng trong quá trình giải mã. Hơn thế nữa, khoá
sử dụng trong quá trình giải mã không thể được tính toán hay luận ra được từ
khoá được dùng để mã hoá và ngược lại, tức là hai khoá này có quan hệ với nhau
về mặt toán học nhưng không thể suy diễn được ra nhau. Thuật toán này được
gọi là mã hoá công khai vì khoá dùng cho việc mã hoá được công khai cho tất cả
mọi người. Một người bất kỳ có thể dùng khoá này để mã hoá dữ liệu nhưng chỉ
duy nhất người mà có khoá giải mã tương ứng mới có thể đọc được dữ liệu mà
thôi. Do đó trong thuật toán này có 2 loại khoá: Khoá để mã hoá được gọi là khóa
công khai, khoá để giải mã được gọi là khóa bí mật.
Trong mỗi quá trình truyền thông tin sử dụng mật mã bất đối xứng chúng
cần một cặp khóa duy nhất. Nó tạo ra khả năng có thể sử dụng linh hoạt và phát
triển trong tương lai hơn là giải pháp mật mã đối xứng. Khóa bí mật bạn cần phải
giữ riêng và đảm bảo tính bảo mật và nó không truyền trên mạng. Khóa công
khai được cung cấp miễn phí và được công bố rộng rãi cho mọi người.

Hình 2.2.5 Một hệ thống mật mã bất đối xứng
Thuật toán này được thể hiện bằng:
Ek1(P)=C
Dk2(C)=P
Dk2(Ek1(P))=P

14


Trong một số trường hợp, thông điệp sẽ được mã hoá bằng khoá riêng và
giải mã bằng khoá công khai, điều này thường được áp dụng đối với chữ ký điện
tử.
 Một số hệ mã công khai

-

Hệ mã RSA

-

Hệ mã Ba Lô

2.1.7. Thám mã (Cryptanalyis)
Thám mã là “nghệ thuật” tìm lại bản thông điệp gốc bằng cách phân tích
bản mã.
Mục đích chính của mật mã là phải giữ bí mật bản rõ (hoặc khoá, hoặc cả
hai) khỏi những người nghe trộm (Attacker). Thám mã cần phục hồi bản rõ của
một thông điệp từ bản mã mà không có khoá. Nếu thành công, người phân tích
mã có thể thu được bản rõ hoặc khoá, hoặc cũng có thể tìm thấy điểm yếu trong
một hệ thống mã hoá. Các thuật toán sử dụng cho phần lớn các hệ thống mã hoá
là nổi tiếng, vì vậy chúng ta giả thiết rằng người thám mã đã biết thuật toán để
bắt đầu thám mã.
Như vậy, vấn đề cốt yếu của một hệ mã hoá tốt là việc khôi phục bản rõ P
từ bản mã C khi biết Dk phải là khó, hoặc tốt hơn là không thể được.
Có 6 tình huống mà người thám mã có thể có khi phân tích. Trong các tình
huống đó giả sử rằng người thám mã đã biết thuật toán được dùng để mã hoá:
1. Chỉ biết bản mã (Ciphertext-only attack). Trong trường hợp này, người
thám mã có bản mã của một thông điệp, và biết được thuật toán được dùng để
mã hoá. Công việc của người thám mã là phải tìm được bản rõ của thông điệp, và
tốt hơn hết là tìm ra khoá được sử dụng để mã hoá thông điệp, để từ đó giải mã
những thông điệp khác được mã hoá với cùng khoá đó.
Để việc phân tích của người thám mã có hiệu quả thì tốt hơn hết là bản mã
phải dài. Trong những hệ mã đơn giản, ví dụ như CAESAR, một bản mã ngắn
cũng đưa lại kết quả bởi vì chỉ có duy nhất một khoá được sử dụng để mã hoá.

Trong những hệ hoàn chỉnh hơn thì bản mã dài là cần thiết. Hiệu quả của phương

15


pháp phân tích có thể dựa trên thông tin thống kê liên quan tới ngôn ngữ mà bản
rõ được sử dụng. Ví dụ như thông tin về tần số xuất hiện của mỗi ký tự riêng lẻ
trong tiếng Anh.
Đầu vào: C1=Ek(P1), C2=Ek(P 2),... Ci=Ek(Pi)

(với i  1)

Cần tìm: hoặc P1, P 2,... Pi; k; hoặc một thuật toán để nhận được Pi+1 từ
Ci+1=Pk(P i+1)
2. Biết bản rõ (Known-plaintext attack). Người thám mã không chỉ biết
bản mã của một vài thông điệp mà còn biết cả bản rõ của những thông điệp này.
Công việc của người thám mã là tìm ra khoá (hoặc các khoá) được sử dụng để
mã hoá các thông điệp hoặc thuật toán để giải mã bất kỳ một thông điệp mới nào
được mã hoá bằng khoá đó.
Đầu vào: P1, C1=Ek(P1), P2, C2=Ek(P 2),... Pi, Ci=Ek(Pi)
Cần tìm: hoặc k, hoặc một thuật toán để nhận được Pi+1 từ Ek(Pi+1)
3. Bản rõ được lựa chọn (Chosen-plaintext attack). Người thám mã
không chỉ phân tích bản mã mà còn được kết hợp với bản rõ của một vài thông
điệp, nhưng các bản rõ không là tuỳ ý mà do người thám mã phải lựa chọn.
Trường hợp này tốt hơn trường hợp (2) đối với người thám mã, bởi vì người
thám mã có thể chọn khối bản rõ đặc trưng để giải mã, nó có thể mang lại nhiều
thông tin về khoá. Công việc của người thám mã là tìm khoá (hoặc các khoá)
được sử dụng để mã hoá các thông điệp hoặc một thuật toán để giải mã bất cứ
thông điệp đã được mã hoá mới nào bằng các khoá đó.
Đầu vào: P1, C1=Ek(P1), P2, C2=Ek(P2),... Pi, Ci=Ek(Pi), người thám mã

được chọn P1, P2,... Pi
Cần tìm: hoặc k, hoặc một thuật toán để nhận được Pi+1 từ Ci+1=Ek(Pi+1)
4. Bản rõ được lựa chọn thích hợp (Adaptive-chose-plaintext attack).
Đây là một trường hợp đặc biệt của trường hợp bản rõ được lựa chọn. Người
thám mã không chỉ có thể được lựa chọn bản rõ mà nó đã được mã hoá, mà họ
còn có thể biến đổi những điểm cần thiết dựa trên kết quả của những lần mã hoá

16


trước. Với trường hợp bản rõ được lựa chọn, người thám mã có thể lựa chọn một
khối bản rõ lớn để giải mã; trong trường hợp bản rõ được lựa chọn thích hợp họ
có thể lựa chọn một khối bản rõ nhỏ hơn sau đó lựa chọn khối khác dựa vào kết
quả của khối đầu tiên, v.v...
5. Bản mã được lựa chọn (Chosen-plaintext attack). Người thám mã có
thể chọn các bản mã khác nhau và biết được bản rõ. Công việc của người thám
mã là tìm khoá.
Đầu vào: C1, P1=Dk(C1), C2, P2=Dk(C2),... Ci, Pi=Dk(Ci)
Cần tìm: k
6. Khoá được lựa chọn (Chosen-Key). Người thám mã biết phương pháp
mã hoá Ek và cố tìm phương pháp giải mã tương ứng Dk trước khi nhận bất cứ
mẫu bản mã nào. Trong trường hợp này người thám mã có rất nhiều thời gian để
làm việc.
Trường hợp (5), (6) thường được ứng dụng chủ yếu đối với các hệ thống
mã hoá sử dụng khoá công khai.
Hiện nay có rất nhiều thuật toán mã hoá. Có ba thuật toán thường được sử
dụng :
 DES (Data Encryption Standard) là thuật toán mã hoá trên máy tính
hiện nay đang được sử dụng rộng dãi nhất. DES là chuẩn mã hoá được phát minh
ở Mỹ. Nó là thuật toán đối xứng; khoá để mã và khoá để giải giống nhau.

 RSA (tên của thuật toán được viết tắt tên của các tác giả - Rivest,
Shamir và Adleman) là thuật toán công khai phổ biến nhất. Nó có thể được sử
dụng cho cả mã hoá và chữ ký điện tử.
 DSA (Digital Signature Algorithm) là thuật toán khoá công khai. Nó
không được sử dụng để mã hoá mà được dùng trong chữ ký điện tử.

17


2.2. Mật mã cổ điển
2.2.1 Mã dịch vòng
2.2.1.1. Mô tả
Khái niệm : Mã dịch vòng là một bản mã được tạo ra bằng cách mỗi kí tự
của bản rõ được dịch đi k vị trí theo chiều kim đồng hồ.
Mã dịch vòng được xác định trên Z26 (do có 26 chữ cái trên bảng chữ cái
trên bảng chữ cái tiếng Anh)

Giả sử P = C = K = Z26 với 0  k  25 , Định nghĩa:
eK(x) = x +K mod 26


dK(x) = y - K mod 26

(x,y  Z26)

Nhận xét: Trong trường hợp k=3, hệ mật thường được gọi là hệ mật
Caesar thường được Julius Caesar sử dụng.
Ví dụ:
Mã hoá:
Giả sử khoá cho MDV là K = 11 và bản rõ là : wewillmeetatmidnight

Đổi chuỗi ra số theo tứ tự trong bảng chữ cái ta có:
22

4

22

8

11

11

12

4

4

19

0

19

12

8

3


13

8

6

7

19

Cộng với khoá và modulo 26:
7

15

7

19

22

22

23

15

15


4

11

4

23

19

14

24

19

17

18

4

Ta thu được bản mã: HPHTWWXPPELEXTOYTRSE
Giải mã:
7 15

7

19


22

22

23

15

15

4

11 4

23

19

14

24

19

17

18

4


Trừ mỗi số cho 11 và rút gọn theo mod 26 ta được dãy số
22

4

22

8

11

11

12

18

4

4

19


0

19

12


8

3

13

8

6

7

19

Đổi dãy số này ra chữ cái ta thu được bản rõ:
Bản rõ: wewillmeetatmidnight
2.2.1.2. Đánh giá độ an toàn
Điều kiện để một hệ mật an toàn là phép tìm khoá vét cạn là không thể
thực hiện được, nhưng do không gian khoá quá nhỏ nên dễ dàng thử mọi khoá dk
có thể cho tới khi nhận được bản rõ có nghĩa. Vì vậy hệ mã dịch vòng là một hệ
mã không an toàn.
2.2.2. Mã thay thế
2.2.2.1. Mô tả
Để có được bản mã người ta thay đổi một ký hiệu trong bản rõ bằng một
ký hiệu nào đó. Trên thực tế, mã thay thế có thể lấy cả P và C đều là bộ chữ cái
tiếng Anh ( 26 chữ cái ). Ta dùng Z26 trong mã dịch vòng vì các phép mã hoá và
giải mã đều là các phép toán đại số. trong mã thay thế, có thể xem mã hoá và giải
mã như các hoán vị của các ký tự. Ta có thể định nghĩa mã thay thế dưới dạng
toán học như sau.
Giả sử P = C = K = Z26 . K chứa mọi hoán vị có thể của 26 kí hiệu

0,1…,25
Với mỗi phép hoán vị K ta định nghĩa:
e (x) = (x)


d (y) = -1 (y)

Trong đó -1 là hoán vị ngược của .
Sau đây là một ví dụ về phép hoán vị ngẫu nhiên  tạo nên một hàm mã
hoá ( cũng như trước các ký hiệu của bản rõ được kí hiệu bằng chữ in thường còn
các ký hiệu của bản mã được kí hiệu bằng chữ in hoa).

19


A

b

c

d

E

f

g

h


i



k

l

m

X

N

Y

A

H

P

O

G

Z

Q


W

B

t

N

o

p

q

R

s

t

u

v

w

x

y


z

S

F

L

R

C

V

M

U

E

K

J

D

I

Như vậy e(a)=X, e(b)= N,… Hàm giải mã là phép hoán vị ngược. Điều

này được thực hiện bằng cách viết hàng thứ hai lên trước rồi sắp xếp theo thứ tự
chữ cái. Ta nhận được:
A

B

C

D

E

F

G

H

I

J

K

L

M

D


l

r

y

V

o

h

e

z

x

v

p

t

N

O

P


Q

R

S

T

U

V

W

X

Y

Z

B

g

f

j

Q


n

m

u

s

k

a

c

i

Bởi vậy d(A)= d, d(B)= l,…
2.2.2.2. Đánh giá độ an toàn
Mỗi khoá của mã thay thế là một phép hoán vị của 26 kí tự. Số các hoán vị này
là 26!. Bởi vậy, phép tìm khoá vét cạn không thể thực hiện được, thậm chí bằng máy
tính. Tuy nhiên mã hoán vị lại dễ dàng bị thám bằng các phương pháp khác.

2.2.3. Mã Affine
2.2.3.1. Mô tả
Mã Affine là một trường hợp đặc biệt của mã thay thế chỉ gồm có 26 trong
số 26! các hoán vị của 26 phần tử. Mã Affine được định nghĩa như sau:

20



Giả sử P = C = K = Z26 và giả sử
P={(a,b)  Z26 x Z26: USCLN(a,26)=1}
Với k=(a,b)K, ta định nghĩa:
ek (x) = ax+b mod 26


dk(y) = a-1(y-b) mod 26

x,y  Z26

Để việc giải mã có thể thực hiện được, yêu cầu nhất thiết là hàm Affine
phải là đơn ánh. Nói cách khác, với bất kỳ y  Z26, ta muốn có đồng nhất thức
sau:
ax + b  y (mod 26)
phải có nghiệm x duy nhất. Đồng dư thức này tương đương với:
ax  y – b (mod 26)
Vì y thay đổi trên Z26 nên y-b cũng thay đổi trên Z26. Bởi vậy, ta chỉ cần nghiên
cứu phương trình đồng dư:
ax  y (mod 26)

(y Z26).

Ta biết rằng, phương trình này có một nghiệm duy nhất đối với mỗi y khi
và chỉ khi UCLN (a , 26) = 1( ở đây hàm UCLN là ước chung lớn nhất của các
biến của nó). Trước tiên ta giả sử rằng. UCLN (a , 26) = d > 1. Khi đó, đồng dư
thức ax  0 (mod 26) sẽ có ít nhất hai nghiệm phân biệt trong Z26 là x = 0 và
x = 26/d. Trong trường hợp này, e(x) = ax + b mod 26 không phải là một hàm
đơn ánh và bởi vậy nó không thể là hàm mã hoá hợp lệ.
Ví dụ:
Giả sử k = (7,3)

Ta tính được 7-1mod 26 =15. Hàm mã hoá là
ek(x) = 7x+3
Và hàm giải mã tương ứng là
Dk(x) = 15(y-3) = 15y- 19
ở đây tất cả các phép toán đều được thực hiện trên Z26

21


Để minh hoạ ta hãy mã hoá bản rõ “hot”. Trước tiên ta biến đổi các chữ h, o, t
thành các thặng dư theo modulo 26. Ta được các số tương ứng là 7,14,19. bây
giờ sẽ mã hoá:
7 x 7+3 mod 26 = 52 mod 26 = 0
7 x 14 + 3 mod 26 = 101 mod 26 = 23
7 x 19 + 3 mod 26 = 136 mod 26 = 6
Bởi vậy 3 kí hiệu của bản mã là 0, 23, 6 tương ứng với xâu kí tự AXG.
Thực hiện giải mã theo hàm giả mã ta thu được bản mã “hot”.
2.2.3.2. Đánh giá độ an toàn
Do đặc trưng của hệ mã cổ điển: Hàm mã hoá phải khả nghịch, có f thì
tính được f-1, hàm f phải là hàm đơn ánh do định lý về nghiệm duy nhất của đồng
dư đa thức ax = b mod m. Bởi vậy, hàm mã hoá của hệ mã Affine là hàm ek(x) có
nghiệm duy nhất khi (a,26) = 1.
Từ nhận xét trên ta thấy, sẽ có 12 cách chọn a, 26 cách chọn b. do đó có:
12*26 = 312 cách chọn khoá. Như vậy độ an toàn là nhỏ.
2.2.4. Mã Vigenere
2.2.4.1. Mô tả
Trong cả hai hệ mã dịch vòng và mã thay thế (một khi khoá đã được chọn)
mỗi ký tự sẽ được ánh xạ vào một ký tự duy nhất. Vì lý do đó, các hệ mật còn
được gọi là các hệ thay thế đơn biểu. Còn đây là một hệ mật không phải là bộ
chữ đơn, mật mã này lấy tên của Blaise de Vigenere sống vào thế kỷ XVI. Hệ mã

Vigenere được định nghĩa như sau:
Cho m là một số nguyên dương cố định nào đó. Giả sử P = C = K = (Z26)m .
Với khoá K = ( k1, k1,…,km) ta xác định:
ek(x1, x2, …, xm) = (x1+k1, x2+k2,…, xm+km)

d k(y1, y2,…, ym) = (y1-k1, y2-k2, …, ym-km)
Trong đó tất cả các phép toán đều được thực hiện trên Z26

22


Sử dụng phép tương ứng A <=> 0, B<=> 1,…, Z<=>25 mô tả ở trên ta có
thể gắn cho mỗi khoá K với một chuỗi kí tự có độ dài m được gọi là từ khoá. Mật
mã Vigenere sẽ đồng thời mã hoá m kí tự.
Ví dụ:
Giả sử m = 6 và từ khoá là CIPHER. Từ khoá này tương ứng với dãy số
K =(2,8,15,4,17). Giả sử bản rõ là xâu:
Thiscryptosystemisnotsecure
Ta sẽ biến đổi các phần tử của bản rõ thành các thặng dư theo modulo 26, viết
chúng thành các nhóm rồi cộng với từ khoá theo modulo 26 như sau:

Bởi vậy dãy kí tự tương ứng của xâu bản mã sẽ là
VPXZGIAXIVWPUBTTMJPWIZITWZT
Để giải mã thay ta có thể dùng cùng từ khoá nhưng thay cho cộng, ta trừ
cho nó theo modulo 26.
2.2.4.2. Đánh giá độ an toàn
Ta thấy rằng các từ khoá có thể với độ dài m trong mật mã Vigenere là
26m. Bởi vậy, thậm chí với các giá trị m khá nhỏ, phương pháp tìm kiếm vét cạn
cũng yêu cầu thời gian khá lớn. Ví dụ nếu m =5 thì không gian khoá cũng có kích


23


thước là 265 . Lượng khoá này đủ lớn để ngăn ngừa việc tìm khoá bằng tay (chứ
không phải dùng máy tính).
Trong hệ mật Vigenere có từ khoá độ dài m, mỗi kí tự có thể được ánh xạ
vào trong m ký tự có thể có. Một hệ mật như vậy được gọi là hệ mật thay thế đa
biểu. Nói chung, việc thám mã hệ mật thay thế đa biểu sẽ khó khăn hơn so với
thám mã hệ đơn biểu.
2.2.5. Hệ mã Hill
2.2.5.1. Mô tả
Mật mã Hill cũng là một hệ mật thay thế đa biểu do Lester S.Hill đưa ra
năm 1929. Giả sử m là một số nguyên dương P=C=(Z26)m. Ý tưởng ở đây là lấy
m tổ hợp tuyến tính của m ký tự trong một phần tử của bản rõ để tạo ra m ký tự ở
một phần tử của bản mã. Hệ mã Hill được định nghĩa như sau:
Cho m là một số nguyên dương cố định. Cho P=C=(Z26)m và cho
K= {các ma trận khả nghịch cấp m x m trên Z26 }
Với một khoá kK ta xác định
ek (x) = xk


d k (y) = yk -1

Tất cả các phép toán đều được thực hiện trong Z26

Nhận xét: để giải mã được thì ma trận thức K phải có nghịch đảo. K có
nghịch đảo khi và chỉ khi định thức của nó khác 0. Tuy nhiên, điều quan trọng
cần nhớ là ta đang làm việc trên Z26. Kết quả tương ứng là ma trận K có nghịch
đảo theo modulo 26 khi và chỉ khi UCLN( det K, 26) = 1.
Sau đây sẽ chứng minh ngắn gọn kết quả này.

Trước tiên, giả sử rằng UCLN (det K, 26) =1. Khi đó det K có nghịch đảo
trong Z26. Với 1 ≤ i ≤ m, 1 ≤ j ≤ m, định nghĩa Kj i ma trận thu được từ K bằng
cách loại bỏ hàng thứ i và cột thứ j. Và định nghĩa ma trận K* có phần tử (i,j) của
nó nhận giá trị (-1) det Kj i (K* được gọi là ma trận bù đại số của K). Khi đó có
thể chứng tỏ rằng:

24


K-1 = (det K)-1 K*.
Bởi vậy K là khả nghịch.
Ngược lại K có nghịch đảo K-1. theo quy tắc nhân của định thức
1= det I = det (KK-1) = det K det K-1
Bởi vậy det K có nghịch đảo trong Z26.
Ví dụ
Giả sử khoá
11 8

K=

3

Ta tính được

7

7 18

K-1 =


23 11

Giả sử cần mã hoá bản rõ “July”. Ta có hai phần tử của bản rõ để mã hoá: (9,20)
(ứng với Ju) và (11,24) (ứng với ly). Ta tính như sau:
11 8

(9,20

3

7

= (3,4)

11 8



(11,24)

3 7

= (11,22)

Như vậy ta thu được bản mã là DELW. Để giải mã ta sẽ tính
7 18

(3,4)

23 11


= (9,20)

7 18

(11,22)

23 11

= (11,24)

Và ta thu được bản rõ là “July”

25


×