Việc sử dụng chữ kí số ngày càng có nhiều ứng dụng trong thực tế, không chỉ giới hạn trong Ngành Công Nghệ Thông Tin , Ngành Mật Mã mà còn được áp dụng trong một số lĩnh vực khác như tro
Trang 1mở đầu
Trong mật mã vấn đề bảo mật luôn đi đôi với vấn đề xác thực
thông tin, đặc biệt trong hệ thống mã khoá công khai vấn đề xác thực là vô cùng quan trọng Để giải quyết được vấn đề xác thực người ta đưa ra một cách vừa đơn giản vừa hiệu quả là sử dụng chữ kí số Việc sử dụng chữ kí số ngày càng có nhiều ứng dụng trong thực tế, không chỉ giới hạn trong Ngành Công Nghệ Thông Tin , Ngành Mật Mã mà còn được áp dụng trong một số lĩnh vực khác như trong lĩnh vực Ngân Hàng để xác thực người gửỉ, người nhận, lĩnh vực Viễn thông để sử dụng các thẻ thông minh.
Với mật mã khoá công khai việc tạo ra chữ kí số và ứng dụng vào các tài liệu, các văn bản điện tử là vô cùng quan trọng Chữ kí thường ( Chữ kí viết tay ) thì có thể giả mạo được , vậy thì chữ kí số phải đảm bảo những yêu cầu gì để có thể tạo cơ sở pháp lý trong thời đại Thông tin – Tin học hoá.
Chữ kí số phải có những tính năng sau :
1 Người nhận văn bản đã kí phải có thể xác minh được bất kì chữ kí hợp lệ nào của người gửi.
2 Chữ kí không thể giả mạo được
3 Người đã kí thông báo thì không thể từ chối phủ nhận
nó về sau được
Trang 2Mục đích của luận văn là giới thiệu về “ Sơ đồ chữ kí số Elgamal “ , đây là một trong những sơ đồ mạnh vào bậc nhất hiện nay, và đã được nhiều nước trên thế giới ứng dụng , đặc biệt là tại
Mỹ đã có bản cải tiến của sơ đồ này và đã được Viện tiêu chuẩn và Công nghệ quốc gia Mỹ (NIST) chấp nhận làm chuẩn chữ kí số Điểm mạnh và an toàn của sơ đồ chữ kí số Elgamal là dựa trên tính khó giải của bài toán tìm Logarithm rời rạc trên trường hữu hạn
Z p
CHƯƠNG I : GIỚI THIỆU SƠ ĐỒ CHỮ KÍ SỐ
Thông thường chữ kí viết tay trên các văn bản , trên các tài liệu hay trên các hợp đồng kinh tế v.v thì được dùng để xác nhận người kí nó
Sơ đồ chữ kí ( hay còn gọi là chữ kí số ) là phương pháp kí một bức điện lưu dưới dạng điện tử Chẳng hạn một bức điện có chữ kí được truyền trên mạng máy tính
Một sơ đồ chữ kí số thường chứa hai thành phần : Thuật toán kí
và thuật toán xác minh Người A có thể kí bức điện x dùng thuật
Trang 3toán kí an toàn Chữ kí Sig(x) nhận được có thể kiểm tra bằng thuật toán xác minh công khai Ver Khi cho trước cặp (x,y) thuật toán xác minh cho giá trị TRUE hay FALSE tuỳ thuộc vào việc chữ kí được xác thực như thế nào
Định nghĩa hình thức của chữ kí số
Một sơ đồ chữ kí số là bộ 5 ( P,A,K,S,V) thoả mãn các điều kiện sau :
1 P : là tập hữu hạn các bức điện có thể.
2 A : là tập hữu hạn các chữ kí có thể
3 K : không gian khoá là tập hữu hạn các khoá có thể
4.Với mỗi K thuộc K tồn tại một thuật toán kí Sig K S và một thuật toán xác minh Ver K V
Mỗi Sig K : P -> A và Ver K :P x A -> { TRUE ,FALSE } là những hàm sao cho mỗi bức điện x P và mỗi bức điện y A thoả mãn phương trình sau đây
TRUE nếu y= Sig(x)
Ver (x,y) =
FALSE nếu y #Sig(x)
Với mỗi K K , hàm SigK và Ver K là các hàm thời gian đa
thức VerK sẽ là hàm công khai còn SigK là hàm mật Ta gọi Alice
là người gửi còn Bob là người nhận Không thể dễ dàng tính toán
để giả mạo chữ kí của Bob trên bức điện x Nghĩa là với x cho
Trang 4trước , chỉ có Bob mới có thể tính được chữ kí y để Ver (x,y) = True
CHƯƠNG II : SƠ ĐỒ CHỮ KÍ ELGAMAL
Sơ đồ chữ kí Elgamal đã từng được giới thiệu vào năm 1985 ở
Mỹ Bản cải tiến của sơ đồ này đã được Viện Tiêu Chuẩn và Công Nghệ Quốc Gia Mỹ (NIST) chấp nhận làm chuẩn chữ kí số Sơ đồ chữ kí Elgamal dựa trên tính khó giải của bài toán tìm Logarithm rời rạc trên trường hữu hạn Trước hết ta hãy làm quen với bài toán Logarithm rời rạc trên trường hữu hạn Zp
I Bài toán Logarithm rời rạc trong Z p
Chóng ta sẽ bắt đầu bằng việc mô tả bài toán này khi thiết lập một trường hữu hạn Zp , p là số nguyên tố (Nhóm nhân Zp* là nhóm Cyclic và phần tử sinh của Zp* được gọi là phần tử nguyên thuỷ) Bài toán Logarithm rời rạc trong Zp là đối tượng trong nhiều công trình nghiên cứu , và được xem là bài toán khó nếu p được chọn cẩn thận Cụ thể là không có một thuật toán thời gian đa thức nào cho bài toán Logarithm rời rạc
Để gây khó khăn cho các phương pháp tấn công đã biết , p phải có Ýt nhất 150 chữ số thập phân ( ≈ 500 bít ) và (p -1) phải có
Ýt nhất một thừa số nguyên tố lớn , tốt nhất p có dạng p = 2q + 1 với q cũng là nguyên tố Số nguyên tố p dạng này gọi là số nguyên
tố mạnh ( String – Prime ) đối với hệ Elgamal nói riêng và cho
Trang 5những hệ mà độ an toàn dựa vào tính khó giải của bài toán Logarithm rời rạc nói chung Lợi thế của bài toán Logarithm rời rạc trong xây dựng sơ đồ chữ kí là khó tìm được các Logarithm rời rạc, song bài toán ngược lấy luỹ thừa lại có thể tính toán hiệu quả theo thuật toán bình phương và nhân Nói cách khác , luỹ thừa theo modulo p là hàm một chiều với các số nguyên tố p thích hợp
Bài toán Logarithm rời rạc trên trường hữu hạn Zp
Đặc trưng của bài toán : I= ( p, , ) trong đó p là số nguyên
tố lẻ , Z p là phần tử nguyên thuỷ , Z p * , tìm một số nguyên duy nhất a để :
0 a p-2 Sao cho : a (mod p)
Ta sẽ xác định số nguyên a bằng Log ( mod p) được gọi là Logarit cơ số của
II Sơ đồ chữ kí số Elgamal
Sơ đồ Elgamal được thiết kế với mục đích dành riêng cho chữ
kí số , điểm mạnh của nó là cùng số nguyên tố p trong cùng một sơ
đồ thì với k là ngẫu nhiên nên ta có thể có nhiều chữ kí số, không tất định giống như hệ thống mã khoá công khai Elgamal, ở sơ đồ chữ kí RSA ta chỉ thấy trên cùng một sơ đồ với cùng một số nguyên tố p thì ta chỉ có một chữ kí số Điều này có nghĩa là có nhiều chữ kí hợp
Trang 6lệ trên bức điện cho trước bất kì Thuật toán xác minh phải có khả năng chấp nhận bất kì chữ kí hợp lệ nào khi xác thực chữ kí đó
Sơ đồ chữ kí Elgamal
Cho p là số nguyên tố sao cho bài toán Logarithm rời rạc trên Z p là khó và giả sử Z p * là phần tử nguyên thuỷ
Cho p = Z p * , A=Z p * Z p-1 , và kí hiệu :
K={(p,,a,): a (mod p) }
Giá trị p,, là công khai ,còn a là mật
Với K=(p,,a,) và với mét số ngẫu nhiên (mật) k Z p-1 *
Định nghĩa : Sig k (x,k) = (,)
trong đó = k mod p
và = (x-a )k -1 mod (p-1).
Với x, Z p * và Z p-1 ta định nghĩa
Ver(x,y,) = True x (mod p)
Nếu chữ kí được thiết lập đúng thì xác minh sẽ thành công vì :
a k (mod p) x (mod p )
Ở đây ta dùng hệ thức : a + k x (mod p-1)
Bob tính chữ kí bằng cách dùng cả giá trị mật a (là một phần của khoá ) lẫn số ngẫu nhiên mật k ( dùng để kí lên bức điện x ) Việc xác minh có thể thực hiện duy nhất bằng thông tin công khai
Ta xét một ví dụ sau :
Giả sử : Cho p =467 , =2 , a=127 khi đó:
Trang 7 = a mod p = 2127 mod 467 = 132.
Nếu Bob muốn kí lên bức điện x = 100 và chọn số ngẫu nhiên k =
213
( chó ý là USCLN(213,466) =1 và 213-1 mod 466 =431 ) Khi đó :
= 2213 mod 467 =29
và = (100 – 127 29 ) 431 mod 466 = 51
Bất kì ai cũng có thể xác minh chữ kí này bằng cách kiểm tra :
132292951 189 (mod 467 )
và 2100 189 (mod 467 )
Vì thế chữ kí là hợp lệ
Ta xét độ mật của sơ đồ chữ kí Elgamal.
Giả sử ,Oscar thử giả mạo chữ kí trên bức điện x cho trước mà không biết a Nếu Oscar chọn và sau đó thử tìm giá trị tương ứng Anh ta phải tính Logarithm rời rạc Log x - Mặt khác , nếu đầu tiên anh ta chọn và sau đó thử tìm và thử giải phương trình :
x ( mod p )
Để tìm Đây là bài toán chưa có lời giải nào , tuy nhiên ,dường như nó chưa được gắn với đến bài toán đã nghiên cứu kĩ nào nên
Trang 8vẫn còn khả năng có cách nào đó để tính và đồng thời để ( , )
là một chữ kí Hiện thời không ai tìm được cách giải song cũng không ai khẳng định được rằng nó không thể giải được
Nếu Oscar chọn và và sau đó thử giải tìm x , anh ta sẽ phải đối mặt với bài toán Logarithm rời rạc , tức bài toán tính Log Vì thế Oscar không thể kí một bức điện ngẫu nhiên bằng biện pháp này
Cuối cùng , ta sẽ nêu cách có thể phá được sơ đồ này nếu không áp dụng nó một cách cẩn thận Trước hết , giá trị k ngẫu nhiên được dùng để tính chữ kí phải được giữ kín không được để
lộ Vì nếu k bị lộ , khá đơn giản để tính : a =
(x-k )-1 mod ( p –1 )
Dĩ nhiên , một khi a bị lộ thì hệ thống bị phá và Oscar có thể
dễ dàng giả mạo chữ kí
Một kiểu dùng sai sơ đồ nữa là dùng cùng giá trị k để kí hai bức điện khác nhau Điều này cũng tạo thuận lợi cho Oscar tính a
và phá hệ thống Sau đây là cách thực hiện Giả sử ( ,1 ) là chữ kí trên x1 và ( ,2 ) là chữ kí trên x2 Khi đó ta có :
1 x1 (mod p )
và 2 x2 ( mod p )
Như vậy : x1 x2 12 ( mod p )
Trang 9Nếu viết = k ta nhận được phương trình tìm k chưa biết sau:
x1-.x2 k( 1- 2 ) ( mod p )
tương đương với phương trình : x1 - x2 k (1-2) (mod p-1) Bây giờ giả sử d = USCLN(1-2 ,p –1) Vì d | ( p –1) và d | (1-2 ) nên suy ra d | (x1-x2) Ta định nghĩa :
x’ = (x1-x2 )/d ; ’ = ( 1-2 ) / d ; p’ = ( p-1 ) / d Khi đó đồng dư thức trở thành : x’ k ’ ( mod p’ )
Vì USCLN (’,p’ ) =1 , nên ta có thể tính : = ( ’ ) –1 mod p’ Khi đó giá trị k xác định theo modulo p’ sẽ là : k = x’ mod p’ Phương trình này cho d giá trị có thể của k : k = x’ + i p’ mod p với i nào đó , 0 i d-1 Trong đó d giá trị có thể này có thể xác định được một giá trị đúng duy nhất qua việc kiểm tra điều kiện :
k ( mod p )
Trang 10Chương III : mô phỏng chương trình chữ kí số
ELGAMAL TRÊN VĂN BẢN ĐIỆN TỬ
Như ta đã biết một sơ đồ chữ kí số thường chứa 2 thành phần
đó là thuật toán ký và thuật toán xác minh Trong chương này em xin trình bày về hàm Hash đơn giản là hàm tóm lược văn bản và ký
số lên file văn bản , nhằm bảo toàn tính nguyên vẹn của văn bản
I Hàm HASH và việc tóm lược thông báo.
Một vấn đề đặt ra là ta không nên áp sơ đồ ký số vào một thông báo dài Nhưng thông báo thì phải được kí , mâu thuẫn này có thể giải quyết được bằng cách sử dụng hàm Hash , vì hàm Hash là một công cụ tóm lược đặc trưng của thông báo rất an toàn và hữu hiệu Với một thông báo có độ dài M bất kỳ Hàm Hash cho ra giá trị tóm lược thông báo có độ dài không đổi, nói chung giá trị tóm lược thông báo có độ dài nhỏ hơn thông báo M rất nhiều Chẳng hạn | H(M) | = 128 bít hoặc | H(M) | =160 bít trong khi đó thông báo
có độ dài cỡ Mega byte hay lớn hơn Do vậy đặc tính cơ bản của hàm Hash là đưa ra một giá trị đại diện của thông báo M rất ngắn so với thông báo
Sau khi đã tóm lược thông báo M được một tóm lược H(M) người ta dùng chữ ký số áp vào H(M) Thông báo M cùng với tóm H(M) đã được ký sẽ được gói trọn trong một thông báo và được mã hoá theo cách thông thường để truyền đi Người nhận được thông
Trang 11báo có thể chứng thực chữ ký tóm lược H(M) sau đó dùng hàm Hash tính lại tóm lược với thông báo vừa nhận được và so sánh kết quả Khi đó cùng một lúc có thể xác thực được người gửi và cả sự nguyên vẹn của thông báo M
II Mô tả chương trình chữ kí số Elgamal trên một file văn bản bất kỳ M.
-Đầu tiên ta mở file văn bản (M) cần kí , sau đó dùng hàm Hash
để tóm lược lại văn bản ta được H(M) Hàm Hash sau đây sẽ sử dụng là ta sẽ chia văn bản M ra làm nhiều khối , mỗi khối là 40 byte Sau đó ta sẽ đọc từng 40 byte văn bản của từng khối gán bằng 1 byte mã Nếu khối văn bản cuối cùng không đủ 40 byte thì ta sẽ cho đọc riêng số lượng byte đó thành 1 byte mã Đoạn chương trình sau được viết bằng Pascal mô tả một trong những cách tóm lược văn bản qua hàm Hash
procedure tom_luoc(st:ten_file);
var
l,m,n,i,j:longint;
kq:word;
dem:sl;
begin
fillchar(hash,max_sl,0);
assign(f,st);
Trang 12l:=filesize(f);
m:=l div 40;
n:=l mod 40;
for i:=1 to m do
begin
blockread(f,dem,40,kq);
for j:=0 to 39 do hash[j]:=hash[j] xor dem[j];
end;
if (n>0) then
begin
blockread(f,dem,n,kq);
for j:=0 to n-1 do hash[j]:=hash[j] xor dem[j];
end;
close(f);
end;
-Sau khi tóm lược được, ta dùng chương trình ký cùng với phần tóm lược để ký lên văn bản đã nhập Cuối cùng sẽ ghi toàn bộ văn bản và chữ kí số lên file ký
-Đầu tiên ta mở file văn bản cần kiểm tra chữ ký sè , sau đó ta lại dùng hàm Hash để tóm lược lại văn bản, sau đó đưa kết quả vào
để kiểm tra chữ kí trên văn bản
Trang 13C«ng Khai
Ch÷ Ký 1
Ch÷ Ký 2
Ch ¬ng tr×nh KiÓm Tra
Tãm l îc M
-Quá trình kí và kiểm tra chữ kí thể hiện qua 2 sơ đồ sau:
Sơ đồ quá trình kí lên văn bản M:
Sơ đồ quá trình kiểm tra chữ ký trên văn bản M:
M
M
C«ng Khai Ch÷ ký 1 Ch÷ ký 2
Ch ¬ng Tr×nh
ký sè
Tãm l îc M