Upload
thinh-lee
View
20
Download
4
Embed Size (px)
DESCRIPTION
hệ mật mã Merkle-Hellman và code trên Matlab theo GUI.
Citation preview
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
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
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
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
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
Đâ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
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
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
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
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
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
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
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
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
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