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

Nghiên cứu hệ mã khóa công khai và cài đặt hệ mã RSA ứng dụng trong 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.08 MB, 67 trang )

MỤC LỤC
MỤC LỤC ............................................................................................................1
LỜI NÓI ĐẦU ......................................................................................................3
CHƯƠNG 1 ..........................................................................................................4
CƠ SỞ TOÁN HỌC TRONG LÝ THUYẾT MÃ HÓA THÔNG TIN ..................4
1.1. Những kiến thức cơ bản ...............................................................................4
1.1.1. Khái niệm về thuật toán........................................................................4
1.1.2. Độ phức tạp của thuật toán ..................................................................4
1.2. Số nguyên tố................................................................................................6
1.3. Thuật toán Euclid.........................................................................................7
1.4. Phép tính đồng dư và phương pháp tính đồng dư .......................................10
1.4.1. Phép tính đồng dư ..............................................................................10
1.4.2. Tính toán đồng dư của luỹ thừa bậc lớn .............................................11
1.4.3. Định lý trung quốc về phần dư............................................................12
1.5. Thuật toán lũy thừa nhanh..........................................................................15
CHƯƠNG 2 ........................................................................................................ 17
MÃ HÓA VÀ HỆ MÃ HÓA CÔNG KHAI ........................................................ 17
2.1. Giới thiệu chung về mã hóa. ......................................................................17
2.2. Mục tiêu của an toàn bảo mật thông tin......................................................18
2.3. Một số thuật ngữ và khái niệm...................................................................19
2.3.1. Khái niệm hệ mật mã..........................................................................19
2.3.2. Khái niệm mã hoá và giải mã .............................................................19
2.4. Thuật toán mã hóa đối xứng (Symmetric Algorithms)................................20
2.5. Thuật toán mã hóa phi đối xứng(Puclic-key-Algorithms)...........................21
2.6. Thám mã (Cryptanalyis) ............................................................................23
2.7. Một số hệ mã cổ điển.................................................................................25
2.7.1. Mã dịch vòng......................................................................................25
2.7.2. Mã thay thế.........................................................................................26
2.7.3. Mã Affine............................................................................................27
2.7.4. Mã Vigenere.......................................................................................29
2.7.5. Hệ mã Hill..........................................................................................30


2.7.6. Hệ mã Hoán vị ...................................................................................32
2.7.7. Sơ lược về thám mã các hệ mã cổ điển ...............................................33
2.7.8. Nhận xét chung về các hệ mật mã cổ điển...........................................34
2.8. Hệ mã hoá công khai .................................................................................34

1


2.8.1. Giới thiệu ...........................................................................................34
2.8.2 Hệ mã Ba Lô (MHK) ...........................................................................37
2.4.3. Hệ mã hóa công khai RSA ..................................................................39
2.8.4. Hệ mã ELGAMAL ..............................................................................40
CHƯƠNG 3 ........................................................................................................ 42
HỆ MÃ RSA VÀ ỨNG DỤNG CHỮ KÝ ĐIỆN TỬ .......................................... 42
3.1. Hệ mã hóa-RSA.........................................................................................42
3.1.1. Tư tưởng của thuật toán RSA..............................................................43
3.1.2. Giải thuật RSA....................................................................................45
3.2. Chuyển đổi văn bản rõ ...............................................................................48
3.3. Độ an toàn của RSA...................................................................................49
3.4. Một số vấn đề đặt ra trong thực tế..............................................................51
3.4.1. Quá trình tạo khóa .............................................................................51
3.4.2. Tốc độ ................................................................................................52
3.4.3. Phân phối khóa...................................................................................52
3.5. Các phương pháp tấn công hệ mã RSA ......................................................53
3.5.1. Tấn công kiểu duyệt toàn bộ (phương pháp vét cạn)...........................53
3.5.2. Phương pháp toán học........................................................................53
3.5.3. Tấn công dựa trên thời gian (phương pháp phân tích thời gian).........55
3.5.4. Một số chú ý khi dùng hệ mã RSA.......................................................56
3.6. Ứng dụng của hệ mật mã RSA - Chữ ký điện tử ........................................57
3.6.1. Giới thiệu về chữ ký điện tử và vấn đề xác nhận .................................57

3.6.2. Sơ đồ chữ ký RSA ...............................................................................58
3.6.3. Tấn công chữ ký điện tử......................................................................60
CHƯƠNG 4 ........................................................................................................ 62
CÀI ĐẶT CHƯƠNG TRÌNH.............................................................................. 62
KẾT LUẬN......................................................................................................... 66
Nhận xét của giáo viên: .........................................Error! Bookmark not defined.

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.
Là một sinh viên ngành công nghệ thông tin, với mong muốn tìm hiểu các
phương pháp bảo mật thông tin em đã chọn đề tài “NGHIÊN CỨU HỆ MÃ HÓA
CÔNG KHAI VÀ CÀI ĐẶT HỆ MÃ RSA ỨNG DỤNG TRONG 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ô: Bùi Thị Thanh Xuân – Bộ môn khoa học cơ bản 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 TRONG LÝ THUYẾT MÃ HÓA
THÔNG TIN
1.1. Những kiến thức cơ bản
1.1.1. Khái niệm về thuật toán
Thuật toán là một qui tắc để, với những dữ liệu ban đầu đã cho, tìm được lời
giải của bài toán được xét trong một khoảng thời gian hữu hạn.
1.1.2. Độ phức tạp của thuật toán
Dĩ nhiên, thời gian làm việc của máy tính khi chạy một thuật toán nào đó
không chỉ phụ thuộc vào thuật toán, mà còn phụ thuộc vào máy tính sử dụng. Vì
thế, để có một tiêu chuẩn chung, ta sẽ đo độ phức tạp của thuật toán bằng số các
phép tính phải làm khi thực hiện thuật toán. Khi tiến hành cùng một thuật toán, số
các phép phải thực hiện phụ thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào.
Trong những ứng dụng thực tiễn, chúng ta không cần biết chính xác hàm này, mà
chỉ cần biết “cỡ” của chúng, tức là cần có một ước lượng đủ tốt của chúng.
Khi làm việc, máy tính thường ghi các chữ số bằng những bằng đèn “sáng,
tắt”: bằng đèn sáng chỉ số 1, bằng đèn tắt chỉ số 0. Vì thế thuận tiện nhất là dùng hệ
đếm cơ số 2, trong đó để biểu diễn một số, ta chỉ cần dùng hai kí hiệu 0 và 1. một
kí hiệu 0 hoặc 1 được gọi là một bít. Một số nguyên n được biểu diễn bởi k chữ số

0 và 1 được gọi là một số k-bit.
Độ phức tạp của thuật toán được đo bằng số các phép tính bit. Phép tính bit
là một phép tính logic hay số học thực hiện trên các số một bit 0 và 1.
Để ước lượng độ phức tạp của thuật toán, chúng ta dùng khái niệm bậc olớn.
Định nghĩa1.1: Giả sử f(n) và g(n) là hai hàm xác định trên tập hợp các số
nguyên dương. Chúng ta nói f(n) có bậc O-lớn của g(n), và viết f(n)=O(g(n)) hoặc
f=O(g), nếu tồn tại một số C>0 sao cho với n đủ lớn, các hàm f(n) và g(n) đều
dương, đồng thời f(n)
4


Ví dụ:
1) Giả sử f(n) là đa thức
f(n)= adnd + ad-1n d-1 +… + a1n + a0
trong đó ad >0. Dễ chứng minh rằng f(n) = O(nd).
2) Nếu f1(n) = O(g(n)), f2(n) = O(g(n)) thì f1 + f2 = O(g).
3) Nếu f1 = O(g1), f2 = O(g2), thì f1f2 = O(g1g2).
4) Nếu tồn tại giới hạn
lim

n 

f (n)
g ( n)

thì f = O(g).
5) Với mọi số  >0, log n = O (ne).
Định nghĩa 1.2: Một thuật toán được gọi là có độ phức tạp đa thức, hoặc có
thời gian đa thức, nếu số các phép tính cần thiết khi thực hiện thuật toán không

vượt quá O(log d n), trong đó n là độ lớn của đầu vào, và d là số nguyên dương nào
đó.
Nói cách khác, nếu đầu vào là các số k-bit thì thời gian thực hiện thuật toán
là O(kd), tức là tương đương với một đa thức của k.
Các thuật toán với thời gian O(n  ),  > 0, được gọi là các thuật toán với độ
phức tạp mũ, hoặc thời gian mũ.
Khi giải một bài toán nào đó, không chỉ ta cố gắng tìm ra một thuật toán nào
đó, mà còn muốn tìm ra thuật toán tốt nhất. Đánh giá độ phức tạp của thuật toán là
một trong các cách để phân tích, so sánh và tìm ra thuật toán tối ưu. Tuy nhiên, độ
phức tạp không phải là chỉ tiêu duy nhất để đánh giá thuật toán. Có những thuật
toán, về lý thuyết thì có độ phức tạp cao hơn thuật toán khác, nhưng khi sử dụng lại
có kết quả (gần đúng) nhanh hơn nhiều. Điều này còn tuỳ thuộc những bài toán cụ
thể, những mục tiêu cụ thể, và cả kinh nghiệm người sử dụng.
Chúng ta cần lưu ý thêm một điều sau đây. Mặc dù định nghĩa thuật toán mà
chúng ta đưa ra chưa phải là chặt chẽ, nó vẫn còn quá cứng nhắc trong những ứng
dụng thực tế! Bởi vậy, chúng ta còn cần đến các thuật toán xác suất, tức là các
thuật toán phụ thuộc vào một hay nhiều tham số ngẫu nhiên. Những thuật toán này,
về nguyên tắc không được gọi là thuật toán, vì chúng có thể với xác suất rất bé,

5


không bao giờ kết thúc. Tuy nhiên, thực nghiệm chỉ ra rằng, các thuật toán xác suất
thường hữu hiệu hơn các thuật toán không xác suất. Thậm chí, trong rất nhiều
trường hợp, chỉ có thuật toán xác suất như thế mới sử dụng được.
Khi làm việc với các thuật toán xác suất, ta thường hay phải sử dụng các số
ngẫu nhiên. Khái niệm chọn số ngẫu nhiên cũng cần được chính xác hoá, thường
thì người ta sử dụng một máy sản xuất số giả ngẫu nhiên nào đó.
Để hình dung được độ phức tạp của các thuật toán khi làm việc với các số
lớn, ta xem bảng sau cho khoảng thời gian cần thiết để phân tích một số nguyên n

ra thừa số nguyên tố bằng thuật toán nhanh nhất được biết hiện nay (1 triệu phép
tính trong 1 giây).
Số chữ số thập phân

Số phép tính bit

Thời gian

50

1,4.10 10

3,9 giờ

75

9,0.10 12

104 ngày

100

2,3.10 15

74 năm

200

1,2.10 23


3,8.109 năm

300

1,5.10 29

4,9.1015năm

500

1,3.10 39

4,2.1025năm

1.2. Số nguyên tố
Số nguyên tố là số nguyên lớn hơn 1, không chia hết cho số nguyên dương
nào ngoài 1 và chính nó. Số nguyên lớn hơn 1 không phải là số nguyên tố được gọi
là hợp số.
Bài toán xác định số cho trước có phải là số nguyên tố hay không có nhiều
ứng dụng trong thực tiễn. Đối với những số nhỏ, bài toán dĩ nhiên là không có gì
khó. Tuy nhiên, khi làm việc với các số lớn ta cần phải tìm ra những thuật toán hữu
hiệu, nghĩa là có thể thực hiện trên máy tính trong một khoảng thời gian chấp nhận
được. Khi nói đến những số lớn ta thường hiểu là những số nguyên dương có
khoảng 100 chữ số thập phân trở lên.
Để có thể tìm ra những thuật toán xác định nhanh một số có phải là số
nguyên tố hay không ta cần phải hiểu sâu sắc tính chất các số nguyên tố.
Mọi hợp số n đều có ước nguyên tố nhỏ hơn

6


n.


Thật vậy, vì n là hợp số nên ta có thể viết n = ab, trong đó a và b là các số
nguyên với 1  a  b  n . Rõ ràng ta phải có a hoặc b không vượt quá

n , giả sử

đó là a. Ước nguyên tố của a cũng đồng thời là ước nguyên tố của n.
Từ định lý trên ta có thuật toán sau đây để tìm các số nguyên tố nhỏ hơn
hoặc bằng số n cho trước.
Phương pháp sàng Eratosthenes: Trước tiên ta viết dãy các số tự nhiên từ 1
đến n. Trong dãy đó gạch số 1 đi, vì nó không phải là số nguyên tố. Số nguyên tố
đầu tiên của dãy là 2. Tiếp theo ta gạch hết số chia hết cho 2 trong dãy. Số đầu tiên
không chia hết cho 2 là số 3 đó chính là số nguyên tố.
Ta lại gạch hết số trong dãy chia hết cho 3. Tiếp tục như thế ta gạch hết
những số chia hết cho mọi số nguyên tố nhỏ hơn

n.

Theo định lý trên, những số còn lại của dãy là tất cả các số nguyên tố không
vượt quá n.
Thật vậy, các hợp số không vượt quá n, theo định lý trên, đều phải có ước
nguyên tố nhỏ hơn

n , và do đó đã bị gạch khỏi dãy số trong một bước nào đó của

thuật toán.
Sàng Eratosthenes, mặc dù cho ta thuật toán xác định số nguyên tố không
vượt quá số cho trước rất ít dùng cho xác định xem một số đã cho có phải là số

nguyên tố hay không. Nguyên nhân là vì thuật toán có độ phức tạp quá lớn. Để
kiểm tra n, ta phải thực hiện phép chia cho tất cả các số nguyên tố không vượt quá
n.

1.3. Thuật toán Euclid
Một trong những thuật toán cơ bản lâu đời nhất của toán học là thuật toán
Euclid. Thuật toán đó cho phép xác định ước chung lớn nhất của hai số nguyên cho
trước.
Khi trình bày thuật toán Euclid ta nhắc lại sơ qua về khái niệm đồng dư và
các tính chất cơ bản của ước chung lớn nhất của hai số nguyên cho trước.
Giả sử m là một số nguyên dương. Ta lại nói hai số nguyên a và b là đồng
dư với nhau modulo m nếu m chia hết hiệu a-b (a  b(mod m).
vậy a  b (mod m) khi và chỉ khi tồn tại số nguyên k sao cho a = b +km

7


Quan hệ đồng dư là một trong những quan hệ cơ bản của số học, và ta sẽ
gặp thường xuyên trong những ứng dụng toán học trong tin học. Trong thuật
toán Euclid ta chỉ dùng quan hệ đó để diễn đạt ngắn gọn về phần dư của một
phép chia.
Thuật toán Euclid
Thuật toán tìm ước chung lớn nhất (UCLN) d của hai số nguyên không âm a
và b (kí hiệu là d = (a,b)).
Nếu b = 0, in ra a và kết thúc thuật toán.
Đặt r  a mod b, a  b, b  r, và quay về bước 1
Ví dụ: d = (24,63) bằng thuật toán Euclid
Ta có d = (24,63) = (15,24) = (9,15) = (6,9) = (3,6) = (0,3) = 3.
Số phép chia cần thiết để tìm UCLN của hai số nguyên dương bằng thuật
toán Euclid không vượt quá 5 lần số chữ số thập phân của hai số bé trong hai số

đã cho.
Thuật toán Euclid mở rộng
cho hai số nguyên không âm v, u tìm (u1,u2,u3) sao cho
(u,v)= u 3 = uu1+vu2
Trong tính toán, ta thêm vào các ẩn phụ (v1,v2,v3), (t1,t2,t3) và luôn có trong
mọi bước các đẳng thức sau đây:
ut1 + vt2 = t3, uv3 + vv = v3, uu1 + vu2 = u 3
ed 1. (xuất phát). Đặt (u1,u 2,u3)  (1,0,u), (v1,v2,v3)  (1,0,v).
ed 2. (kiểm tra v3 =0 ?) nếu v3=0, thuật toán kết thúc.
u 

ed 3. (chia trừ). đặt q   3  ,và sau đó đặt
 v3 
(t1,t2,t3)  (u1,u2,u3) - q (v1,v2,v3),
(u1,u 2,u3)  (v1,v2,v3), (v1,v2,v3)  (t1,t2,t3)
Và quay về bước hai.
Ví dụ: Ta tính UCLN của hai số 781 và 330 (781,330)
781 = 2*330 +121
330 = 2*121+88
121 = 1*88+33

8


88 = 2*33+11
33 = 1*22+11
22 = 2*11+0
Vì số chia trong phép chia cuối cùng là 11 cho nên UCLN(781,330) =11.
Phi hàm euler
Trong các hàm số học, hàm Euler mà ta định nghĩa sau đây có vai trò quan

trọng.
Định nghĩa: 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
Với n  N , số lượng các số tự nhiên bé hơn n và nguyên tố cùng nhau với n
được ký hiệu là  n  . Ví dụ  5 =4,  6 =2,  7 =6. Rõ ràng, khi p là số nguyên
tố thì mọi số tự nhiên bé hơn nó đều là số nguyên tố cùng nhau với nó và do đó ta
có   p   p  1 . Tổng quát hơn, khi p là số nguyên tố và r là một số tự nhiên bất kì
thì   p r   p r  p  1  p r 1  1 p  .




Có thể chứng minh được rằng khi mã hoá m,n là các số nguyên tố cùng nhau
thì ta có
 mn    m . n  .

Và do đó để tính  của một số tự nhiên nào đó người ta phân tích nó ra
các thừa số nguyên tố rồi áp dụng các công thức trên.
Ví dụ:
 720   2 4.32.5   2 4 . 32 . 5  2 3 2  133  15  1  192 .

Ta biết rằng việc phân tích các số lớn thành thừa số nguyên tố là rất gian nan,
cho nên việc tính phi hàm của một số lớn cũng như vậy.
Nếu định lý Fermat bé cho ta công cụ nghiên cứu đồng dư modulo một số
nguyên tố, thì phi hàm Euler được dùng để xét đồng dư modulo một hợp số. Trước
khi đi vào vấn đề đó ta xét định nghĩa sau:

9



Một thặng dư thu gọn modulo n là một tập hợp  n  số nguyên sao cho mỗi
phần tử của tập hợp nguyên tố cùng nhau với n, và không có hai phần tử nào đồng
dư với nhau modulo n.
Nói cách khác từ hệ thặng dư đầy đủ modulo nguyên tố, để thành lập hệ thặng
dư thu gọn ta chỉ giữ lại số nào nguyên tố cùng nhau với n.
Ví dụ:
Các số 1, 2, 3, 4, 5, 6 thành lập hệ thặng dư modulo 7. Đối với modulo 8, ta
có thể lấy 1, 3, 5,7.
Định lý mở rộng của định lý Fermat bé
Nếu r1, r2, …, r n  là một hệ thặng dư thu gọn modulo nguyên tố, và a là số
nguyên dương, (a, n) =1, thì tập hợp ar1, ar2, …, a r n  cũng là hệ thặng dư thu gọn
modulo n.
Định lý Euler có thể dùng để tìm nghịch đảo của modulo m. Chẳng hạn nếu
a và m là các số nguyên tố cùng nhau, ta có a a  m 1bmod m  , tức là a m 1 chính là
nghịch đảo của a mod m. Từ đó cũng suy ra nghiệm phương trình đồng dư tuyến
tính ax = b(mod m), với (a, m)=1 là:
x  a  m 1bmod m 

1.4. Phép tính đồng dư và phương pháp tính đồng dư
1.4.1. Phép tính đồng dư
Có hai cách hiểu về đồng dư: Một của các nhà số học và một của các
chuyên gia máy tính. Các nhà số học nói rằng a  bmod m  nếu như a và b sai
khác nhau một bội của m, còn các chuyên gia máy tính thì bảo rằng a(mod
m)=b nếu như số tìm được trong phép chia a và b cho m là bằng nhau. Tuy
nhiên hai cách hiểu đều có cùng bản chất nên ta không ngại khả năng nhầm
lẫn, mà chỉ nên lưu ý khi làm việc ở đâu thì nói như thế nào. Trong tài liệu này
ta sẽ dùng cách nói của các nhà toán học.
Phép tính đồng dư theo mod m dẫn đến việc tách lập số nguyên ra thành m
lớp, mỗi lớp chưa các số nguyên đồng dư với nhau theo modulo m. Tập các lớp
này được ký hiệu là Z/mZ và chứa đúng m phần tử. Mỗi lớp trong tập Z/mZ có


10


đúng một số nằm trong đoạn 0, m  1, cho nên mỗi số nguyên trong đoạn này được
xem như “đại diện” của một lớp.
Một số tính chất của phép tính đồng dư:
Nếu a  a(mod m);
Nếu a  b(mod m)thì b  a(mod m);
Nếu a  b(mod m)và b  c(mod m);thì a  c(mod m);
Nếu a  b (mod m) và c  d (mod m);
thì a  c  b  d (mod m), a.c  b.d(mod m);
Như vậy ta có thể tự do thực hiện các phép tính số học thông thường trên
tập Z/mZ.
Nếu x là một phần tử trong Z/mZ và UCLN(x,m) =1 thì tồn tại các số u,v
sao cho ux+vm=1, tức là u.x  1(mod m), nên người ta nói x có nghịch đảo (trong
Z/mZ) là u, và thường ký hiệu phần tử nghịch đảo này là x-1, hay là 1 / x .
Ví dụ:
Xét vành Z/9Z = {0,1,2,..8}. Để tìm phần tử nghịch đảo của 7 (tức là 1/7) ta
dùng thuật toán Euclid mở rộng, tức 0 là phân tích
9 = 1.7 + 2,7 = 3.2 + 1,2 = 2.1 + 0,
rồi thế ngược trở lại ta có
1 = 7 - 3.2 = 7- 3.(9-1.7) = 4.7- 3.9
Và suy ra 4.7  1(mod 9), hay là 7-1 = 4(mod 9).
Tập các phần tử trong Z/mZ mà có nghiệm nghịch đảo thường được ký hiệu
là Z/mZ*. Rõ ràng tập này có số phần tử bằng  m  , và trên tập này, ngoài phép
tính cộng trừ, nhân ta còn có thể đưa vào phép chia.
1.4.2. Tính toán đồng dư của luỹ thừa bậc lớn
Như đã thấy, hệ quả của định lý Euler có thể giúp ta giảm nhẹ việc tính toán
đồng dư của luỹ thừa (bậc cao) một cách rất đáng kể. Tuy nhiên nó chỉ thực sự

hiệu quả khi a lớn hẳn hơn  m  , vì chỉ khi ấy thì b mới thực sự nhỏ hơn a. Trong
thực tế tính toán cũng thường đòi hỏi ta phải làm việc với những số m lớn, và cũng
thường kéo theo  m  khá lớn, thậm chí lớn hơn a. Khi ấy người ta phải dùng các
kỹ thuật khác, và một trong những cách hay được dùng nhất là phương pháp bình
phương liên tiếp sau đây.

11


Để hiểu rõ phương pháp này, ta chỉ cần đưa ra một ví dụ minh họa: Tính
8743(mod 103). Nếu làm song phép tính luỹ thừa mới tính đồng dư thì không
những sẽ phải làm việc với những số lớn, mà còn gặp nguy hiểm ở chỗ tràn bộ
nhớ. Muốn tránh điều này, người ta tiến hành khai triển số mũ dưới dạng cơ số 2,
tức là:
43 =32 + 8 + 2 + 1 = 25 + 23 + 21 + 2 0,

(*)

Rồi liên tiếp tính các đồng dư bình phương như sau:
87 (mod 103) = 87
872 (mod103) = 50
87 4 (mod103) = 502 (mod103) = 28
87 8 (mod103) = 282 (mod103) = 63
87 16 (mod103) = 632 (mod103) = 55
87 32 (mod103) = 55 (mod103) = 38
Sau đó tổng hợp lại, căn cứ vào khai triển (*), ta lấy tích của các luỹ thừa bậc
25,23,21,20 (rút gọn theo modulo 103) và sẽ thu được kết quả là:
87 43 (mod 103) = 38*63*50*87 (mod103) = 85.
Theo cách này chỉ cần làm việc với những số vừa và nhỏ, không những nhanh
mà còn có thể làm việc trên máy tính bấm tay.

1.4. 3. Định lý trung quốc về phần dư
Giả sử m1, m2,…,mr là các số nguyên dương n cùng nhau từng cặp. Khi đó hệ
đồng dư:
x  a1 (mod m1)
x  a2 (mod m2)

x  ar (mod mr)
Có nghiệm duy nhất modulo m = m1m2…mk-1mk+1…mr.
Định lý phần dư được sử dụng trong máy tính để làm việc với những số lớn.
Để đưa một số quyền lớn tuỳ vào máy tính và làm các phép tính số học với chúng, ta
cần có những kĩ thuật đặc biệt. Theo định lý này khi cho trước các modulo n cùng
nhau m1,m2,…,mr, một số dương n < m = m1,m2,…,mr được xác định duy nhất bởi
các thặng dư bé nhất của nó theo modulo mj với j = 1, 2, 3 …r. Giả sử rằng cỡ từ của

12


máy chỉ là 100 nhưng ta cần làm phép tính số học với những con số nguyên cỡ 106.
Trước tiên ta tìm các số nguyên nhỏ hơn 100, nguyên tố cùng nhau từng cặp, sao cho
tích chúng vượt quá 106. Chẳng hạn, ta có thể lấy m1 = 99, m2 = 98, m3 = 97, m4 =
95. Ta chuyển các số nguyên bé hơn 106 thành những bộ 4 số theo thặng dư dương
bé nhất modulo m1,m2,m3,m4 (để làm điều này, ta cũng phải làm việc với những số
nguyên lớn hơn! Tuy nhiên điều đó chỉ cần làm với đầu vào, và một lần nữa với đầu
ra). Như vậy, chẳng hạn để cộng các số nguyên, ta chỉ cần cộng các thặng dư dương
bé nhất của chúng modulo m1,m2,m3,m4. sau đó lại dùng lại định lý về phần dư để tìm
bộ 4 số tương ứng với tổng.
Ví dụ:
Ta muốn tính tổng x = 123684, y = 413456 với máy tính cỡ từ là 100.
Ta có:
x = 33 (mod 99), 8 (mod 98), 9 (mod 97), 89 (mod 95),

y = 32 (mod 99), 92 (mod 98), 42 (mod 97),16 (mod 95).
Như vậy;
x + y = 65 (mod 99), 2 (mod 98), 51 (mod 97), 10 (mod 95).
Bây giờ ta dùng định lý về phần dư để tìm (x + y) modulo m = 99.98.97.95 =
89403930.
Ta có:
m1 =

M
= 903070, m2
99

m3 =

M
M
= 921690, m4 =
= 941094
97
95

=

M
= 912288
98

Ta cần tìm ngược của mi (mod yj) với i = 1,2,3,4, tức là giải hệ phương trình
đồng dư sau đây (bằng thuật toán Euclid):
936070y1  91y1  1 (mod 99)

912285y1  3y1  1 (mod 98)
921690y1  93y1  1 (mod 97)
Ta tìm được:
y1  37 (mod 99), y2  38 (mod 98), y3 = 24 (mod 97), y4 = 4 (mod 95).
Như vậy:
x + y = 65.903070.37 + 2.912285.33 + 51.921690.24 + 10.941094.4

13


= 3397886480  537140 (mod 89403930).
Vì 0 < x + y < 89403930, ta suy ra x + y = 537140.
Nói chung cỡ của máy tính là luỹ thừa rất lớn của 2, chẳng hạn 2 35. Như
vậy, để sử dụng định lý phần dư ta cần các số nhỏ hơn 235 nguyên tố cùng nhau
từng cặp. Để tìm các số như vậy, thuận tiện nhất là dùng các số dạng 2 m - 1, trong
đó m là số nguyên dương. Các phép tính như vậy tương đối đơn giản dựa vào bổ đề
sau:
Bổ đề: Nếu a và b là các số nguyên dương thì thặng dư dương bé nhất
modulo 2b - 1 của 2a - 1 là 2r - 1, trong đó r là thặng dư dương bé nhất của a
modulo b.
Thật vậy, nếu a = bq+r, trong đó r là thặng dư dương bé nhất của a modulo
b, thì ta có.
(2a-1) = (2bq+r-1) = (2b-1) (2 b(q-1)+r+2…+2b+r+2r)+(2r-1)
Hệ quả: Các số nguyên 2 a-1 và 2b-1 nguyên tố cùng nhau khi và chỉ khi a và
b nguyên tố cùng nhau.
Ta có thể dùng hệ quả trên đây tính các số nhỏ hơn 235, nguyên tố cùng
nhau từng cặp, sao cho tích của chúng lớn hơn một số đã cho. Giả sử ta cần tính
phép tính số học với con số nguyên với cỡ 2184. Ta đặt:
M1=235-1, m2=234-1,m3=233-1,
M4=231-1, m5=229-1, m6=223-1.

Tỉ số mũ của 2 trong các số nguyên tố cùng nhau từng cặp, nên theo hệ quả
trên, các số đã chọn cũng nguyên tố cùng nhau từng cặp. Ta có:
m1 m 2 m3 m 4 m5 m6 > 2184.
Bây giờ ta có thể làm phép tính số học với những số cỡ đến 2184.
Trong các máy tính hiện đại, việc thực hiện nhiều phép tính được tiến
hành đồng thời. Vì thế việc sử dụng định lý Trung Quốc về phần dư trên lại
càng tiện lợi: Thay cho việc làm việc với các số nguyên tố lớn, ta làm nhiều
phép tính đồng thời với những số nguyên tố bé hơn. Điều đó giảm đáng kể thời
gian tính toán.
Thuật toán giải phương trình đồng dư bằng định lý Trung Quốc

14


Từ chứng minh định lý Trung Quốc về phần dư, ta có thuật toán sau đây để
giải hệ phương trình đồng dư x  xi mod mi  , trong đó mi, 1  i  k là các số
nguyên tố cùng nhau từng cặp, xi là các số nguyên cho trước. Trong thuật toán
trình bày sau đây, chúng ta đã tìm ra cách để tránh phải làm việc với các số lớn như
mi và ami.
Thuật toán giải phương trình đồng dư bằng định lý Trung Quốc:
1. (xuất phát). Đặt j  2, c1  1. Hơn nữa ta sắp xếp lại các số mi theo thứ
tự tăng dần.
2. (tính toán sơ bộ). Đặt p  m1m2m3... mj-1(mod mj). Tính (u,v,d) sao cho up
+ mvj = d = ucln(p, mj) bằng thuật toán euclid mở rộng.
ed. Nếu d >1, in ra thông báo: Các mi không nguyên tố cùng nhau từng cặp.
Nếu ngược lại, đặt cj  u, j  j + 1 và chuyển sang bước 3 nếu j  k .
3. (tính các bảng số phụ). đặt y1  x1 mod m1, và mỗi j = 2,3,...,k tính
Yj = (xj –(y1+m1(y2 +m2(y3 +...+mj-2yp-1)))) mod mj
4. (kết thúc). In ra x 
 y1+mi(y2+m2(y3+...+mk-1yk)), và kết thúc thuật toán

1.5. 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}.
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

k 1

Đầu tiên gán biến C = 1, sau đó duyệt từng gía trị bít, 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

15



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ị bít 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

16


CHƯƠNG 2

MÃ HÓA VÀ HỆ MÃ HÓA CÔNG KHAI
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.
1) 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 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ữ 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,

17


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.2 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.
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.

18


2.3. Một số thuật ngữ và khái niệm
2.3.1. 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.3.2. Khái niệm 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).
Bản rõ (Plain text): Nội dung của văn bản cần trao đổi
Khóa (key): Là bí quyết của việc lập mã và giải mã
Hệ mã đối xứng: Là hệ mã mà quá trình lập mã và giải mã sử dụng chung một
khóa
Hệ mã phi đối xứng: Là hệ mã mà quá trình lập mã và giải mã sử dụng khóa
khác nhau
Quy trình mã hoá và giải mã dữ liệu
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ã.

19


Khoá Ke

DL gốc

Mã hoá


Quản lý khóa

DL mã hoá

Khoá Kd

Giải mã

DL gốc

Quy trình mã hoá dữ liệu
2.4. 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 (được thể hiện dưới hình dưới) đâ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.

Hình 3. 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).

20


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
2.5. 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à Public Key, khoá để giải mã
được gọi là Private Key.
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 key 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. Private key bạn cần phải dữ

21


riêng và đảm bảo tính bảo mật và nó không truyền trên mạng. Public key được
cung cấp miễn phí và được công bố rộng rãi cho mọi người.

Hình 4. 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
Dk 2(C)=P
Dk 2(Ek1(P))=P
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ật mã RSA: Độ bảo mật của hệ RSA dựa trên độ khó của việc phân
tích ra thừa số nguyên tố các số nguyên tố lớn.
- Hệ mật xếp balô MHK: Hệ này và các hệ có liên quan dựa trên tính khó
giải của bài toán tổng các tập con
- Hệ mật ElGamal: dựa trên tính khó giải của bài toán logarit rời rạc trên các
trường hữu hạn.
- Hệ mật McEliece: Hệ mật này dựa trên lý thuyết mã đại số và vẫn được
coi là an toàn. Hệ mật McEliece dựa trên bài toán giải mã cho các mã tuyến tính.
- Hệ mật Chor-Rivest: Hệ mật Chor-Rivest cũng được xem như hệ mật xếp
balô. Tuy nhiên hệ mật này cũng được xem là an toàn.

- Hệ mật trên các đường cong Elliptic:Các hệ này là biến tướng của các hệ
mật khác, chúng làm việc trên các đường cong Elliptic chứ không phải trên các
trường hữu hạn. Hệ mật này đảm bảo độ mật với khoá số nhỏ hơn các hệ mật khoá
công khai khác.

22


2.6. 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á:
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
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(P2),... 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(Pi+1)
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

23


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(P2),... 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)
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: P 1, C1=Ek(P 1), P2, C2=Ek(P2),... Pi, Ci=Ek(Pi), người thám mã được

chọn P 1, 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)
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á 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...
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, P i=Dk(Ci)
Cần tìm: k
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

24


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ử.
2.7. Một số hệ mã cổ điển
2.7.1. Mã dịch vòng
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

25


×