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
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
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
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
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ã
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
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
và
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
Cộng với khoá và modulo 26:
7
15
7
19
22
22
23
15
15
4
11
4
23
19
14
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
Đổ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)
và
m
X
N
Y
A
H
P
O
G
Z
Q
W
B
t
n
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
h
e
z
x
v
p
t
N
O
P
Q
R
S
T
U
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
và
ở đâ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)
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á kK ta xác định
ek(x) = xk
dk(y) = yk -1
và
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
(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)
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
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.
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.
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
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á.
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
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ã