Bài tiểu luậnTrì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àmNă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:oCho một tập hợp các số dương si, 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 .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.oThời gian xử lý vét cạn có thể tỉ lệ lũy thừa theo kích thước input n.oVí dụ: (s1, s2, s3, s4) = (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 khaioChọn một vector s = (s1, s2, …, sn) được gọi là vector mang (cargo vector)oVới một khối tin x = (x1, x2, …, xn), ta thực hiện phép mã hóa như sau: T = ()oViệc giải mã là: Cho mã T, vector mang s, tìm các xi 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).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
Trang 1ĐẠ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
Trang 2Bà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 si, 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 i S s i T
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ụ: (s1, s2, s3, s4) = (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 = (s1, s2, …, sn) được gọi là vector mang (cargo vector)
o Với một khối tin x = (x1, x2, …, xn), ta thực hiện phép mã hóa như sau:
T =
n
i i i
s x
1
(*)
o Việc giải mã là: Cho mã T, vector mang s, tìm các xi 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)
Trang 3Merkle á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 = (x1, x2, …, xn),
sao cho T =
n
i i
i s x
1
là dễ dàng:
Đặt T = T 0
x4 = 1 T1 = T0 – x4 = 14 – 8 = 6 (x1, x2, x3, 1)
x3 = 1 T2 = T1 – x3 = 6 – 4 = 2 (x1, x2, 1, 1)
x2 = 1 T3 = T2 – x2 = 2 – 2 = 0 (x1, 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à Ti (tức là phải tìm các sj để tổng bằng Ti) Ta đem so sánh
Ti 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à xi bằng 1 còn ngược lại thì xi tương ứng bằng 0 Sau đó tiếp tục chuyển sang bước sau với Ti+1 = Ti – si
Mô tả bằng thuật toán
Đầu vào là dãy siêu tăng s = (s1, s2, …, sn)
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 i
i s T x
1
then
) , , , (x1 x2 x n
x là giải pháp cần tìm Else
Trang 4Khô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
s p
1
Và phép biến đổi như sau Chọn số a thỏa mãn 1 ap 1 Sau đó xác định thành phần của dãy: t i as i (mod p) Với 1 i n Dãy t (t1,t2, ,t n)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 s1 ,s2 , ,s nlàm khóa mật
Chọn một số nguyên tố p, sao cho:
n i
s p
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
1
1 ap
Sau đó Alice đi tính khóa công khai t (t1,t2, ,t n), với
)
(mod p
s
a
t i i ( i = 1, 2, 3, …n) Alice gửi t cho Bob qua kênh mật
Quá trình mã hóa:
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
i
t x T
1
Trang 5Bob 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 T' a 1T(mod p)
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 n1 và n2, người ta luôn tính các giá trị a, b sao cho GCD(n1, n2) = a*n1 + b*n2
Từ đó suy ra nếu ta biết (n1, n2) = 1 thì thuật toán này sẽ cho ta tìm được a, b thỏa mãn a*n1 + b*n2 = 1, tức là n1 chính là nghịch đảo của a theo modulo n2
Sau đây là sơ đồ thuật toán và một ví dụ áp dụng bằng số
Ví dụ: Tìm nghịch đảo của 39 theo modulo 11
Đặt n1 = 39, n2 = 11 ta có bảng tính minh họa các bước như sau
Ban đầu khởi tạo: a1 = 1, b1 = 0, a2 = 0, b2 = 1, r = mod(n1, n2), q = div(n1, n2),
Trang 6Cập nhật: n1 = n2, n2 = r, a1 = a2, b1 = b2, a2 = a1 – q*a2, b2 = b1 - q*b2,
n 1 n 2 r q a 1 b 1 a 2 b 2
Dễ thấy a = a2 = 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
s p
1
và a thỏa mãn 1 ap 1 Alice tính ra khóa công khai t = (575, 436, 1586, 1030, 1921 ,569 ,721, 1183, 1570) với t i as i (mod p) Sau đó Alice gửi t cho Bob
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 i
i t x T
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 ' 1 (mod )
p T
a
T
= 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)
Trang 7 Chương trình mã hóa PKCMerkleHellman.exe
1 Giới thiệu
2 Tạo mã
Trang 8- Chọn nhập từ tập tinhoặc là nhập bằng tay.
- 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
Trang 9- 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)
- Định dạng tập tin khoa cong khai.txt có định dạng như sau: (định dạnh lưu tập tin)
Trang 103 Mã Hóa
Chọn nhập từ file hoặc nhập trực tiếp khóa công khai T
Trang 11- 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ã
Trang 12- 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ã
Trang 13Kế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