Trình Bày Hệ Mã Hóa Merkle – Hellman (Knapsack) Tiểu Luận Môn ...

Nội dung

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

ĐẠ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 [...]... 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... 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

Ngày đăng: 21/08/2014, 15:38

Từ khóa » Bài Tập Hệ Mã Knapsack