Minh họa sinh và thẩm tra chữ ký

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số loại chữ ký điện tử và ứng dụng (Trang 49)

B Thuật toán ký

(mã hóa)

Thông điệp

Khóa riêng củaA

Chữ ký số Thuật toán thẩm tra chữký (giải mã)

Khóa công khai củaA A

Kết quả thẩm tra

Thông điệp

2.3.3. Phân loại các sơ đồ chữ ký số

Căn cứ vào việc xác thực chữ ký, có thể phân các sơ đồ chữ ký số làm hai loại sau [1, 21]:

2.3.3.1. Sơ đồ chữ ký số kèm theo thông điệp gốc

1) Định nghĩa 2.3.2

Sơ đồ chữ ký số kèm theo thông điệp gốc đó là sơ đồ chữ ký số mà yêu cầu phải có thông điệp gốc là đầu vào cho thuật toán xác thực chữ ký.

Ví dụ nhƣ các sơ đồ chữ ký ElGamal và Schnorr là sơ đồ chữ ký kèm theo thông điệp gốc.

2) Sinh khoá và chuẩn bị

Mỗi thực thể A tạo một khóa riêng để ký thông điệp và một khoá công khai tƣơng ứng để các thực thể khác dùng trong xác minh chữ ký của A.

(1) Mỗi thực thể A chọn khoá k = (k’; k”)K, khoá công khai của A là k”; khóa riêng của A là k’.

(2) Sigk’ là thuật toán ký với khóa k’.

(3) Thuật toán Verk” với khóa k’’ tƣơng ứng:

Verk’’(m; s) = TRUE ↔ s = Sigk’(m), với mọi m  M, s A.

Trong đó m = h(x) với x  P. Verk” đƣợc gọi là thuật toán xác thực để xác thực chữ ký, h là hàm băm một chiều từ P đến M.

3) Sinh và xác thực chữ ký

Thực thể A ký thông điệp x P với chữ ký s. Một thực thể B bất kỳ có thể xác minh chữ ký đó có hợp lệ hay không.

A: Sinh chữ ký

(1) Chọn một khoá k = (k’; k”) K.

(2) Tính m = h(x) và s = Sigk’(m).

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

B: Xác thực chữ ký

(1) Xác thực đúng khoá công khai của A là k”. (2) Tính m = h(x).

(3) Nếu Verk”(m; s) = TRUE thì chấp nhận chữ ký của A.

2.3.3.2. Sơ đồ chữ ký số có thể khôi phục thông điệp gốc

1) Định nghĩa 2.3.3

Sơ đồ chữ ký số không đòi hỏi phải có thông điệp gốc làm đầu vào để xác thực chữ ký đƣợc gọi là sơ đồ chữ ký số có thể khôi phục thông điệp gốc,

trong trƣờng hợp này thông điệp gốc sẽ đƣợc phục hồi chính từ chữ ký của nó. Ví dụ: Sơ đồ chữ ký khoá công khai Rabin và RSA.

2) Sinh khoá và chuẩn bị

Mỗi thực thể A tạo một khóa riêng dùng để ký thông điệp và một khoá công khai tƣơng ứng để các thực thể khác dùng trong xác minh chữ ký của A: (1) Thực thể A chọn khoá k = (k’; k”) K, khoá công khai của A là k”; khóa

riêng của A là k’.

(2) Sigk’ là thuật toán ký với khoá k’.

(3) R là một hàm sao cho R(P) = Mvà có nghịch đảo là R-1 .

(4) Thuật toán xác thực chữ ký Verk” với khóa k’’ tƣơng ứng là một ánh xạ từ

3) Sinh và xác thực chữ ký

Thực thể A ký thông điệp x  P với chữ ký s. Một thực thể B bất kỳ có thể xác thực chữ ký và phục hồi thông điệp x từ chữ ký s.

A: Sinh chữ ký

(1) Chọn một khoá k = (k’; k”) K.

(2) Tính m = R(x) và s = Sigk’(m). (R và nghịch đảo của nó là R-1

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

(3) Chữ ký của A trên thông điệp x là s. A gửi s đến B.

B: Xác thực chữ ký

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

(3) Xác minh rằng m  M (nếu m  M thì từ chối chữ ký) (4) Phục hồi thông điệp x = R-1

(m).

4) Nhận xét

Hầu hết các sơ đồ chữ ký số có thể khôi phục thông điệp gốc thƣờng đƣợc áp dụng cho các thông điệp có chiều dài cố định, kích thƣớc nhỏ (dùng hàm băm trước khi ký), còn các chữ ký số kèm theo thông điệp gốc áp dụng với các thông điệp có độ dài tuỳ ý.

Một sơ đồ chữ ký số có thể khôi phục thông điệp gốc bất kỳ luôn có thể chuyển thành một sơ đồ chữ ký số kèm theo thông điệp gốc (dùng hàm băm).

2.4. SƠ ĐỒ CHỮ KÝ RSA

2.4.1. Cơ sở toán học

Tính an toàn của sơ đồ chữ ký RSA đƣợc dựa vào độ khó của bài toán phân tích một số nguyên lớn thành tích của hai số nguyên tố lớn. Đây cũng chính là cơ sở toán học đảm bảo cho sự an toàn của sơ đồ mã hóa RSA.

Có thể xem bài toán xác nhận là “đối ngẫu” với bài toán bảo mật. Trong hệ mật mã khóa công khai nói chung và hệ mật mã RSA nói riêng, mỗi thực thể tham gia trao đổi thông tin cần có hai khóa: một khóa riêng và một khóa công khai. Giả sử A cần gửi thông điệp cho B. Để đảm bảo tính bí mật thông tin: A dùng khóa công khai của B để mã hóa thông điệp rồi gửi cho B, sau đó B cần dùng khóa riêng của mình để giải mã thông điệp do A gửi. Còn để đảm bảo tính xác thực và toàn vẹn thông tin thì A cần ký thông điệp bằng khóa riêng của A, còn B sẽ xác thực và giải mã chữ ký bằng khóa công khai của A. Rõ ràng cách sử dụng khóa trong mã hóa và chữ ký là ngƣợc lại nhau.

Sơ đồ chữ ký số RSA đƣợc xây dựng trên cơ sở của hệ mã hóa RSA cũng theo ý tƣởng nêu trên. Sơ đồ chữ ký RSA thuộc loại sơ đồ chữ ký có thể khôi phục thông điệp gốc.

Không gian các thông điệp và không gian chữ ký của sơ đồ chữ ký RSA là: Zn = {0, 1,. . ., n-1}, với n = p.q là tích của hai số nguyên tố lớn khác nhau.

2.4.2. Thuật toán sinh khoá

1) Sinh ngẫu nhiên hai số nguyên tố lớn p và q. 2) Tính n = p.q và ( )n = (p-1)(q-1).

3) Chọn ngẫu nhiên một số nguyên e, 1 < e < ( )n , sao cho (e, ( )n ) = 1. 4) Tính số nguyên d, 1< d <( )n , sao cho e.d  1 (mod ( )n ).

Ngƣời ký có khóa công khai là (n; e) và khoá riêng là (n; d).

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

Giả sử A cần ký một thông điệp P và gửi cho B.

2.4.3.1. Sinh chữ ký

Để sinh chữ ký A thực hiện:

1) Số hoá thông điệp P thành một số nguyên m  [0, n-1]; m = (P). 2) Tính s = md mod n.

3) Chữ ký của A trên thông điệp P là s, gửi s cho B.

2.4.3.2. Xác thực chữ ký

B xác thực s là chữ ký của A và khôi phục lại thông điệp gốc P: 1) Xác thực đúng khoá công khai của A là (n; e).

2) Tính m = se mod n.

3) Xác nhận chữ ký nếu m  M, ngƣợc lại từ chối chữ ký của A. 4) Khôi phục lại P = -1

(m).

Chứng minh sự đúng đắn

Nếu s là chữ ký trên P thì: s = md

mod n. Trong đó m = (P). Vì e.d = 1 (mod ( )n ) nên se = mde (mod n) = m (mod n).

2.4.4. Ví dụ

A ký thông điệp P và B xác thực chữ ký của A trên P.

1) Sinh khoá, A thực hiện:

- Chọn các số nguyên tố: p = 2659, q = 11173. - Tính n = p.q = 29709007 và (n) = 29695176. - Chọn e = 167.

- Tìm d: Từ ed = 1 mod 29695176, tính đƣợc d = 22582559. A có khoá công khai là (n, e) = (29709007, 167)

và khoá riêng d = 22582559.

2) Sinh chữ ký, A thực hiện:

Để đơn giản trình bày giả sử không gian thông điệp làP = Zn và hàm số hóa 

là m =(P) = P với mọi P  P. Cho thông điệp P = 17062005:

- Số hoá thông điệp m = (P) = 17062005. - Tính chữ ký s = md mod n

= 1706200522582559 mod 29709007 = 17870645.

- Gửi chữ ký s cho B.

3) Xác thực chữ ký, B thực hiện:

- Xác nhận khoá công khai của A là: (n, e) = (29709007, 167). - Tính m = se mod n

= 17870645167 mod 29709007

= 17062005.

- Kiểm tra: m = 17062005 [0; 29709006]. Chữ ký của A là hợp lệ. - Khôi phục thông điệp gốc P = −1

2.4.5. Tính hiệu quả và bảo mật

2.4.5.1. Tính hiệu quả

Chữ ký điện tử RSA hay đƣợc dùng trong thực tế vì nó đơn giản trong việc thiết lập và có độ an toàn cao.

Chữ ký RSA dựa vào hàm lũy thừa với các số lớn vì vậy tốc độ mã hóa sẽ chậm với các thông điệp kích thƣớc lớn.

2.4.5.2. Tính bảo mật

Sự an toàn của sơ đồ chữ ký dựa vào độ phức tạp của bài toán phân tích số n ra thừa số nguyên tố.

Việc chọn các giá trị p, q, e có ý nghĩa quyết định đến sự bí mật của khóa riêng d, cần chọn các giá trị này đủ lớn. Một số sơ hở mà ngƣời thám mã có thể lợi dụng để tấn công hệ mã hóa RSA:

1) Dùng chung modulo n. 2) Dùng số mũ lập mã e nhỏ.

3) Lợi dụng tính nhân của hàm lập mã. 4) Tấn công bằng cách lặp phép mã.

5) Có những bản rõ không che dấu đƣợc: Đó là các bản rõ mà có bản mã bằng chính nó x = xe mod n, ví dụ x = -1, 0, 1 vì e là số lẻ nên lũy thừa số mũ e của các số này sẽ bằng chính nó. Ngƣời ta chứng minh đƣợc rằng nếu n = p.q thì số các bản rõ x  Zn không che dấu đƣợc là:

(1+gcd(e-1, p-1)).(1+gcd(e-1, q-1))

Vì e-1, p-1, q-1 chẵn nên giá trị trên ít nhất là 9, nên mỗi hệ RSA có ít nhất 9 bản rõ không đƣợc che dấu.

2.5. HÀM BĂM VÀ ĐẠI DIỆN THÔNG ĐIỆP

2.5.1. Đặt vấn đề

Trong các sơ đồ chữ ký số, chữ ký thƣờng đƣợc xác định cho từng khối thông điệp, nếu thông điệp gồm nhiều khối thì chữ ký trên toàn bộ thông điệp là do ghép chữ ký trên từng khối lại với nhau; mà chữ ký trên từng khối thông thƣờng có độ dài bằng (hoặc thậm chí gấp đôi) độ dài khối thông điệp, do đó chữ ký thƣờng có độ dài tƣơng đƣơng hoặc lớn hơn độ dài khối thông điệp, thời gian ký sẽ tỷ lệ thuận với độ dài của thông điệp. Vì vậy nếu một thông điệp có kích thƣớc lớn thì ngoài việc tốn nhiều bộ nhớ để lƣu trữ chữ ký thì còn phải chi phí cao về thời gian ký và thẩm tra chữ ký. Hơn nữa nếu các thông điệp cùng chữ ký đƣợc truyền trên mạng thì các chữ ký với kích thƣớc nhỏ sẽ đem lại nhiều lợi ích nhƣ chi phí truyền thông thấp hơn, thời gian truyền thông nhanh hơn. Tóm lại, ngoài các yêu cầu về tính bảo mật, an toàn thì cần có yêu cầu về tính hiệu quả của chữ ký số.

Ví dụ với sơ đồ chữ ký chuẩn DSS chỉ ký trên các thông điệp có kích thƣớc 160 bit, bản ký số sẽ có kích thƣớc 320 bit. Trong khi đó trên thực tế, ta cần phải ký các thông điệp có kích thƣớc lớn hơn nhiều, chẳng hạn hàng chục MegaByte. Một cách để giải bài toán này là chia thông điệp thành nhiều đoạn 160 bit, sau đó ký lên các đoạn đó độc lập nhau. Nhƣng biện pháp này có một số vấn đề trong việc tạo ra các chữ ký số:

- Với các chữ ký an toàn thì tốc độ chậm vì chúng dùng nhiều phép tính số học phức tạp nhƣ số mũ modulo.

- Sau khi ký, nội dung của thông điệp có thể bị xáo trộn các đoạn với nhau, hoặc một số đoạn trong chúng có thể bị mất mát.

Để giải quyết những vấn đề trên ngƣời ta dùng khái niệm Hàm băm và đại diện thông điệp [2, 3, 7].

2.5.2. Đại diện thông điệp

Đối với chữ ký số vì chữ ký đƣợc ký cho từng bit của thông điệp nên muốn có chữ ký độ dài hạn chế trên thông điệp có độ dài tùy ý thì phải tìm cách rút ngắn độ dài thông điệp, nhƣng bản thân thông điệp không thể rút ngắn đƣợc vì sẽ làm thay đổi nội dung, do đó nên chỉ còn cách là tìm cho mỗi thông điệp một bản “đại diện”(compact representative image) của thông điệp (hay còn gọi là bản “tóm lược”, “dấu vết” - massage digest của thông điệp).

Thay cho việc ký trên toàn bộ thông điệp ta ký trên bản đại diện đó và xem chữ ký trên bản đại diện có tƣ cách nhƣ chữ ký trên thông điệp. Vậy bản đại diện thông điệp đƣợc tạo ra và phải có những tính chất nhƣ thế nào để đủ tƣ cách là “đại diện” cho thông điệp?

Có các thuộc tính thiết yếu sau với một đại diện thông điệp:

- Là xâu bit nhị phân có kích thƣớc không lớn, không phụ thuộc vào độ dài văn bản, ngoài ra xâu bit này đƣợc tính ra với tốc độ nhanh.

- Nếu có sự sửa đổi thông điệp thì đại diện thông điệp cũng bị thay đổi theo. - Không thể tạo ra một thông điệp có bản đại diện cho trƣớc trong thời gian

chấp nhận đƣợc.

Để tạo ra các bản đại diện thông điệp người ta dùng hàm băm.

Th«ng ®iÖp ®Çu vµo x

d¹ng v¨n b¶n, h×nh ¶nh, ©m thanh

KÝch th-íc tïy ý

Đại diện của x z = h(x) Kích thƣớc nhỏ, cố định Thông điệp x Kích thƣớc tùy ý Hàm băm h(x)

2.5.3. Hàm băm mật mã

2.5.3.1. Định nghĩa 2.5.1

Một hàm băm mật mã (hash function) h là một ánh xạ đi từ M là tập hợp tất cả chuỗi bit có độ dài tùy ý đến MH là tập hợp các chuỗi bit có độ dài cố định n (n>0):

h: M = {0,1}* → MH = {0,1}n

Nếu z = h(x) thì z là đại diện (tóm lƣợc) của x hay còn gọi là mã băm của x.

2.5.3.2. Các tính chất của hàm băm

1) Hàm băm h là hàm một chiều (one-way hash):

Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm. Nghĩa là: cho thông điệp x thì dễ dàng tính đƣợc z = h(x), nhƣng ngƣợc lại thì không thể suy ngƣợc lại đƣợc x nếu chỉ biết giá trị hàm băm z (thực chất là khó tính đƣợc, hiểu theo nghĩa độ phức tạp tính toán).

2) Hàm băm h là hàm không va chạm mạnh (collision resistane)

Hàm băm h là không va chạm mạnh nếu khó có thể tính toán để tìm ra hai thông điệp x và x’ mà x ≠ x’ và h(x) = h(x’).

3) Hàm băm h là hàm không va chạm yếu (preimage resistane)

Hàm băm h là không va chạm yếu nếu khi cho trƣớc một thông điệp x, khó có thể tiến hành tính toán để tìm ra thông điệp x’ ≠ x mà h(x’) = h(x).

2.5.3.3. Phân loại hàm băm

Hàm băm phân thành hai lớp, lớp hàm băm không có khóa và lớp hàm băm có khóa. Hàm băm không có khóa chỉ có duy nhất một đầu vào là thông điệp cần tính giá trị băm, mã băm của chúng đƣợc dùng làm mã phát hiện thay đổi (modification detection codes-MDCs). Còn các hàm băm có khóa nhận hai giá trị đầu vào: thông điệp cần tính giá trị băm và khóa bí mật dùng trong việc băm thông điệp theo một tiêu chuẩn quy định nào đó.

2.5.3.4. Ý nghĩa của việc dùng hàm băm

Hàm băm đã trợ giúp cho các sơ đồ ký số nhằm giảm kích thƣớc chữ ký, do đó giảm không gian lƣu trữ, thời gian và chi phí truyền tin qua mạng.

Hàm băm thƣờng kết hợp với chữ ký số để tạo ra một loại chữ ký số an toàn hơn, khó giả mạo và có thể kiểm tra tính toàn vẹn của thông điệp.

Tạo chữ ký số sử dụng hàm băm:

Xác thực chữ ký số sử dụng hàm băm:

Giải mã đýợc ?

Không đúng người gửi

Nội dung thông điệp bị thay đổii Hàm băm Tách

Thông điệp dữ liệu

Chữ ký số

X ≡ Y Chữ ký hợp lệ, Nội dung thông điệp

toàn vẹn Khóa công khai

Thông điệp dữ liệu được ký số

Bản đại diện X Bản đại diện Y Hàm băm

Gắn thông điệp Mã hóa

Khóa bí mật

Chữ ký số

Thông điệp dữ liệu được ký số Bản đại diện

2.5.3.5. Một số thuật toán hàm băm mật mã thông dụng

1) Giới thiệu

Các hàm băm thƣờng dùng hiện nay là thuộc dòng MD hoặc SHA. Dòng MD có thể băm các thông điệp có kích thƣớc tùy ý để đƣợc thông điệp đại diện có kích thƣớc 128 bit, có các hàm băm MD2, MD3, MD4, MD5. Dòng SHA có thể băm các thông điệp có kích thƣớc tùy ý để đƣợc thông điệp đại diện có kích thƣớc 160 bit.

2) Cấu trúc cơ bản của các thuật toán hàm băm

Khối dữ liệu vào x có độ dài hữu hạn tùy ý đƣợc phân thành các khối con liên tiếp có độ dài r cố định, giả sử là : x1, x2, …, xm. Ta cần thêm vào x các bit phụ để tổng số bit của x là bội của r. Khối bit phụ thêm vào thƣờng chứa một khối bit (có chiều dài cố định trƣớc, thƣờng là 64 bit) xác định chiều

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số loại chữ ký điện tử và ứng dụng (Trang 49)

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

(152 trang)