Chương trình mô phỏng hệ mã hóa Elgamal, bao gồm Mã hóa Giải mã theo Elgamal và Chữ ký số Elgamal.Ngoài ra còn tích hợp 2 công cụ:Tính phần tử nghịch đảo theo Euclid vàTính lũy thừa số lớn theo Bình phương và nhânDemo + Source code Java ở đính kèm
Trang 1TRUYỀN THÔNG
ĐẠI HỌC THÁI NGUYÊN
-O0O -
BÁO CÁO BÀI TẬP LỚN
MÔN: An toàn và bảo mật thông tin
Trang 3LỜI NÓI ĐẦU
Ta biết rằng tin truyền trên mạng rất dễ bị lấy cắp Để đảm bảo việc truyền tin an toàn người ta thường mã hoá thông tin trước khi truyền đi Việc mã hoá thường theo quy tắc nhất định gọi là hệ mật mã
Hiện nay có hai loại hệ mật mã: mật mã cổ điển và mật mã khoá công khai Mật mã cổ điển dễ hiểu, dễ thực thi nhưng độ an toàn không cao Vì giới hạn tính toán chỉ thực hiện trong phạm vi bảng chữ cái sử dụng văn bản cần mã hoá Với các hệ mã cổ điển, nếu biết khoá lập mã hay thuật toán lập mã, người ta có thể "dễ" tìm ra được bản rõ Ngược lại các hệ mật mã khoá công khai cho biết khoá lập mã K và hàm lập mã Ck thì cũng rất "khó" tìm được cách giải mã
Hệ mã hóa với khoá công khai Elgamal được đề xuất năm 1985, dựa vào độ phức tạp của bài toán lôgarit rời rạc Với chủ đề 5, “cài đặt hệ mã Elgamal”, chúng ta sẽ có cái nhìn tổng quan về hệ
mã hóa công khai Elgamal
Nhóm 8
MỤC LỤC
Trang 41.6 Thám mã đối với hệ mật mã elgamal
1.6.1.Thuật toán Shank(cân bằng thời gian)
1.6.2.Thuật toán Pohlig-Hellman
1.7 Thuật toán mật mã khóa bất đối xứng tương lai(Advanced Elgamal)
1.7.1 Thuật toán
1.7.2 quá trình mã hóa
1.7.3 quá trình giải mã
1.7.4.Chứng minh thuật toán
1.7.5 Đánh giá độ phức tạp thuật toán
1.7.6 Kết luận
Phần II : Lập trình (code)
Trang 5PHẦN I: LÝ THUYẾT
1.1.Cơ sở xây dựng hệ mã Elgamal
Hệ mật mã elgamal được xây dựng dựa trên bài toán logarithm rời rạc
Bài toán logarithm được phát biểu như sau:
là phần tử nguyên thủy Giả sử P= Zp* , C= Zp* x Zp* Ta định nghĩa :
Trang 8Kq = 126
= > x =133.126 mod 569 = 257
Vậy người B sau khi giải mã sẽ nhận được bản rõ x= 257
1.4 Ưu nhược điểm của hệ mật mã Elgamal
Do được xây dựng từ bài toán logarithm rời rạc nên hệ mã khó tìm được các loagarithm rời rạc nếu p được chọn cẩn thận Để khó tấn công p phải có ít nhất 150 chữ số và (p-1) phải có ít nhất 1 thừa số nguyên tố lớn
Dung lượng bộ nhớ dành cho việc lưu trữ các bản mã là lớn gấp đôi so với các hệ mã khác
Do việc sử dụng các số nguyên tố nên việc sinh khóa và quản lý khóa cũng khó khăn hơn các
hệ mã khối
1.5 Độ phức tạp của hệ mật mã Elgamal
Theo thời gian: O(p)
Theo không gian:O(1)
1.6 Thám mã đối với hệ mật mã elgamal
1.6.1.Thuật toán Shank(cân bằng thời gian)
Nếu chúng ta có đủ bộ nhớ thì có thể sử dụng bộ nhớ đó để làm giảm thời gian thực hiện của bài toán xuống
Output : cần tìm a sao cho αa mod p = β
Thuật toán:
Bước 2: Sắp xếp các cặp tj: (j, αm.j mod p ) theo αm.j mod p và lưu vào danh sách L1
Trang 9Bước 4: Sắp xếp các cặp ti: (I, β.α-i mod p) theo β.α-i mod p và lưu vào danh sách L2.
Bước 5: Tìm trong hai danh sách L1và L2 xem có tồn tại cặp (j, αm.j mod p) và (I, β.α-i mod p) nào mà αm,j mod p= β.α-i mod p (tọa độ thứ 2 của hai cặp bằng nhau)
Bước 6: a=(m.j+i) mod (p-1)
= > am.j+i mod p = β mod p
= > a=(m.j+i) mod (p-1)
Độ phức tạp thuật toán:
L1 và L2 , đều là các phép toán lũy thừa phụ thuộc vào j và i ; mà j và I lại phụ thuộc vào m nên có thể nhận thấy là thuật toán này chỉ có thể áp dụng trong những trường hợp p nhỏ
Trang 11B2: Sắp xếp các cặp tj theo hướng tăng dần của αm.j mod p
Trang 12B5: Tìm trong hai danh sách L1và L2 xem có tồn tại cặp (j, αm.j mod p) và (I, β.α-i mod p) nào
Ta thấy cặp tj(1,38) và cặp ti(4,38) có tọa độ thứ 2 bằng nhau cùng bằng 38 và cặp tj(5,64) với cặp ti(7,64) có tọa độ thứ 2 bằng 64
= > chon : bộ 1: j=1 ;i=4 ; bộ 2: j=5;i=7
Trang 131 50 55
= > β= 55 đúng theo bài ra )
1.6.2.Thuật toán Pohlig-Hellman
Có những trường hợp đặc biệt mà bài toán Logarithm rời rạc có thể giải quyết với độ phức tạp
với các trường hợp như vậy đã được Pohlig và Hellman đưa ra vào năm 1978
Giả sử, p-1 = 2n
p, p là một số lẻ và α(p-1)/2 mod p= -1 Gọi m là số nguyên thuộc
Trang 14
=
-1 nếu m1=1
toán là : n.(2[log2p]+2) ~O((log2p)2)
1.7 Thuật toán mật mã khóa bất đối xúng tương lai(Advanced Elgamal)
1.7.1 Thuật toán
Thuật toán Elgamal còn nhược điểm khá lớn là tạo ra các văn bản mã giống nhau nếu cùng khối văn bản gốc Điều này là một yếu điểm chung của phương pháp mật mã khóa bất đối xứng, làm giảm tính an toàn của thuật toán vì có thế sự dụng phương pháp thám mã theo xác suất[1,2] Mặt khác, các khối dữ liệu sau mã hóa đi trên mạng, do chủ quan hay khách quan, một vài khối có thế
bị mất đi hoặc thêm vào hoặc bị thay đổi nội dung Nơi nhận hoàn toàn không phát hiện được Thuật toán sau giải quyết vấn đề này
đủ khó Có thể chọn bằng 8, 16, 32, 64 hoặc 128 byte
Bước 2: Thực hiện dịch vòng trái LCS(Left Circular Shift) từng byte của A[i] theo vectơ dịch
SV(Shift Vectơ) thu đưoojwc B[i]
B[i][j]=A[i][j]<<<SV
SV là ma trận hàng gồm n phần tử, mỗi phần tử thỏa điều kiện:
0≤ SV[i] ≤ 7
Trang 15Bước 3: Thu được văn bản sau mã hóa bằng cách:
C[i]=B[i] XOR C[i-1]
Trong đó C[i-1] là văn bản liền trước Sử dụng vectơ khởi tạo IV(Initial Vectơ) cho lần đầu tiên
1.7.3 quá trình giải mã
Bước 1: Tìm B[i] = C[i] XOR C[i-1], sử dụng vectơ khởi tạo IV(Inital Vectơ)cho lần đầu tiên.
A[i][j]=B[i][j]<<< SV
1.7.4.Chứng minh thuật toán
Trước tiên ta cần chứng minh:
Nếu a XOR b = c thì c XOR b = a (1)
a XOR b XOR c = a XOR c XOR b (2)
xy mod z = [x(y mod z)] mod z (3)
Chứng minh(1): Xét bảng chân trị sau
Trang 16So sánh cột 1 và 4, ta thấy (1) đúng với số 1 bit Vì phép XOR thực hiện trên từng bit, nên (1) cũng dúng trong trường hợp a và b là số nhiều bit Vậy (1) đã được chứng minh
Chứng minh(2): Tương tự, xét bảng chân trị sau:
So sánh cột 4 và 5, ta thấy (2) đã được chứng minh
Chứng minh(3): xy mod z = [x(y mod z)] mod z
Trang 17xy= (k+mz) + r3
So sánh với biểu thức(1’) ta được:
(k + mz)x + r3 = nz + r1
Chứng minh thuật toán giải mã:
Theo bước 3 của quá trình mã hóa, ta có:
C[i] = B[i] XOR C[i-1]
Dựa vào (1) suy ra B[i] = C[i] XOR C[i-1]
A[i] = B[i] <<
hóa vào ta có:
Trang 18Thay vào (*) ta thu được
= X[i]
=VP(đpcm)
1.7.5 Đánh giá độ phức tạp thuật toán
Thuật toán phát triển dựa trên độ khó của bài toàn logarit trong Elgama nên vẫn giữ được ưu điểm khó thám mã tương đương với RSA và Elgamal
Để thám mã thành công thuật toán Elgamanl độ dài 64 byte, với máy tính đơn có bộ vi xử
lý PIV 2.6 GHz, cần thời gian 300000 giờ(khoảng 34 năm) Thế nhưng nếu sử dụng mạng gồm
100000 máy thì thời gian thám mã chỉ còn hơn 3 giờ(theo tài liệu tính toán của RSA Inc)
Thuật toán Elgamal giải quyết tốt vấn đề bảo mạt, nhờ sử dụng vectơ dịch SV theo ma trận hàng Một số tính năng ưu việt nổi bật của thuật toán này như sau:
Trang 19Độ bảo mật được tăng cường rất lớn so với các thuật toán khóa mã công khai hiện tại Với
cùng kích thước bài toán 64byte nhu trên, vectơ dịch SV là ma traanj1x64, mỗi phân của SV có giá trị 0 ddeens7 Đế thám mã thành công thuật toán Elgamal, ngoài việc vượt qua độ khó của bài toán logarit như trên, cần phải tìm được chính xác SV Tập không gian SV là
vectơ Theo trung tâm ứng dụng siêu quốc gia MỸ,(12/2003),
trên giây Với hệ thống siêu mạng này, theo ước tính của tác giả, thời gian để tìm ra chính xác SV
độ bảo mật tăng lên vô cùng lớn
Kích thước dữ liệu sau mã hóa không thay đổi So với thuật toán Elgamal, ứng với mỗi dữ
liệu x sẽ cho ra văn bản mã c gồm và Riêng thuật toán Elgamal, chỉ sinh ra văn bản mã C[i]
có kích thước bằng với kích thước văn bản gốc X[i]
Chống thám mã theo xác suất xuất hiện Các phương pháp mã hóa theo mô hình khóa đối
xứng đều có cùng nhược điểm là tạo ra các khối văn bản mã giống nhau với cùng văn bản gốc Nhờ phép XOR với văn bản mã liền trước, Advanced Elgamal sẽ tạo ra các văn bản mã khác nhau cho dù văn bản gốc đầu đều giống nhau Điều nayloại bỏ hoàn toàn thám mã theo xác suất
Nhận ra sự thay đổi dữ liệu trên đường truyền Một ai đó cố tình phá hoại hệ thống bảo mật
bằng cách tạo ra các khối giống với khối văn bản mã, hay cố tình sủa đối nội dung văn bản mã trên đường truyền Theo thuật toán Elgamal và RSA, nơi nhận không phát hiện điều này Kĩ thuật XOR các văn bản mã với nhau trong thuật toán Advanced Elgamal giúp giải quyết triệt để vấn đề này
Tốc độ thực thi cao nhờ sử dụng các phép gần với ngôn ngữ máy(phép dịch vòng, phép
độ bảo mật cao, không cần định danh trước đối tác sử dụng khóa Do đó, khả năng ứng dụng trong thương mại, giao dịch điện tử, thu tín điện tử là rất lớn
Trang 20II PHẦN LẬP TRÌNH (CODE)
// - CODE CHÍNH
-//Mã hóa và giải mã Elgamal:
//Xử lý mã hóa:
public void xulyMahoa ( int alpha , int beta , int p , int k , String banRo ){
System out print("Mã hóa:\n");
int y1 = mod tinhMod ( alpha , k , p );
//y1=alpha^k mod p (Theo Bình phương và nhân)
tBanMa setText (""+( char ) y1 );
for ( int i = ; i banRo length (); i ++){
int x2 [] = new int [ ];
x2 = doi tachSo ((int) banRo charAt ( ));
//Vì giá trị của x2 (bản rõ) có thể lớn hơn P nên cần chia nhỏ x2 ra để xử lý
//Bản mã (y1,y2=x2.beta^k mod p) (Theo Bình phương và nhân)
tBanMa append (""+( char )(( x2 [ ] * mod tinhMod ( beta , k , p )) % p ));
tBanMa append (""+( char )(( x2 [ ] * mod tinhMod ( beta , k , p )) % p ));
}
}
//Xử lý giải mã:
public void xulyGiaima ( int alpha , int p , int a , String banMa ){
System out print("Giải mã:\n");
tBetaGiai setText (""+ mod tinhMod ( alpha , , ));
// Tự sinh beta=alpha^a mod p (Theo Bình phương và nhân)
int y1 =(int) banMa charAt ( );
tBanRo setText ("");
for ( int i = ; i banMa length (); i += 2 ){
//Bản rõ x=y2*y0
//Trong đó y2 là bản mã
//y0=(y1^a)^(-1) mod p (theo Euclid + Bình phương và nhân)
int y0 = dao Calculate ( mod tinhMod ( y1 , a , p ), p );
int ix [] = new int [ ];
ix [ ]=((int) banMa charAt ( ) * y0 ) % p ;
ix [ ]=((int) banMa charAt ( + ) * y0 ) % p ;
int x = doi ghepSo ( ix ); //Ghép cặp sô trên thu được bản rõ ban đầu
tBanRo append (""+( char ) );
}
}
Trang 21//Chữ ký số:
public void Kyten ( int alpha , int a , int p , int k , String vanbanVao ){
int beta = mod tinhMod ( alpha , a , p );
//beta=alpha^a mod p (Theo Bình phương và nhân)
int gama = mod tinhMod ( alpha , k , p );
//gama=alpha^k mod p (Theo Bình phương và nhân)
tChuky1 setText (""+( char ) beta +""+( char ) gama );
int kDao = dao Calculate ( , ( p 1 )); //kĐảo = k^(-1) mod p (theo Euclid)
for ( int i = ; i vanbanVao length (); i ++){
int x [] = new int [ ];
x = doi tachSo ((int) vanbanVao charAt ( ));
//Tách số tương tự Mã hóa và giải mã Elgamal
tChuky1 append (""+( char )(( p 1 )-( Math abs ( [ ]- a gama )* kDao %( p 1 ))));
tChuky1 append (""+( char )(( p 1 )-( Math abs ( [ ]- a gama )* kDao %( p 1 ))));
//chữ ký xichma=(bảnRõ x - a*gama)*kĐảo mod (p-1)
int gama = (int) chuky charAt ( );
int a = mod tinhMod ((int) chuky charAt ( ), gama , );
//ký hiệu a=beta^gama mod p (Theo Bình phương và nhân)
for ( int i = ; i vanbanVao length (); i ++){
int y [] = new int [ ];
//ký hiệu y = a* gama^xichma mod p (Theo Bình phương và nhân)
y 0 ]=( a * mod tinhMod ( gama ,(int) chuky charAt (( i 1 )* 2 ), p )) % p ;
y 1 ]=( a * mod tinhMod ( gama ,(int) chuky charAt (( i 1 )* 2 1 ), p )) % p ;
int x [] = new int [ ];
//Ký hiệu x=gama^chữKý mod p (Theo Bình phương và nhân)
x = doi tachSo ((int) vanbanVao charAt ( ));
int x1 = mod tinhMod ( alpha , x 0 ], p ) % p ;
int x2 = mod tinhMod ( alpha , x 1 ], p ) % p ;
Trang 22TÀI LIỆU THAM KHẢO
[1] Nguyễn Văn Tảo, Hà Thị Thanh, Nguyễn Lan Oanh, bài giảng an toàn và bảo mật thông tin,
2011
[2] Đại học Hàng Hải, giáo trình an toàn và bảo mật thông tin,2008.
[3] Tạp chí khoa học và công nghệ, tập 44,số 2, 2006.
[4] google.com