Tải bản đầy đủ (.doc) (13 trang)

Trình bày Hệ mã hóa Merkle – Hellman (Knapsack) Tiểu luận môn AN NINH HỆ THỐNG 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 (726.5 KB, 13 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trình bày Hệ mã hóa
Merkle – Hellman (Knapsack)
GV hướng dẫn: PGS.TS Trịnh Nhật Tiến
Học Viên : Phạm Thị Chanh
MSSV : 12025046
Hà Nội 2013
Bài tiểu luận
Trình bày về Hệ mã hóa Merkle - Hellman (Knapsack):
+ Phương pháp mã hoá Merkle - Hellman. Ví dụ mã hoá Merkle - Hellman.
+ Độ an toàn của mã hoá Merkle - Hellman. Ứng dụng của mã hoá Merkle - Hellman.
+ Chương trình mã hoá Merkle - Hellman (Dùng CT mã nguồn mở hay tự viết CT).
Bài làm
Năm 1978 hai ông Merkle – Hellman đã đề xuất một thuật toán mã hóa mật mã khóa
công khai (PKC – Public Key Cryptosystems) dựa trên bài toán xếp ba lô như sau:
o Cho một tập hợp các số dương s
i
, 1

i

n và một số dương T.
Hãy tìm một tập hợp chỉ số S

{1, 2, …, n} sao cho
Ts
Si
i
=



.
Bài toán này là một bài toán khó, theo nghĩa là chưa tìm được thuật toán nào tốt hơn là
thuật toán thử-vét cạn.
o Thời gian xử lý vét cạn có thể tỉ lệ lũy thừa theo kích thước input
n.
o Ví dụ: (s
1
, s
2
, s
3
, s
4
) = (2, 3, 5, 7) T = 7.
Như vậy ta có hai đáp số: S = (1, 3) và S = (4).
Từ bài toán đóng thùng này chúng ta sẽ khảo sát các khả năng vận dụng để tạo ra thuật
toán mã khối mật mã khóa công khai
o Chọn một vector s = (s
1
, s
2
, …, s
n
) được gọi là vector mang (cargo
vector)
o Với một khối tin x = (x
1
, x
2

, …, x
n
), ta thực hiện phép mã hóa như
sau:
T =

=
n
i
ii
sx
1
(*)
o Việc giải mã là: Cho mã T, vector mang s, tìm các x
i
sao cho thỏa
mãn (*).
Sơ đồ này đã thể hiện một hàm một chiều mà dùng làm sinh mã thì tính toán rõ
ràng hơn nhưng việc giải mã, tức tính hàm ngược của nó là rất khó. Bây giờ ta sẽ tiếp
tục tìm cách dựa vào một cửa bẫy (trapdoor) để việc giải mã có thể làm đuợc dễ dàng
(nếu biết cửa bẫy bí mật).
2
Merkle áp dụng một mẹo dựa trên sử dụng vector mang đặc biệt là vector siêu
tăng (super increasing) như sau.
Một vector là siêu tăng nếu thành phần i+1 là lớn hơn tổng giá trị của các thành
phần đứng truớc nó (1
÷
i). Khi sử dụng một vector siêu tăng làm vector mang thì sẽ
thấy việc tính nguợc, tức là giải bài toán là dễ dàng nhờ một giải thuật tham ăn đơn
giản. Ðiều này đuợc minh họa qua ví dụ bằng số sau.

Ví dụ: Vector siêu tăng s = (1, 2, 4, 8) cho T = 14, ta thấy việc tìm x = (x
1
, x
2
, …, x
n
),
sao cho T =

=
n
i
ii
sx
1
là dễ dàng:
Đặt T = T
0
• x
4
= 1 T
1
= T
0
– x
4
= 14 – 8 = 6  (x
1
, x
2

, x
3
, 1)
• x
3
= 1 T
2
= T
1
– x
3
= 6 – 4 = 2  (x
1
, x
2
, 1, 1)
• x
2
= 1 T
3
= T
2
– x
2
= 2 – 2 = 0  (x
1
, 1, 1, 1)
• x
1
= 0  (0, 1, 1, 1)

Bài toán được giải quyết dần qua các bước
Ở bước i, tổng đích là T
i
(tức là phải tìm các s
j
để tổng bằng T
i
). Ta đem so sánh
T
i
với thành phần lớn nhất trong phần còn lại của vector s, nếu lớn hơn thì thành phần
này được chọn tức là x
i
bằng 1 còn ngược lại thì x
i
tương ứng bằng 0. Sau đó tiếp tục
chuyển sang bước sau với T
i+1
= T
i
– s
i
.
 Mô tả bằng thuật toán
Đầu vào là dãy siêu tăng s = (s
1
, s
2
, …, s
n

)
Begin
For i= n downto 1 do
If T

s
i
then
T = T - s
i
x
i
= 1
else
x
i
= 0
if

=
=
n
i
ii
Tsx
1
then
), ,,(
21 n
xxxx =

là giải pháp cần tìm
Else
3
Không tồn tại giải pháp nào.
End
Mặc dù ta đã thấy sử dụng vector siêu tăng là vector mang cho phép giải mã dễ
dàng nhưng, tất nhiên, ta còn phải làm thế nào để cho chỉ có người chủ mới biết được
và sử dụng nó còn kẻ thù thì không. Tóm lại, cần tạo ra một bí mật cửa bẫy thông qua
việc nguời chủ phải chủ động “ngụy trang” vector siêu tăng để chỉ có anh ta mới biết
còn nguời ngoài không thể lần ra được.
Ý tưởng thuật toán là, dùng dãy siêu tăng để tạo mã, và giải mã bằng một dãy
không phải siêu tăng, tức là dãy siêu tăng đóng vai trò là khóa mật, còn dãy không siêu
tăng đóng vai trò là khóa công khai. Từ đây họ đưa ra cách để biến dãy siêu tăng thành
dãy không có tính chất đó, và việc tìm dãy siêu tăng theo khóa công cộng là bài toán
khó. Một cách biến đổi mà Merkle – Hellman nêu ra là biến đổi dãy siêu tăng theo
modulo nguyên tố p, sao cho:

>
n
i
sp
1
Và phép biến đổi như sau. Chọn số a thỏa mãn
11 −≤≤ pa
. Sau đó xác định thành
phần của dãy:
)(mod psat
ii
⋅=
. Với

ni
≤≤
1
. Dãy
), ,,(
21 n
tttt =
là khóa công khai. Các
giá trị a và p dùng để biến đổi dãy được giữ mật.
 Quá trình tạo Khóa
Alice và Bob muốn trao đổi thông tin mật cho nhau, thì Alice phải thực hiện
quá trình hình thành khóa.
• Alice chọn dãy siêu tăng
( )
n
sss , ,,
21
làm khóa mật
• Chọn một số nguyên tố p, sao cho:

>
n
i
sp
1
và một số nguyên ngẫu
nhiên a gọi là nhân tử sao cho nguyên tố cùng nhau với p và a thỏa mãn
11 −≤≤ pa
.
• Sau đó Alice đi tính khóa công khai

), ,,(
21 n
tttt =
, với
)(mod psat
ii
⋅=
(
i = 1, 2, 3, …n). Alice gửi t cho Bob qua kênh mật.
 Quá trình mã hóa:
4
Khi Bob muốn gửi một thông báo cho Alice, thì Bob tính bản mã theo công
thức:

=
=
n
i
ii
txT
1
Bob gởi bản T cho Alice.
 Quá trình giải mã.
Alice nhận được bản mã T, thì Alice thực hiện giải mã như sau:
1. Để bỏ lớp ngụy trang Alice trước hết tính a
-1
là nghịch đảo của a, tức là: a*a
-1
=
1 mod p rồi tính

)(mod'
1
pTaT

=
2. Alice biết rằng T

= s.x nên có thể dễ dàng giải ra được x theo siêu tăng s.
Thuật toán tìm giá trị nghịch đảo theo modulo đồng dư
Việc xây dựng Knapsack với cửa bẫy đòi hỏi phải tính giá trị nghịch đảo của a
theo modulo p. Thuật toán tìm x = a
-1
mod p, sao cho x*a = 1 mod p được gọi là thuật
toán ước số chung lớn nhất mở rộng (GCD). Sở dĩ như vậy là vì trong khi tìm ước số
chung lớn nhất của hai số nguyên n
1
và n
2
, người ta luôn tính các giá trị a, b sao cho
GCD(n
1
, n
2
) = a*n
1
+ b*n
2
.
Từ đó suy ra nếu ta biết (n
1

, n
2
) = 1 thì thuật toán này sẽ cho ta tìm được a, b
thỏa mãn a*n
1
+ b*n
2
= 1, tức là n
1
chính là nghịch đảo của a theo modulo n
2
.
Sau đây là sơ đồ thuật toán và một ví dụ áp dụng bằng số
5
Ví dụ: Tìm nghịch đảo của 39 theo modulo 11
Đặt n
1
= 39, n
2
= 11. ta có bảng tính minh họa các bước như sau
Ban đầu khởi tạo: a
1
= 1, b
1
= 0, a
2
= 0, b
2
= 1, r = mod(n
1

, n
2
), q = div(n
1
, n
2
),
Cập nhật: n
1
= n
2
, n
2
= r, a
1
= a
2
, b
1
= b
2
, a
2
= a
1
– q*a
2
, b
2
= b

1
- q*b
2
,
n
1
n
2
r q a
1
b
1
a
2
b
2
39 11 6 3 1 0 0 1
11 6 5 1 0 1 1 -3
6 5 1 1 1 -3 -1 4
5 1 -1 4 2 -7
Dễ thấy a = a
2
= 2 chính là nghịch đảo của 39 theo modulo 11.
 Ví dụ về hệ mật Merkle-Hellman
 Tạo Khóa: Giả sử Alice chọn dãy siêu tăng s = (2, 5, 9, 21, 45, 103,
215, 450, 946) có 9 phần tử, dùng để mã hóa một số 9 bít và chọn p = 2003, a =
1289. sao cho

>
n

i
sp
1
và a thỏa mãn
11 −≤≤ pa
.
Alice tính ra khóa công khai t = (575, 436, 1586, 1030, 1921 ,569 ,721, 1183,
1570) với
)(mod psat
ii
⋅=
. Sau đó Alice gửi t cho Bob.
6
 Mã Hóa: Khi Bob muốn gửi cho Alice bản tin x = (1, 0, 1, 1, 0, 0, 1, 1,
1). Thì Bob tính bản mã:

=
=
n
i
ii
txT
1
. Khi đó T = 575 + 1586 + 1030 + 721 + 1183
+ 1570 = 6665. Bob gửi T cho Alice.
 Giải Mã: Alice nhận được bản mã T thì Alice thực hiện giải mã trước
tính a
-1
là nghịch đảo của a rồi tính
)(mod'

1
pTaT

=
= 317.6665 mod 2003 = 1643.
Alice biết rằng T

= s.x nên có thể dễ dàng giải ra được x theo siêu tăng s.
 Ứng dụng của Merkle - Hellman
Kể từ năm 1976, nhiều giải pháp đã được nêu ra nhưng khá nhiều đã bị phá vỡ
chứng minh được là không an toàn. Hệ mã hóa Merkle - Hellman có thể đáp ứng 2
mục đích:
− Bảo mật thông tin và truyền tin.
− Chứng thực và chữ ký điện tử.
Nói chung PKC chậm, không thích hợp cho on-line encryption
− Cần khi yêu cần tính an toàn cao và chấp nhận tốc độ chậm.
− Ngoài ra nguời ta thuờng sử dụng kết hợp PKC (hệ mật khóa công khai) và
SKC (hệ mật khóa đối xứng).
 Chương trình mã hóa PKCMerkleHellman.exe
1. Giới thiệu
7
2. Tạo mã
- Chọn nhập từ tập tin hoặc là nhập bằng tay.
8
- Chọn đến file data đính kèm tập tin Tao Khoa.txt
- Chọn vào Tạo khóa công khai
- Sau đó chọn lưu thành tập tin(ví dụ đặt tên là Khoa Cong Khai.txt ) dùng để mã hóa
dữ liệu.
Tạo dữ liệu để tập tin để lưu khóa công khai (ví dụ đặt tên là Tao Khoa.txt)
- Tập tin Tao khoa.txt có định dạng như sau: (Mảng siểu tăng|số P|SốA) (tập tin này

lưu bằng tay)
9
- Định dạng tập tin khoa cong khai.txt có định dạng như sau: (định dạnh lưu tập tin)
3. Mã Hóa
Chọn nhập từ file hoặc nhập trực tiếp khóa công khai T
10
- Nhập dữ liệu cần mã hóa
Ví dụ : “Bai tieu luan Pham Thi Chanh”
Sau đó chọn vào Mã Hóa
- Sau đó thực hiện lưu lại dữ liệu đã mã hóa thành file (ví dụ đặt tên là Du Lieu Ma
Hoa.txt)
4. Giải mã
11
- Chọn đến tập tin hoặc nhập lại mảng siêu tăng, P, A.
- Chọn đến taạp tin hoặc nhập lại dữ liệu đã được mã hóa. Ở đây chọn 2 tập tin (Tao
Khoa.txt và Du Lieu Ma Hoa.txt)
- Sau đó chọn vào Giải Mã
12
Kết quả giải mã được hiển thị ngay dưới. Kết quả của chương trình giải mã được
thông tin đã gửi đi.
13

×