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

Một số phương pháp mã hóa thông tin và ứng dụng trong xác minh thông tin

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.41 MB, 72 trang )

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ơ khải 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, xác minh thông tin em
đã chọn đề tài một số phương pháp mã hóa thông tin và ứng dụng trong xác

minh thông tin 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ô: 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.

0


MỤC LỤC


NÓI ĐẦU ................................................................................................................0
Chương 1 Một số phương pháp mã hóa thông tin.....................................................4
1.1 Khái niệm hệ mật mã.................................................................................... 4
1.2 Mã hoá và giải mã ........................................................................................ 4
1.2.1 Quy trình mã hoá và giải mã dữ liệu ...................................................... 4
1.2.3 Thuật toán mã hóa phi đối xứng(Puclic-key-Algorithms)....................... 6
1.3 Mật mã cổ điển ........................................................................................... 7
1.3.1

Mã dịch vòng...................................................................................... 7

1.3.2

Mã thay thế ......................................................................................... 8

1.3.3

Mã Affine ..........................................................................................10

1.3.4

Mã Vigenere ......................................................................................11

1.3.5

Hệ mã Hill .........................................................................................13

1.3.6

Hệ mã Hoán vị ...................................................................................15


1.3.6.1 Mô tả..............................................................................................15
1.3.6.2 Đánh giá độ an toàn........................................................................16
1.3.7 Sơ lược về thám mã các hệ mã cổ điển..................................................16
1.3.8 Nhận xét chung về các hệ mật mã cổ điển.............................................17
Chương 2: Một số thuật toán mã hóa công khai .....................................................17
2.1

Giới thiệt chung........................................................................................17

2.2 Một số hệ mã hóa công khai .......................................................................20
2.2.1 Hệ mã Ba Lô (MHK) ...........................................................................20
2.2.1.1 Tạo khoá .........................................................................................20
2.2.1.2 Mã hoá ...........................................................................................21
2.2.1.3 Giải mã...........................................................................................21
2.1.1.4 Ví dụ ..............................................................................................22
2.2.2 Hệ mã RSA...........................................................................................23
2.2.2.1 Tạo khoá .........................................................................................25
1


2.2.2.2 Mã hoá ..........................................................................................25
2.2.2.3 Giải mã...........................................................................................26
2.2.2.4 Ví dụ minh hoạ...............................................................................27
2.2.3

Ðộ an toàn của hệ RSA .....................................................................28

2.2.4


Sơ lược về thám mã RSA....................................................................29

2.2.5

Ứng dụng của hệ mật mã RSA ...........................................................31

2.2.6

Hệ mã ELGAMAL .............................................................................31

2.2.6.1 Mô tả toán họa................................................................................32
2.2.6.2 Quá trình mã học ............................................................................32
2.2.6.3 Quá trình giải mã............................................................................32
Chương 3: Chữ ký điện tử .....................................................................................33
3.1 Giới thiệu về chữ ký điện tử và vấn đề xác nhận.........................................33
3.2 Một số thuật toán ký.....................................................................................35
3.2.1 Thuật toán ký RSA ..............................................................................35
3.2.1.1 Thuật toán sinh khoá : ....................................................................35
3.2.1.2 Thuật toán sinh và xác định chữ ký :...............................................36
3.2.1.3 Tóm tắt lược đồ ký theo RSA : .......................................................36
3.2.2 Thuật toán ký DSA ..............................................................................37
3.2.2.1 Tạo khóa ........................................................................................37
3.2.2.2 Ký .................................................................................................38
3.2.2.3 Xác nhận ........................................................................................38
3.2.2.4 Sự đúng đắn của giải thuật...............................................................38
3.3

Tấn công chữ ký điện tử ...........................................................................39

Chương 4: Kiến trúc mã hóa và các API bảo mật trong Java2 ..............................40

4.1

Những vấn đề liên quan đến bảo mật và mật mã.......................................40

4.2

Vấn đề chứng thực khóa công khai...........................................................43

4.3

Môi trường làm việc của kiến trúc mã hóa trong Java..............................44

4.3.1 JCE và United States Export ................................................................45
4.3.2 Quan hệ giữa Java 2 SDK, JCA và JCE APIs.......................................46
2


4.4

Các API bảo mật trong Java 2...................................................................47

4.4.1 Gói java.security..................................................................................47
4.4.1.1

Các principal...............................................................................47

4.4.1.2

Giao diện Guard và lớp GaurdedObject ......................................47


4.4.1.3

Các Provider ...............................................................................48

4.4.1.4

Lớp Security ...............................................................................49

4.4.1.5

Công việc quản lý khóa...............................................................50

4.4.1.6

Một ví dụ về quản lý kho khóa....................................................52

4.4.1.7

Biến đổi thông điệp và chữ ký điện tử.........................................54

4.4.1.8

Phát sinh số ngẫu nhiên an toàn ..................................................55

4.4.1.9

Lớp SignedObject.......................................................................55

4.4.1.10


vùng bảo vệ ................................................................................56

4.4.1.11

Lớp policy .................................................................................57

4.4.2 Gói java.security.spec ..........................................................................58
4.4.3 Gói java.security.cert ...........................................................................58
4.4.4 Gói java.security.interfaces ..................................................................59
4.4.5 Gói java.security.acl ............................................................................59
Chương 5: Cài đặt chương trình.............................................................................61
5.1

Các bước chuẩn bị cho chương trình.........................................................61

5.2

Giao điện chính của chương trình ............................................................62

5.3

Tạo khóa. ................................................................................................62

5.4

Thực hiện ký .............................................................................................63

5.5 Xác minh chữ ký.........................................................................................64
PHỤ LỤC..............................................................................................................65
KẾT LUẬN ...........................................................................................................69

TÀI LIỆU THAM KHẢO .....................................................................................70

3


ĐÁNH GIÁ, NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ..... Error! Bookmark
not defined.

4


Chương 1 Một số phương pháp mã hóa thông tin.
1.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ể (hay
không thể sử dụng 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.

1.2 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).
1.2.1 Quy trình mã hoá và giải mã dữ liệu
Quản lý khóa

Khoá Ke

DL gốc

Mã hoá

DL mã hoá

Khoá Kd

Giải mã

Quy trình mã hoá dữ liệu
Quy trình thực hiện như sau:
5

DL gốc


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ã.
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).
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.
6


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:
-

Quá trình mã hóa: Ek(P)=C

-


Quá trình giải mã: Dk(C)=P hoặc Dk(Ek(P))=P

Một số hệ mã cổ điển điển hình cho phương pháp mã hóa đối xứng như:
- Mã dịch vòng
- Mã thay thế
- Mã hoán vị
- Mã Affine
- Mã Vigenere
- Mã Hill
- Mã dòng
1.2.3 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 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ữ 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.
7



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:
-

Quá trình mã hóa: Ek1(P)=C

-

Quá trình giải mã: Dk2(C)=P hoặc Dk2(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 điển hình cho phương pháp mã hóa bất đối xứng như:
-

Hệ mã RSA

-

Hệ mã Ba Lô

1.3

Mật mã cổ điển

1.3.1

Mã dịch vòng


1.3.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)

Ví dụ:
Mã hoá:
Giả sử khoá cho mã dịch vòng là K = 11 và bản rõ là :wewillmeetatmidnight
8


Đổ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

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

1.3.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.
1.3.2

Mã thay thế

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

9


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).
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,…

10


1.3.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!, lớn hơn 4x1026 là một số rất lớn. 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.
1.3.3

Mã Affine

1.3.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:
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ệ.
11


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
Để 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”.
1.3.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ỏ.
1.3.4 Mã Vigenere
1.3.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:

12


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)


dk(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

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.
1.3.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 thước lớn
13


hơn 1,1 x 10 27. 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.
1.3.5 Hệ mã Hill
1.3.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
dk(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 Kji (K* được gọi là ma trận bù đại số của K). Khi đó có thể
chứng tỏ rằng:
14



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 7

Ta tính được

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:

(9,20)

11 8
3




(11,24)

= (3,4)

7

11 8
3

= (11,22)

7

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

(3,4)

7 18

= (9,20)

23 11

(11,22)

7 18
23 11

= (11,24)


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


1.3.5.2 Đánh giá độ an toàn
Do không gian khoá nhỏ hơn so với hệ mã Vigenere nên độ an toàn của hệ
mã Hill nhỏ hơn so với hệ mã Vigenere.
1.3.6 Hệ mã Hoán vị
1.3.6.1 Mô tả
Tất cả các hệ mật mã ở trên đều ít nhiều xoay quanh phép thay thế: Các ký tự
của bản rõ được thay thế bằng các ký tự khác trong bản mã. Ý tưởng của Mã Hoán
Vị là giữ các ký tự của bản rõ không thay đổi nhưng sẽ thay đổi vị trí của chúng
bằng cách sắp sếp lại các ký tự này. Thật ra thì sự phân biệt giữa Mã Hoán Vị và mã
Thay Thế đã được Giovani Porta chỉ ra từ năm 1563. Định nghĩa hình thức cho Mã
Hoán vị như sau:
Cho m là một số nguyên dương xác định nào đó. Cho P=C= (Z26)m và cho K
gồm tất cả các hoán vị của {1,…,m}. Đối với một khoá  (tức là một hoán vị)
ta xác định
eπ(x1 ,…, xm) = (xπ(1), …, xπ(m) )
dπ(x1,…,xm) = (yπ -1(1), …, yπ -1(m) )



Trong đó π-1 là hoán vị ngược của hoán vị π

Ví dụ:
Giả sử m = 6 và các phép hoán vị (π ) như sau:
1


2

3

4

5

6

3

5

1

6

4

2

Khi đó phép hoán vị ngược π-1 sẽ là:

1

2

3


4

5

6

3

6

1

5

2

4

16


Bây giờ giả sử ta có bản rõ
Shesellsseashellsbytheseashore
Trước tiên ta nhóm bản rõ thành 6 nhóm các kí tự
Shesel lsseas hellsb ythese ashore
Bây giờ mỗi nhóm 6 chữ cái được sắp xếp lại theo phép hoán vị π ta có:
EESLSH SALSES LSHBLE HSYEET HRAEOS
Như vậy bản mã thu được là: EESLSHSALSESLSHBLEHSYEET HRAEOS
Quá trinh giải mã làm tương tự bằng phép hoán vị đảo π-1
1.3.6.2 Đánh giá độ an toàn

Không giống với Mã Thay Thế ở đây không có các phép toán đại số nào cần
thực hiện khi mã hoá và giải mã nên thích hợp hơn cả là dùng các ký tự mà không
dùng các thặng dư theo modulo 26. Thực tế mã hoán vị là trường hợp đặc biệt của
mật mã Hill.
1.3.7 Sơ lược về thám mã các hệ mã cổ điển
Giả thiết luôn coi đối phương đã biết hệ mật đang dùng. Giả thiết này được
gọi là nguyên lý Kerekhoff. Dĩ nhiên, nếu đối phương không biết hệ mật được dùng
thì nhiệm vụ của anh ta sẽ khó khăn hơn. Tuy nhiên, ta không muốn độ mật của một
hệ mã lại dựa trên một giả thiết không chắc chắn là đối phương không biết hệ mật
được sử dụng. Do đó, mục tiêu trong thiết kế một hệ mật là phải đạt được độ mật
dưới giả thiết Kerekhoff.
Trước tiên ta phân biệt các mức độ tấn công khác nhau vào các hệ mật. Sau
đó là một số loại thông dụng nhất:
-

Chỉ có bản mã: Thám mã chỉ có xâu bản mã y

-

Chỉ có bản mã y và một bản rõ x

-

Bản rõ đã biết được lựa chọn: Một người tấn công có thể truy nhập được vào
hệ thống và chọn một bản rõ x,sau đó mã hoá thành bản mã y tương ứng.

-

Bản mã được lựa chọn: Người tấn công có thể truy nhập được vào hệ thống
và chọn một bản mã y, sau đó giải mã được thành bản rõ x tương ứng.


Trong mỗi trường hợp trên, điều đối tượng cần phải xác định chính là khoá đã sử
dụng. Rõ ràng 4 mức tấn công trên đã được liệt kê theo độ tăng của sức mạnh tấn
17


công. Nhận thấy rằng, tấn công theo bản mã được lựa chọn là thích hợp với các hệ
mật khoá công khai.
Phương pháp chung
Kỹ thuật thám mã sử dụng phương pháp chung là dùng các kỹ thuật thống kê
để tìm tần suất xuất hiện các ký tự và các cụm ký tự.
Đối với các bản mã cần phá, cũng thực hiện phép thống kê tương ứng rồi lần
lượt thử gán các ký hiệu có tần suất xuất hiện tương đương với nhau. Bằng cách
như vậy có thể làm giảm bớt số lần thử.
1.3.8 Nhận xét chung về các hệ mật mã cổ điển
-

Tính bảo mật kém

-

Khoá có thể có nhiều dạng khác nhau nhưng chỉ có một khoá chung duy nhất

cho cả người mã hoá và người giải mã.
- Thuật toán nói chung phải giữ bí mật: ek(x)  dk(y) = ek-1(x)
- Không thể dùng vào mục đích xác thực, không dùng được cho chữ kí điện tử.

Chương 2: Một số thuật toán mã hóa công khai
2.1


Giới thiệt chung
Hệ mật mã hóa khóa công khai là một dạng mật mã hóa cho phép người sử

dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật
trước đó. Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán
học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật).
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa
với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương
đương. Có những thuật toán mật mã khóa bất đối xứng không có tính chất khóa
công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều
cần phải giữ bí mật.

18


Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật trong
khi khóa công khai được phổ biến công khai. Trong 2 khóa, một dùng để mã hóa và
khóa còn lại dùng để giải mã. Đ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.
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:


Mã hóa: Giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải mã



Tạo chữ ký số: Cho phép kiểm tra một văn bản có phải đã được tạo với

được.


một khóa bí mật nào đó hay không.


Thỏa thuận khóa: Cho phép thiết lập khóa dùng để trao đổi thông tin

mật giữa 2 bên.
Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng
tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng những lợi điểm mà
chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng.
Thuật toán mật mã hóa khóa công khai được thiết kế đầu tiên bởi James H.
Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ (Anh) vào đầu thập kỷ
1970. Thuật toán sau này được phát triển và biết đến dưới tên Diffie-Hellman, và là
một trường hợp đặc biệt của RSA. Tuy nhiên những thông tin này chỉ được tiết lộ
vào năm 1997.
Năm 1976, Whitfield Diffie và Martin Hellman công bố một hệ thống mật
mã hóa khóa bất đối xứng trong đó nêu ra phương pháp trao đổi khóa công khai.
Công trình này chịu sự ảnh hưởng từ xuất bản trước đó của Ralph Merkle về phân
phối khóa công khai. Trao đổi khóa Diffie-Hellman là phương pháp có thể áp dụng
trên thực tế đầu tiên để phân phối khóa bí mật thông qua một kênh thông tin không
an toàn. Kỹ thuật thỏa thuận khóa của Merkle có tên là hệ thống câu đố Merkle.
Đối với các hệ mã hoá cổ điển thì nếu biết khoá mã Ek thì cũng biết được
khoá giải Dk. Nói một cách cụ thể thì khoá giải có thể suy ra trực tiếp từ khoá mã
hoặc có thể tính toán từ khoá mã không mấy khó khăn, và ngược lại.

19


Thuật toán mã hoá công khai sử dụng khoá để mã và khoá để giải là khác
nhau. Các khoá này tạo thành một cặp chuyển đổi ngược nhau. Việc biết khoá mã
Ek không nhất thiết làm lộ Dk. Cụ thể hơn người thám mã có thể biết Ek và do đó có

thể tính được Dk, tuy nhiên việc tính Dk từ Ek có thể là bất trị với hầu hết các khoá
k. Do vậy trên thực tế bản mã C vẫn được giữa an toàn mặc dù khoá mã Ek được
công bố rộng dãi. Khoá mã có thể công khai nhưng khoá giải phải được giữ bí mật.
Mặc dù khoá mã (khoá công khai) và khoá giải (khoá riêng) thực hiện các
thao tác ngược nhau và do đó có liên quan đến nhau nhưng phải làm sao để không
thể suy ra khoá riêng từ khoá công khai. Yêu cầu đó có thể đạt được nhờ các hàm
toán học đặc biệt gọi là các hàm sập bẫy một chiều (trapdoor one-way function).
Các hàm này có đặc điểm là không thể chỉ dựa vào mô tả cả hàm mà còn phải biết
được cách xây dựng hàm thì mới có thể suy ra được nghịch đảo của nó.

Người gửi A

P
(Bản rõ)

EK1

Kênh không an
toàn

Người nhận B

C
(Bản mã)

K1
(Khoá công khai)

DK2


P
(Bản rõ)

K2
(Khoá bí mật)

Máy sinh
khoá

Thám mã

Hình 12. Mã hoá công khai

20

Điều kiện
khởi đầu


Hạn chế của giải thuật khóa công khai :
 Tốc độ xử lý :
– Các giải thuật khóa công khai chủ yếu dùng các phép nhân chậm, hơn
nhiều so với các giải thuật đối xứng
– Không thích hợp cho mã hóa thông thường
– Thường dùng trao đổi khóa bí mật đầu phiên truyền tin
 Tính xác thực của khóa công khai :
– Bất cứ ai cũng có thể tạo ra một khóa công bố đó là của một người khác
– Chừng nào việc giả mạo chưa bị phát hiện có thể đọc được nội dung các
thông báo gửi cho người kia
– Cần đảm bảo những người đăng ký khóa là đáng tin.

Một số thuật toán mã hóa khóa công khai được đánh giá cao:
 Diffie-Hellman.
 DSS (Tiêu chuẩn chữ ký số).
 ElGamal.
 Các kỹ thuật Mã hóa đường cong elliptic.
 Các kỹ thuật Thỏa thuật khóa chứng thực bằng mật khẩu.
 Hệ thống mật mã Paillier.
 Thuật toán mã hóa RSA .
Các hệ mã hoá công khai này đều dựa trên cơ sở những vấn đề phức tạp
thuộc lĩnh vực lý thuyết số, đó là các thuật toán số học được thực hiện trên các số
nguyên tố rất lớn.

2.2 Một số hệ mã hóa công khai
2.2.1 Hệ mã Ba Lô (MHK)
2.2.1.1 Tạo khoá
Hệ mật mã ba lô dựa trên sự khó giải của bài toán tổng các tập con
21


Tạo khoá của hệ mã ba lô theo các bước:
Bước 1: Tạo dãy siêu tăng S = (s1, s2,…, sn)
Bước 2: Chọn P (P > 2*Sn)
Bước 3: Chọn a (a  [1, p-1] và (p, a)=1)
Bước 4 : Tính khoá T = (t1, t2,…, tn)
Ti = a * si mod P
cuối cùng ta được khoá chung là T -> công bố
Khoá riêng là (S, P, a) -> bí mật

2.2.1.2 Mã hoá
Bước 1: Nhập bản rõ, tạo khoá.

Bước 2: Đổi xâu bản rõ ra số
Bước 3: Đổi số sang dãy nhị phân Xi
Bước 3: Thực hiện mã hoá theo công thức

2.2.1.3 Giải mã
1: Tính C=a-1y mod p
Bước 2: Chuyển C về một số nhị phân theo cách sau

Si

S1

S2

S3

S4

Xi
C

Nếu C >= Si thì C = C – Si
Và Xi = 1
Nếu không C = C
Và Xi = 0
Nếu C = 0 và Si = S1 thì bài toán có nghiệm
Nếu không bài toán vô nghiệm.
22

S5


S6

S7


Bước 3: Chuyển dãy nhị phân về số
Bước 4: Chuyển số sang xâu ta được bản rõ
2.1.1.4 Ví dụ
Dãy siêu tăng S={1,2,4,9,20,45,90,200}
Chọn P=737
Chọn a=41
Tính Ti = a * Si mod P
T={ 41,82,164,369,83,371,5,126}
Giả sử bản rõ là Z => tương ứng với số 25
25= 11001
X=00011001

Mã hoá: theo hàm

Ta được y = 545
Giải mã
Ta có y=545
a=41=> a-1 =18
Tính C=a-1*y mod p =18*545 mod 737= 229
Tìm dãy nhị phân như sau

Si

1


2

4

9

20

45

90

200

Xi

0

0

0

1

1

0

0


1

C

0

0

0

0

9

29

29

29

Vậy X= 00011001 => 25 = z (đây chính là bản rõ).

23

229


2.2.2 Hệ mã RSA
Một trong những hệ mật mã có khóa công khai ra đời đầu tiên là mật mã

RSA(Rivest Shamir và Adleman). RSA là mã công khai được biết đến nhiều nhất
và sử dụng rộng rãi nhất hiện nay. Nó dựa trên các phép toán lũy thừa trong trường
hữu hạn các số nguyên theo modulo nguyên tố. Cụ thể, mã hoá hay giải mã là các
phép toán luỹ thừa theo modulo số rất lớn. Việc thám mã, tức là tìm khoá riêng khi
biết khoá công khai, dựa trên bài toán khó là phân tích một số rất lớn đó ra thừa số
nguyên tố. Nếu không có thông tin gì, thì ta phải lần lượt kiểm tra tính chia hết của
số đó cho tất cả các số nguyên tố nhỏ hơn căn của nó. Đây là việc làm không khả
thi.
Người ta chứng minh được rằng, phép lũy thừa cần O((log n)3) phép toán,
nên có thể coi lũy thừa là bài toán dễ. Cần chú ý rằng ở đây ta sử dụng các số rất lớn
khoảng 1024 bit, tức là cỡ 10 350. Tính an toàn dựa vào độ khó của bài toán phân tích
ra thừa số các số lớn. Bài toán phân tích ra thừa số yêu cầu O(e log n log log n)
phép toán, đây là bài toán khó..
Hệ mã cổ điển tuy có ưu điểm là mã hóa và giải mã dễ dàng nhưng độ an
toàn thuật toàn rất kém vì thế mà ngày nay người ta không sử dụng hệ mã này nữa.
Thay vào đó là hệ mật mã công khai với độ tin cậy cao. Đặc biệt là hệ mã RSA
được sử dụng tương đối nhiều do độ an toàn cao và khó bị tấn công. Là thuật toán
đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh
dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã trong việc sử dụng khóa công
cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là
đảm bảo an toàn trong trường hợp khóa đủ lớn.
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên
vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán lấy
từ 3 chữ cái đầu của tên 3 tác giả.
Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh làm
việc tại GCHQ, đã mô tả một thuật toán tương tự. Với khả năng tính toán tại thời
điểm đó thì thuật toán này không khả thi và chưa bao giờ được thực nghiệm. Tuy
nhiên, phát minh này chỉ được công bố vào năm 1997 vì được xếp vào loại tuyệt
mật.
24



×