Chữ ký số dùng mật mã khoá công khai

Một phần của tài liệu chữ ký số và các vấn đề bảo mật thông tin (Trang 59 - 88)

4. Tổng quan luận văn

2.3.1 Chữ ký số dùng mật mã khoá công khai

Trong chƣơng 1, ta biết mật mã khóa công khai là bất đối xứng, do tính bất đối xứng đó nên nếu giữa A và B có trao đổi thông tin với nhau thì sẽ có hai cặp khóa công khai và khóa riêng đƣợc sử dụng để mã hoá và chứng thực (một của A và một của B). Nếu A gửi cho B một bản tin đƣợc mã hoá bằng khóa công khai thì B có thể giải mã bằng khóa riêng để đọc bản tin đó mà những ngƣời khác không làm đƣợc. Ngƣợc lại, B có thể “ký” vào một bản tin bằng khóa riêng (chứng thực) và gửi cho A, sau đó A có thể kiểm tra tính xác thực của

chữ ký bằng khóa công khai của B. Hình 2.3 dƣới đây mô tả hoạt động của chữ ký số dùng mật mã khoá công khai.

Hình 2.3 Sơ đồ nguyên lý hoạt động của chữ kí số dùng mật mã khoá công khai

Trong đó :

 ks gọi là mầm khoá hay còn gọi là khoá khởi thảo đƣợc chọn theo phƣơng pháp ngẫu nhiên.

 Hai thuật toán F, G dùng để tính toán các khoá. A dùng hai thuật toán F và G cùng với mầm khoá ks để tạo ra hai khoá: khoá giải mã kd bí mật đƣợc giữ lại sử dụng riêng cho mình và khoá ke công khai.

 P là thông điệp gửi đi, S là thông điệp sau khi kí.

e

k

E : thuật toán mã hoá với khoá công khai ke, Dkd : thuật toán giải mã với khoá bí mật kd.

Ta đã biết rằng với thông điệp P. Nếu dùng hệ mật mã khoá công khai thì phải dùng khoá công khai ke với thuật toán mã hoá Eke để có đƣợc bản mã C =

e

k

E (P), thì việc giải mã phải dùng hàm giải mã

d

k

D với khoá bí mật kd để có

E ke

Khoá công khai

P ( ) d k sD P Bí mật của A ks G D kd F G ( ) e k PE s

thông điệp P = Dkd (C). Ngƣợc lại trong trƣờng hợp nếu bên A lại dùng khoá riêng kd để mã hoá nghĩa là A đã ký vào thông điệp P để có s =

d

k

E (P), B muốn biết thông điệp đó có phải là của A không thì chỉ việc dùng khoá công khai của A để giải mã P‟ =

e

k

D (s) và sau đó so kết quả với thông điệp gốc là P, nếu P = P‟ thì chữ ký đúng là của A. Lúc này B tin rằng: 1. Bản tin gốc không bị thay đổi.

2. Bản tin đƣợc ký bởi A.

Một chữ ký số cần phải phụ thuộc vào tất cả các bit của thông điệp với mục đích là giữ sự bền vững của thông điệp đó. Điều quan trọng ở đây là, phải đảm bảo không một ai có thể làm thay đổi nội dung của bản tin rõ trong lúc phải giữ nguyên chữ ký số. Hiện nay đã có một số thuật toán tìm ra đƣợc một số điểm xung đột của những hàm băm khá phổ biến (nhƣ MD5, SHA-1). Tuy nhiên, các thuật toán trên chƣa cho phép tìm đƣợc một một văn bản khác với văn bản P cho trƣớc mà có cùng mã băm với P. Nhƣ vậy, có thể nói cho đến nay, việc “mạo chữ ký” của một văn bản cho trƣớc là vẫn chƣa thể thực hiện đƣợc.

Giải thích:

Xét ví dụ sau: B muốn gửi thông tin cho A và muốn A biết thông tin đó thực sự do chính B gửi. B gửi cho A bản tin kèm với chữ ký số. Chữ ký này đƣợc tạo ra với khóa bí mật của B. Khi nhận đƣợc bản tin, A kiểm tra sự thống nhất giữa bản tin và chữ ký bằng thuật toán kiểm tra sử dụng khóa công khai của B. Bản chất của thuật toán tạo chữ ký đảm bảo nếu chỉ cho trƣớc bản tin, rất khó (gần như không thể) tạo ra đƣợc chữ ký của B nếu không biết khóa bí mật của B. Nếu phép thử cho kết quả đúng thì A có thể tin tƣởng rằng bản tin thực sự do B gửi.

Thông thƣờng, B không mật mã hóa toàn bộ bản tin với khóa bí mật mà chỉ thực hiện với giá trị băm của bản tin đó. Điều này khiến việc ký trở nên đơn giản hơn và chữ ký ngắn hơn. Tuy nhiên nó cũng làm nảy sinh vấn đề khi 2 bản

Tính toán hàm băm

Mã hoá hàm băm với khoá riêng của

người gửi

Tính toán hàm băm

Giải mã chữ ký với khoá công khai của

người gửi

Sự tạo ra chữ ký số trên tài liệu (người gửi)

So sánh chữ ký số (người nhận)

tin khác nhau lại cho ra cùng một giá trị băm. Đây là điều có thể xảy ra mặc dù xác suất rất thấp. 2.3.2 Lược đồ chữ ký số 2.3.2.1 Định nghĩa Một lƣợc đồ chữ ký số là một bộ ) gồm :  là tập hợp hữu hạn các văn bản có thể.  là tập hợp hữu hạn các chữ ký có thể.  là tập hợp hữu hạn các khoá. Mỗi k   gồm có hai phần: k = (k‟ , k”). trong đó k‟ là khoá bí mật dùng để kí, k” là khoá công khai dùng để kiểm thử chữ ký.

Với mỗi k = (k‟,k”). Có một thuật toán kí Sigk‟:  (Sigk‟) và một thuật toán kiểm thử Verk”: x   {True, False} (Verk”). Thoả mãn điều kiện sau đây đối với mọi x  , y   :

" k er ( , ) V x y    

Các thuật toán Sigk‟ và Verk” cần đƣợc tính dễ dàng (chẳng hạn trong thời gian đa thức), hàm Sig là khó tính đƣợc, nếu không biết khoá k‟- điều đó cho phép đảm bảo tính bí mật của việc ký, hay nói một cách khác cho việc chống giả mạo chữ ký, không thể chối bỏ đƣợc chữ ký khi đã ký vào thông báo và gửi đi.

2.3.2.2 Lược đồ chữ ký số với phần phụ lục.

Đƣợc dùng phổ biến trong thực tế. Chúng dựa vào các hàm băm mật mã hơn là các hàm thừa tuỳ biến và ít bị các tấn công giả mạo hơn.

Các lƣợc đồ chữ ký số mà đòi hỏi phải có thông báo gốc là đầu vào để xác minh chữ ký đƣợc gọi là lƣợc đồ chữ ký số với phần phụ lục [10].

Thuật toán sinh khoá

True, nếu y = sigk‟(x) False, nếu y <> sigk‟(x)

Tóm lƣợt: Mỗi cá thể tạo một khóa riêng để ký thông báo và một khoá công khai tương ứng để các cá thể khác dùng trong xác minh chữ ký.

1. Mỗi cá thể A chọn một khoá k = (k‟; k”), SigA;k‟ là thuật toán ký với khoá k (mỗi SigA;k‟ là một ánh xạ 1-1 từ Mh tới ).

2. Thuật toán VerA;k” tƣơng ứng là một

xạ từ hx đến ánh

{True, False} sao cho:

Với m  h, s ; ở đây m = h(P) với P. VerA;k” đƣợc gọi là thuật toán kiểm thử để xác minh chữ ký, h là hàm một chiều từ  đến h(h là tập hợp các trị băm).

3. Với khoá k = (k‟; k”), trong đó khoá công khai của A là k”; khóa riêng của A là k‟.

Thuật toán sinh và xác thực chữ ký

Tóm lƣợc: Cá thể A ký một thông báo P  với chữ ký s. Một cá thể B bất kỳ có thể xác minh chữ ký đó có đúng của A hay không?

1. Sinh chữ kí: Cá thể A thực hiện: (a)Chọn một khoá k = (k‟; k”) 

(b)Tính m = h(P) và s = SigA;k‟(m).

(c)Chữ ký của A cho thông điệp P là s, P và s đƣợc gửi đến B.

2. Xác thực chữ ký: B làm nhƣ sau:

(a)Xác thực đúng khoá công khai của A là k”. (b)Tính m = h(P) và u = VerA;k”(m; s).

VerA;k”(m; s) = True, nếu SA;k‟(m) = s False, nếu SA;k‟(m) <> s

(c)Chấp nhận chữ ký của A nếu và chỉ nếu u = True.

Hình 2.4, 2.5 là sơ đồ tổng quan của lƣợt đồ chữ ký số với phần phụ lục. Các thuộc tính sau là yêu cầu cần thiết cho các thuật toán ký và xác minh:

(i) Với mỗi khoá k=(k‟; k”)  , SigA;k‟ đƣợc tính dễ dàng. (ii) VerA;k” cũng dễ dàng để tính;

(iii) Không một cá thể nào khác ngoại trừ A có thể tìm đƣợc bản rõ P   và một s  sao cho VerA;k”(m; s) = True, ở đây m = h(P).

Hình 2.5 Sơ đồ quy trình ký

Hình 2.6 Sơ đồ quy trình xác minh chữ ký 2.3.2.3 Lược đồ chữ ký số với khôi phục thông điệp.

Có đặc điểm là thông báo đƣợc ký có thể đƣợc phục hồi từ ngay chữ ký đó, và thƣờng đƣợc dùng để ký các thông báo nhỏ.

Lƣợt đồ chữ ký số không đòi hỏi phải có thông báo gốc làm đầu vào để xác minh chữ ký đƣợc gọi là lƣợt đồ chữ ký số với khôi phục thông điệp [10],trong trƣờng hợp này thông báo gốc sẽ đƣợc phục hồi chính từ chữ ký đó.

Thuật toán sinh khoá

Tóm lƣợt: Mỗi cá thể tạo một khóa riêng dùng để ký thông báo và một khoá công khai tương ứng để các cá thể khác dùng trong xác minh chữ ký.

h x

 VerA;k” True

Fals e  P h SigA;k‟ h m  s

1. Mỗi cá thể A chọn một khoá k = (k‟; k”)  , SigA;k‟ là thuật toán ký với khoá k (mỗi SigA;k‟ là một ánh xạ 1-1 từ M tới ). R là một hàm sao cho R() = và có nghịch đảo là R-1

2. Thuật toán VerA;k” tƣơng ứng là một ánh xạ từ  đến  sao cho: VerA;k” o SA;k‟ là ánh xạ đồng nhất trên , k  . VerA;k”

gọi là thuật toán xác minh đƣợc xây dựng sao cho có thể tính toán khi không biết gì đến khoá riêng của ngƣời ký thông báo.

3. Cặp khoá k = (k‟; k”), trong đó khoá công khai của A là k”; khóa riêng của A là k‟.

Thuật toán sinh và xác thực chữ ký

Tóm lƣợt: Cá thể A ký một thông báo P  với chữ ký s. Một cá thể B bất kỳ có thể xác minh chữ ký và phục hồi thông báo P từ chữ ký đó.

1. Sinh chữ ký: Cá thể A thực hiện: (a)Chọn một khoá k = (k‟; k”)  

(b)Tính m = R(P) và s = SigA;k‟(m). (R và nghịch đảo của nó là R-1

là các hàm đƣợc công khai)

(c)Chữ ký của A cho thông điệp P là s, và s đƣợc gửi đến B.

2. Xác thực chữ ký: B làm nhƣ sau:

(a)Xác thực đúng khoá công khai của A là k”. (b)Tính m = VerA;k”(s).

(c)Xác minh rằng m  R (nếu m R thì từ chối chữ ký) (d)Phục hồi thông báo P từ m bằng cách tính R-1

(m).

Hình 2.7 Tổng quan về chữ ký số với khôi phục thông điệp

Hình 2.8 là lƣợc đồ tổng quan của chữ ký số với khôi phục thông điệp. Các thuộc tính sau là yêu cầu cần thiết cho các thuật toán ký và xác minh:

 P R SigA;k‟ R m  s

(i) Với mỗi khoá k=(k‟; k”)  , SigA;k‟ đƣợc tính dễ dàng.

(ii) VerA;k” cũng dễ dàng để tính;

(iii) Không một cá thể nào khác ngoại trừ A có thể tìm đƣợc một s  sao cho VerA;k”(s) R.

Hình 2.8 Lược đồ tổng quan của chữ ký số với khôi phục thông điệp 2.3.2.4 Lược đồ chữ ký số RSA

Hệ mật mã khoá công khai RSA [5], [16] cũng có thể đƣợc sử dụng để cung cấp một hệ thống chữ ký điện tử bằng cách đảo ngƣợc vai trò của quá trình mã hoá và giải mã. Muốn thực hiện lƣợc đồ chữ kí điện tử RSA, mỗi ngƣời sử dụng phải tạo một cặp khoá, bao gồm khoá công khai và khoá riêng giống nhƣ trong lƣợc đồ mã hoá và giải mã RSA, đồng thời thống nhất sử dụng cùng một hàm băm H(x). Giả sử để tạo chữ ký cho thông điệp (tài liệu) m ngƣời sử dụng A thực hiện nhƣ sau:

 Tính thông điệp thu gọn M = H(m) (M là duy nhất đối với thông điệp m).

 Tính S = SignKd (M) = Md mod N (với d là khoá bí mật của người ký A).  Kết quả S thu đƣợc chính là chữ ký A đối với thông điệp m

Khi kiểm tra chữ ký của tài liệu nhận đƣợc ngƣời sử dụng B thực hiện nhƣ sau:

 Lấy khoá công khai đích thực của ngƣời ký A (N, e) .  Kiểm tra chữ ký S ≤ N; nếu không thì từ chối chữ ký.

 P h SigA;k‟ R R(m)  s h m = h(P) R

 Tính M‟ = Se

mod N.  Tính M = H(m).

 Chấp nhận chữ ký là đúng của ngƣời gửi, nếu và chỉ nếu M ≡ M‟.

Nếu quá trình kiểm tra chữ ký đúng (VerK(m, S) = true) thì ngƣời nhận B chắc chắn rằng thông điệp m đích thực là của ngƣời A gửi và nội dung thông điệp không bị thay đổi hay bị làm giả mạo bởi ngƣời khác khi truyền đi trên mạng.

2.3.2.5 Lược đồ chữ ký điện tử ElGamal

Để thực hiện lƣợc đồ chữ ký ElGamal, đầu tiên mỗi ngƣời sử dụng trong nhóm điều phải tạo riêng cho mình một cặp khoá, bao gồm khoá công khai và khoá riêng giống nhƣ ở lƣợc đồ mã hoá và giải mã ElGmal [17]. Giả sử ngƣời sử dụng A muốn ký vào thông điệp m để gửi cho ngƣời sử dụng B, thì A thực hiện nhƣ sau:

 Chọn ngẫu nhiên số bí mật Kg, sao cho 1 ≤ k ≤ p – 2, với gcd(k , p - 1) = 1

 Tính: r = gk (mod p)  Tính k -1 mod p-1

 Tính thông điệp thu gọn M = H(m)

 Tính s = k -1 * (M – x * r) mod p – 1 (với x là khoá bí mật của ngƣời ký)  Cặp số (r, s) chính là chữ ký của A đối với thông điệp m (Kg giữ bí mật).

Khi thực hiện bƣớc kiểm tra chữ ký, ngƣời nhận B thực hiện nhƣ sau:  Lấy khoá công khai đích thực của ngƣời ký A (g, p, y).

 Kiểm tra 1 ≤ r ≤ p – 1; nếu không thì từ chối chữ ký.  Tính v1 = yr * rs mod p

 Tính v2 = gM mod p

 Chấp nhận chữ ký A đối với m, nếu và chỉ nếu v1 = v2

Nhận xét: Lƣợc đồ chữ ký ElGamal là cũng không đơn định (non-deterministic). Nghĩa là, từ một thông điệp M có thể sinh ra nhiều chữ ký khác nhau (do Kg là số nguyên đƣợc chọn ngẫu nhiên trong thuật toán). Tuy nhiên, điều này không ảnh hƣởng đến tính đúng đắn của lƣợc đồ chữ ký. Chứng minh: yr * rs ≡ gx.r * gk.s (mod p) ≡ g(x.r + k.s) (mod p) (2.11) Vì: s = k-1 * (M – x * r) mod p-1  k * s = (M – x * r) mod p -1  M = (x * r + k * s) mod p -1 Mà: 0 ≤ M ≤ p – 1  M = u * r + v * u (2.12) (2.11) & (2.12)  yr * rs ≡ gM (mod p). 2.3.2.6 Lượt đồ chữ ký số DSA

Lƣợc đồ chữ ký DSA (Digital Signature Algorithm) [22] của NIST đƣa ra tháng 12 năm 1994, là sự cải tiến từ lƣợc đồ chữ ký ElGamal, và đã trở thành một trong những chuẩn chữ ký điện số DSS (Digital Signature Standard) ở Mỹ và thế giới. Hệ thống chữ ký này có độ an toàn cao và thực hiện hiệu quả trên các thiết bị có tốc độ xử lý chậm và bộ nhớ ít nhƣ thẻ thông minh (smart cards).

Trong lƣợc đồ chữ ký ElGamal, nếu số nguyên tố p có kích cỡ 512-bits thì chữ ký sinh ra là cặp (r, s) có tổng chiều dài 1024-bits. Với các thiết bị yếu nhƣ thẻ thông minh thì chữ ký cần phải nhỏ hơn nhiều, do đó lƣợc đồ chữ ký ElGamal đã đƣợc cải tiến thành lƣợc đồ chữ ký DSA, sử dụng số nguyên tố p có kích cỡ khoảng 512-1024 bits, để tạo ra chữ ký 320-bits đối với chuỗi dữ liệu đầu vào 160-bits. Trong thực hành, thông thƣờng chiều dài của một thông điệp lớn hơn nhiều so với chuỗi 160-bits ở đầu vào, do đó thông điệp sẽ đƣợc nén lại

thành chuỗi duy nhất có kích cỡ 160-bits bằng thuật toán băm SHA-1. Muốn sử dụng lƣợc đồ chữ ký DSA đầu tiên mỗi ngƣời cần phải thực hiện các bƣớc tạo cặp khoá nhƣ sau:

 Tạo số nguyên tố lớn p (khoảng 512-1024 bits), một số nguyên tố q (160-bits) chia hết cho (p-1) và số nguyên g  Zp có bậc q.

 Chọn một số nguyên ngẫu nhiên x, sao cho 0  x  q, và tính y = gx mod p.

 Công bố bộ bốn số (p, q, g, y) làm khoá công khai và giữ bí mật số nguyên x làm khoá riêng.

Giả sử muốn tạo chữ ký cho thông điệp m ngƣời ký A thực hiện nhƣ sau:  Chọn ngẫu nhiên một số nguyên bí mật k, sao cho 1≤ k ≤ q -1  Tính r = (gk mod p) mod q

 Tính k-1 mod q

 Tính s = k-1* {SHA -1 (m) + x * r} (mod q) (SHA -1 là hàm băm chuẩn)

Cặp số nguyên (r,s) chính là chữ ký của A đối với thông điệp m

Khi kiểm tra chữ ký, ngƣời sử dụng B thực hiện các bƣớc nhƣ sau:  Lấy khoá công khai đích thực của ngƣời ký A (p, q, g, y)

 Kiểm tra 1≤ r ≤ q-1 và 1≤ s ≤ q-1; nếu không thì từ chối chữ ký  Tính: v1 = {s-1 * SHA -1(m)} mod q

 Tính: v2 = (r * s -1) mod q

 Chấp nhận chữ ký của A đối với thông điệp m, nếu và chỉ nếu gv1 * gv2 = r.

Một phần của tài liệu chữ ký số và các vấn đề bảo mật thông tin (Trang 59 - 88)

Tải bản đầy đủ (PDF)

(88 trang)