18
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH --------- ---------- BÁO CÁO TIỂU LUẬN: NGHIÊN CỨU VÀ MÔ PHỎNG THUẬT TOÁN MẬT MÃ MERKLE - HELLMAN GVHD: Ths. Nguyễn Đức Chí Lớp: D11CQVT01 SVTH: Lê Tấn Thịnh Nguyễn Mạnh Huy Nguyễn Minh Hùng

Merkle Hellman #

Embed Size (px)

DESCRIPTION

hệ mật mã Merkle-Hellman và code trên Matlab theo GUI.

Citation preview

Page 1: Merkle Hellman #

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNGCƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH

--------- ----------

BÁO CÁO TIỂU LUẬN:

NGHIÊN CỨU VÀ MÔ PHỎNG THUẬT TOÁN MẬT MÃ

MERKLE - HELLMAN

GVHD: Ths. Nguyễn Đức Chí

Lớp: D11CQVT01

SVTH: Lê Tấn Thịnh

Nguyễn Mạnh Huy

Nguyễn Minh Hùng

Vũ Đình Trung Tín

Lữ Thanh Tùng

Hồ Chí Minh, ngày 29 tháng 3 năm 2015

Page 2: Merkle Hellman #

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNGCƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH

--------- ----------

BÁO CÁO TIỂU LUẬN :

NGHIÊN CỨU VÀ MÔ PHỎNG THUẬT TOÁN MẬT MÃ

MERKLE - HELLMAN

GVHD: Ths. Nguyễn Đức Chí

Lớp: D11CQVT01

SVTH: Lê Tấn Thịnh

Nguyễn Mạnh Huy

Nguyễn Minh Hùng

Vũ Đình Trung Tín

Lữ Thanh Tùng

Hồ Chí Minh, ngày 29 tháng 3 năm 2015

Page 3: Merkle Hellman #

NHẬN XÉT CỦA GIÁO VIÊN

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

...................................................................................................................................

MỤC LỤCI.TỔNG QUAN VỀ THUẬT TOÁN MẬT MÃ MERKLE-HELLMAN...............................................................1

1. Lịch sử hình thành:..................................................................................................................................1

2. Khái niệm:.................................................................................................................................................1

II. CƠ CHẾ HÌNH THÀNH.....................................................................................................................................2

1. Tạo khóa.....................................................................................................................................................3

2. Mã hóa:......................................................................................................................................................3

3. Giải mã:......................................................................................................................................................4

Page 4: Merkle Hellman #

III. ỨNG DỤNG......................................................................................................................................................6

IV. SỰ ĐỔ VỠ CỦA GIẢI PHÁP DÙNG KNAPSACK (1982-1984)...................................................................6

1. Điểm yếu:...................................................................................................................................................6

2. :...................................................................................................................................................................6

IV. MÔ PHỎNG......................................................................................................................................................7

1. Sơ đồ thuật toán:.......................................................................................................................................7

2. Mô phỏng trên Matlab bằng giao diện đồ họa người dùng GUI:.........................................................9

a) Giao diện GUI........................................................................................................................................9

b) Code matlab............................................................................................................................................9

Page 5: Merkle Hellman #

I.TỔNG QUAN VỀ THUẬT TOÁN MẬT MÃ MERKLE-HELLMAN

1. Lịch sử hình thành:

1978, hai ông Merkle – Hellman đã đề xuất một thuật toán mã hóa PKC

(Public Key Cryptosystems-Hệ mã hóa công khai) dựa trên bài toán xếp ba lô.

Sau 2 năm, hệ mật xếp ba lô Merkle-Hellman bị phá vỡ do tính không an

toàn về bảo mật.

2. Khái niệm:

Một hệ mã PKC được tạo nên từ hàm kiểu 1 chiều. Hàm 1 chiều được

hiểu:

Khi cho hàm y = f(x), có x ta tính được y dễ dàng, nhưng khi cho y

ta khó khăn hơn khi tìm ra x

Tính tích 3 số nguyên tố 11,13,17 ra kết quả 2431, nhưng khi cho

a=2431 thì rất khó để tìm 3 số nguyên tố mà tích bằng a.

Theo nền tảng đó, Merkle - Hellman đã đề xuất một thuật toán mã hóa

PKC dựa trên 1 bài toán xếp ba lô như sau:

- Cho 1 tập hợp các số dương s1 , s2 , . .. , sn , 1 ≤ i ≤ n và 1 số z dương. Hãy

tìm 1 tập hợp chỉ số S (1,2,...,n) sao cho s1+s2+. ..+sn=z

VD: Cho (s1 , s2 , s3 , s4)= (1,3,4,5) và z = 8. Vậy ta sẽ có S=(2,4) , S=(1,2,3)

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 PKC. Sơ đồ đầu tiên như sau:

Cho 1 vecto mang a=(a1 , a2 , a3 , a4 )

1 khối tin X= (X1 , X2 , X3 , X 4)

Ta thực hiện phép mã hóa cho ra mã

z = X1∗a1+X 2∗a2+ X3∗a3+X 4∗a4 (1)

Giải mã thì cho z , cho vecto mang và tìm X thỏa mãn (1)

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 1

Page 6: Merkle Hellman #

Đây là 1 hàm 1 chiều với việc tạo mã thì dễ nhưng để giải mã thì cực khó,

là cơ sở để hình thành 1 cửa bẫy. Để mã hóa được dễ dàng hơn thì Merkle sử

dụng 1 vecto mang đặc biệt, đó là vecto mang siêu tăng( Super-increasing).

Super-increasing được hiểu như sau:

-Thành phần i+1 luôn ≥ tổng các thành phần trước đó.

Cho vecto mang siêu tăng s = (1,3,5,10) và z = 11, ta dễ dàng tìm được

X=X1 , X2 , X3 , X 4 sao cho z = X1∗s1+X2∗s2+ X3∗s3+ X4∗s4 như sau:

Đặt z =z0

X 4=1 z1=z0−s4=1 (X1 X 2 X3 1)X3=0 z2=z1=1 (X1 X 2 0 1)

X 2=0 z2=z1=z3=1 (X1 0 0 1)

X1=1 z4=z3−s1=0 (1 0 0 1)

Ở bước i, tổng đích là zi .Ta đem so sánh zi với thành phần lớn nhất trong

phần còn lại của vector, nếu lớn hơn thì thành phần này được chọn tức là X i

tương ứng 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 zi +1 = zi -X i .

Việc quan trọng chính là phải ngụy trang vecto siêu tăng thành 1 vecto

khác để chỉ người chủ biết thôi còn người ngoài không thể nào biết được. Nên

Merkle-Hellman đã nêu ra 1 cách đó là biến đổi dãy siêu tăng theo modulo

nguyên tố p với p > ∑si (1 ≤ i ≤ n).

II. CƠ CHẾ HÌNH THÀNH

Mật mã hóa công khai cho phép người sử dụng trao đổi các thông tin mật

với nhau với khóa cá nhân(PR) được giữ bí mật còn khóa công khai (PU) thì

được đưa ra. 1 hệ thống không thể tìm ra khóa bí mật (PR) nếu chỉ biết khóa

công khai (PU).

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 2

Page 7: Merkle Hellman #

1. Tạo khóa

Khi B muốn gửi thông tin X=(X1 , X2 , X3 , X 4) cho A , thì A phải thực

hiện quá trình tạo khóa. Tạo khóa bằng cách A chọn dãy siêu tăng

(s1 , s2 ,. .. , sn ) làm khóa mật (PR), sau đó A đi tính khóa công khai (PU)

t=( t1 , t2 ,. . ., tn ), với t i=a⋅si( mod p ). A gửi t (PU) cho B qua kênh mật

trước. Khi đó B mới dùng khóa công khai để gửi tin cho A.

Với p là 1 số nguyên tố, a nguyên tố cùng nhau với p và

p > ∑si (1 ≤ i ≤ n) ; 1 ≤ a ≤ p-1

A

2. Mã hóa:

B muốn trao bản tin X=( X 1 , X2 , .. . , Xn ) cho A, thì B tính bản mã K như

sau:

y=∑i=1

n

X i ti

B gửi y cho A

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 3

Sinh khóaKhóa công

khai t (PU)

Dãy siêu tăng s(PR)

Thông tin X

Khóa công khai t (PU)

y

Page 8: Merkle Hellman #

3. Giải mã:

A dùng khóa công khai để mã hóa nhưng lại dùng khóa bí mật để giải mã.

B

Mã hóa

Giải mã

A

A nhận được bản mã K, khi đó A sẽ thực hiện quá trình giải mã:

Tính được z=a−1 y (mod p)

a−1

là nghịch đảo của a theo modulo nguyên tố p

a−1 . a=1 mod p

Lại có z = s.X nên ta dễ dàng tìm lại được thông tin X.

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 4

Thông tin X

Khóa công khai t của A

(PU)

y

Khóa bí mật của A (PR)

Thông tin X

Page 9: Merkle Hellman #

Thuật toán tìm nghịch đảo theo modulo số p.

Việc xây dựng Knapsack với cửa bẫy đòi hỏi phải tínhgiá trị nghịch đảo của a theo modul p.

Thuật toán tìm x = a−1

mod p, sao cho xa = 1 (mod p)được gọi là thuật toán GCD mở rộng hay Euclide mởrộng (GCD - Greatest common divior - ước số chung lớnnhất).

Trong khi đi tìm USCLN của hai số nguyên n1 và n2 người ta sẽ tính

luôn 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 thoả mãn a .n1+b .n2=1 , tức là n1 chính là nghịch

đảo của a theo modulo n2

VD: Tìm nghịch đảo của 39 theo modulo 11

Đặtn1 = 39, n2 =11 , ta có bảng tính như sau:

Khởi tạoa1=1 , b1=0 ,b2=1 ,r=mod(n1 ,n2) ,q=div (n1 , n2 )

Cập nhật n1=n2 , a1=a2 ,b1=b2 ,a2=a1−q∗a2 ,b2=b1−q∗b2

Thấy được a=a2=2 chính là nghịch đảo của 39 theo modulo 11.

*Chúng ta đi tìm hiểu ví dụ nhỏ sau về hệ mật Merkle-Hellman:

Giả sử A chọn dãy siêu tăng s = (2,3,7,15,30) có 5 phần tử, dùng để mã hóa

một số 5 bit và chọn p=59, a=40. A tính ra khóa công khai t = (21,2,44,10,20).

Gởi t cho B qua kênh công cộng.

B muốn gởi cho A bản tin X = (1,1,0,1,1). Thì B tính bản mã:

y = 21+2+10+20=53

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 5

n1 n2 r q a1 b1 a2 b2

39 11 6 3 1 0 0 111 6 5 1 0 1 1 -36 5 1 1 1 -3 -1 45 1 -1 4 2 -7

Page 10: Merkle Hellman #

B gởi y cho A

A nhận được y, và tính z=a−1 y (mod p) = 31*53mod 59 = 50. Tiếp theo A

dùng thuật giải trên để tìm ra x :

X1∗s1+X2∗s2+ X3∗s3+ X4∗s4=z tương ứng với

X1∗2+ X2∗3+X3∗7+ X4∗15+X5∗30=50

Đặt z=z0 X5=1 z1=z0−s5=50−30=20 (X1 X 2 X3 X 4 1)X 4=1 z2=z1−s4=20−15=5 (X1 X 2 X3 1 1)

X3=0 z3=z2=5 (X1 X 2 0 1 1)

X 2=1 z4=z3−s2=5−3=2 (X1 1 0 1 1) X1=1 z5=z4−s1=2−2=0

(1 1 0 1 1)

III. ỨNG DỤNG

Ứng dụng rõ ràng nhất của mật mã hóa Merkle-Hellman nói riêng và khóa

công khai nói chung là bảo mật. một văn bản được mã hóa bằng khóa công khai

của một người sử dụng thì chỉ có thể giải mã với khóa bí mật của người đó.

Các thuật toán tạo chữ ký số khóa công khai có thể dùng để nhận thực. Một

người sử dụng có thể mã hóa văn bản với khóa bí mật của mình. Nếu một người

khác có thể giải mã với khóa công khai của người gửi thì có thể tin rằng văn bản

thực sự xuất phát từ người gắn với khóa công khai đó.

Các đặc điểm trên còn có ích cho nhiều ứng dụng khác như: tiền điện tử,

thỏa thuận khóa.

IV. SỰ ĐỔ VỠ CỦA GIẢI PHÁP DÙNG KNAPSACK (1982-1984)

1. Điểm yếu:

Tồn tại khả năng có người có thể tìm ra khóa bí mật, chưa có thuật toán mã

hóa khóa bất đối xứng nào được chứng minh là an toàn trước các tấn công dựa

trên bản chất toán học. Nhiều điểm yếu của 1 số thuật toán mã hóa khóa bất đối

xứng đã được tìm ra trong quá khứ.

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 6

Page 11: Merkle Hellman #

2. :

Shamir-Adleman đã chỉ ra chỗ yếu của GP này bằng cách đi tìm 1 cặp (s’,p’)

sao cho nó có thể biến đổi ngược a về a’ (từ Public key về Private key).

1984, Brickell tuyên bố sự đổ vỡ của hệ thống Knapsack với dung lượng tính

toán khoảng 1 giờ máy Cray -1, với40 vòng lặp chính và cỡ 100 trọng số.

IV . MÔ PHỎNG 1. Sơ đồ thuật toán:

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 7

Nhập số phần tử của dãy siêu tăng

Nhập dãy siêu tăng

Nhập số nguyên tố p

... số nguyên tố

Nhập 1 ≤ a < p

Tính khóa công cộng(PU)t i=a⋅si( mod p )

Begin

F

T

Page 12: Merkle Hellman #

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 8

Tạo chuỗi bit randomx = rand(1,n)

Bản mã

K=∑i=1

n

X i t i

Quá trình giải mãT=a−1 K (mod p)

i = n→1

T≥si x i=0

T=T−si

x i=1 Thông tin X

End

F

T

Page 13: Merkle Hellman #

2. Mô phỏng trên Matlab bằng giao diện đồ họa người dùng GUI:

a) Giao diện GUI

Bước 1: Nhập số phần tử của dãy siêu tăng s.

Bước 2: Nhập dãy siêu tăng s dựa trên số phần tử đã cho(s1 , s2 ,. .. , sn ) . Bước 3: Bấm (1) – Tính tổng của dãy siêu tăng.

Bước 4: Nhập số nguyên tố p theo điều kiện p > ∑si (1 ≤ i ≤ n), bấm (2) - Kiểm tra xem số vừa nhập có là số nguyên tố không.

Bước 5: Nhập số a, a nguyên tố cùng nhau với p (1 ≤ a ≤ p-1) Bước 6: Bấm (3) – Kết quả sẽ hiển thị rõ ràng trên giao diện.

b) Code matlab

Nút (1), (2), (3) là thực hiện lệnh để hình thành nên bài mô phỏng này trên

matlab

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 9

Page 14: Merkle Hellman #

Code được gán cho nút (1) như sau:

function tinhtong_Callback(hObject, eventdata, handles)n=str2num(get(handles.sophantu,'string'));S=0;%tinh tong day sieu tang nhap vao:s=str2num(get(handles.sieutang,'string'));for j=1:(n) S=S+s(j);end

set(handles.tong,'string',num2str(S));

Code được gán cho nút (2) như sau:

function ktnguyento_Callback(hObject, eventdata, handles)%kiem tra so nguyen top=str2num(get(handles.nguyento,'string'));S=str2num(get(handles.tong,'string'));dem=0;for i=1:p if rem(p,i)==0 dem=dem+1; endend;if p<S disp('So khong phu hop');elseif dem==2 disp('So nguyen to phu hop');else disp('So vua nhap khong phai la so nguyen to');end

Code được gán cho nút (3) như sau:

function run_Callback(hObject, eventdata, handles)a=str2num(get(handles.soa,'string'));n=str2num(get(handles.sophantu,'string'));s=str2num(get(handles.sieutang,'string'));p=str2num(get(handles.nguyento,'string'));c=p;y=0;x=round(rand(1,n));%tao khoa cong khai va tinh ban ma y:for i=1:n t(i)=rem((a*s(i)),p); %tao khoa cong khai y=y+x(i)*t(i); %tinh ban ma yend%qua trinh giai ma: %tinh phan tu nghich dao cua a theo modulo p:b0=0;b1=1;while a>0 r=rem(p,a); if r==0 break; end q=fix(p/a); a1=b0-b1*q;

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 10

Page 15: Merkle Hellman #

p=a; a=r; b0=b1; b1=a1;endif a1<0 a1=a1+c;endz=rem((a1*y),c); %giai ma ban tin bang thuat toan xep ba lo:m=zeros(1,n);for i=n:-1:1 if z>=s(i) z=z-s(i); m(i)=1; else m(i)=0; endend set(handles.phantunghichdao,'string',num2str(a1));set(handles.data,'string',num2str(x));set(handles.khoacongkhai,'string',num2str(t));set(handles.banma,'string',num2str(y));set(handles.ketqua,'string',num2str(m));

Nghiên c u và mô ph ng thu t toán Merkle-Hellmanứ ỏ ậ Trang 11