Luận văn Nghiên cứu một số chữ ký số đặc biệt và ứng dụng

Chữ ký số là một phương pháp hiệu quả trong bảo vệ thông tin. Vì vậy, nó đã, đang và sẽ thu hút nhiều sự chú ý, nghiên cứu và ứng dụng trên thế giới. Ở Việt Nam, chuyên ngành an toàn thông tin cũng chỉ đang trong giai đoạn phát triển, nên những kiến thức nền tàng này đóng vai trò rất quan trọng.

pdf68 trang | Chia sẻ: lylyngoc | Lượt xem: 4109 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu một số chữ ký số đặc biệt và ứng dụng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
24 1/. Các đặc điểm của hệ mã khoá công khai - Ƣu điểm: + Ngƣời mã hoá dùng khóa công khai, ngƣời giải mã giữ khóa bí mật. Vì thế khả năng lộ khóa bí mật khó hơn do khóa bí mật chỉ có một ngƣời giữ. + Nếu kẻ phá hoại biết khoá công khai, cố gắng tìm khoá bí mật thì chúng phải đƣơng đầu với bài toán “khó”. + Khi biết các tham số ban đầu của hệ mã hóa, việc tính ra cặp khoá công khai và bí mật là “dễ”, tức là trong thời gian đa thức. Ngƣời gửi có bản rõ P và khoá công khai, thì “dễ” tạo ra bản mã C. Ngƣời nhận có bản mã C và khoá bí mật, thì “dễ” giải đƣợc thành bản rõ P. + Nếu kẻ phá hoại biết khoá công khai và bản mã C, thì việc tìm ra bản rõ P cũng là bài toán “khó”, số phép thử là vô cùng lớn, không khả thi. + Hệ mã hóa khóa công khai còn tiện lợi hơn Hệ mã hóa khóa đối xứng bởi vì: Thuật toán đƣợc viết một lần, công khai cho nhiều lần dùng và cho nhiều ngƣời dùng, chỉ cần giữ bí mật khóa riêng. - Hạn chế: + Mã hóa khóa công khai mã hóa và giải mã chậm hơn mã hóa khóa đối xứng. 2/. Phạm vi áp dụng hệ mã hóa khoá công khai - Hệ mã hóa khóa công khai đƣợc sử dụng chủ yếu trên các mạng công khai nhƣ Internet, khi mà việc trao chuyển khoá bí mật tƣơng đối khó khăn. Đặc trƣng nổi bật của hệ mã hoá công khai là cả khoá công khai (public key) và bản mã (ciphertext) đều có thể gửi đi trên một kênh truyền tin không an toàn. 25 1.3. KÝ SỐ 1.3.1. Khái niệm chữ ký số 1.3.1.1. Sơ đồ chữ ký số Sơ đồ chữ ký số là bộ năm (P, A, K, S, V ), trong đó: P là tập hữu hạn các văn bản có thể. A là tập hữu hạn các chữ ký có thể. K là tập hữu hạn các khoá có thể. S là tập các thuật toán ký. V là tập các thuật toán kiểm thử. Với mỗi k  K, có thuật toán ký sigk  S, sigk : P A, và thuật toán kiểm thử Verk  V, Verk : P  A đúng, sai, thoả mãn điều kiện sau với mọi xP, y A: Đúng, nếu y = sig k(x) Verk (x, y) = Sai, nếu y ≠ sigk (x) 1.3.2. Phân loại chữ ký số Có nhiều loại chữ ký tùy theo cách phân loại, sau đây xin giới thiệu một số cách. 1.3.2.1. Phân loại chữ ký theo đặc trưng kiểm tra chữ ký 1/. Chữ ký khôi phục thông điệp Là loại chữ ký, trong đó ngƣời gửi chỉ cần gửi “chữ ký”, ngƣời nhận có thể khôi phục lại đƣợc thông điệp, đã đƣợc “ký” bởi “chữ ký” này. Ví dụ: Chữ ký RSA là chữ ký khôi phục thông điệp, sẽ trình bày trong mục sau. 2/. Chữ ký không thể khôi phục đƣợc thông điệp (đi kèm thông điệp) Là loại chữ ký, trong đó ngƣời gửi cần gửi “chữ ký” và phải gửi kèm cả thông điệp đã đƣợc “ký” bởi “chữ ký” này. Ngƣợc lại, ngƣời nhận sẽ không có đƣợc thông điệp gốc. Ví dụ: Chữ ký Elgamal là chữ ký đi kèm thông điệp (xem [1],[2]). 26 1.3.2.2. Phân loại chữ ký theo mức an toàn 1/. Chữ ký “không thể phủ nhận” Nhằm tránh việc nhân bản chữ ký để sử dụng nhiều lần, tốt nhất là ngƣời gửi tham gia trực tiếp vào việc kiểm thử chữ ký. Điều đó đƣợc thực hiện bằng một giao thức kiểm thử, dƣới dạng một giao thức mời hỏi và trả lời. Ví dụ: Chữ ký không thể phủ định Chaum - van Antwerpen, sẽ trình bày trong mục sau. 2/. Chữ ký “một lần” Để bảo đảm an toàn, “Khóa ký” chỉ dùng 1 lần (one- time) trên 1 tài liệu. Ví dụ: Chữ ký Lamport [15], chữ ký Fail - Stop (Van Heyst & Pedersen) [7]. 1.3.3. So sánh chữ ký thông thƣờng và chữ ký số Chữ ký thông thƣờng (tức chữ ký viết tay) đƣợc dùng rất phổ biến trong các công việc hàng ngày, nhƣ viết thƣ, rút tiền từ ngân hàng, ký hợp đồng,... Chữ ký đƣợc sử dụng nhƣ là bằng chứng để xác định ngƣời ký tài liệu là ai và khẳng định ngƣời ký đã chấp nhận hay chịu trách nhiệm về nội dung đƣợc đề cập trong tài liệu. Vì vậy, một chữ ký phải có các thuộc tính sau: - Chữ ký phải có tính tin cậy (xác thực). - Chữ ký không thể giả mạo đƣợc: chữ ký chứng minh chỉ có ngƣời ký đã ký tài liệu một cách chủ định mà không có ai khác. - Chữ ký không thể đƣợc dùng lại: chữ ký phải là một phần của tài liệu và không thể chuyển chữ ký sang tài liệu khác. - Tài liệu đã ký không thể thay đổi đƣợc, tức là không thể sửa đổi tài liệu sau khi ký. - Chữ ký không thể chối bỏ: sau khi ký, ngƣời ký không thể phủ nhận chữ ký mà anh ta đã ký. Trong thời đại bùng nổ công nghệ thông tin ngày nay, hầu nhƣ các hoạt động, giao dịch đều đƣợc thực hiện qua mạng máy tính. Vì vậy, thay vì sử dụng tài liệu giấy với chữ ký viết tay ngƣời ta sử dụng tài liệu điện tử với chữ ký số . Về hình thức, chữ ký số hoàn toàn khác với chữ ký thông thƣờng nhƣng vẫn đảm bảo các thuộc tính của chữ ký nhƣ: tính tin cậy (xác thực), tính không thể giả mạo, tính không thể dùng lại, tính không thể thay đổi, tính không thể chối bỏ. Về mặt thuộc tính chữ ký số và chữ ký 27 thông thƣờng đều có những thuộc tính giống nhau nhƣng về mặt vật lý và cấu trúc có những khác biệt rõ rệt. - Thứ nhất, chữ ký thông thƣờng là một phần vật lý của tài liệu đƣợc ký. Tuy nhiên, chữ ký số không gắn vào thông điệp đƣợc ký nhƣ chữ ký thông thƣờng, vì thế thuật toán ký phải liên kết giữa chữ ký và thông điệp đƣợc ký. - Thứ hai, thẩm định chữ ký thông thƣờng thực hiện bằng cách so sánh nó với chữ ký khác (chữ ký tin cậy). Trái lại, thẩm định chữ ký số dùng thuật toán kiểm tra công khai. Do đó, bất kỳ ai cũng có thể thẩm định. Sử dụng sơ đồ chữ ký an toàn sẽ ngăn chặn đƣợc khả năng giả mạo. - Một sự khác biệt nữa giữa chữ ký số và chữ ký thông thƣờng, bản sao của thông điệp số đã ký hoàn toàn giống với bản gốc. Ngƣợc lại, vẫn có thể phân biệt đƣợc bản sao của tài liệu giấy đã ký và bản gốc. Vì thế, phải ngăn chặn việc sử dụng lại thông điệp số đã ký khi quá hạn sử dụng bằng cách thêm thông tin thời gian khi thông điệp đƣợc ký. 1.3.4. Tạo đại diện tài liệu và hàm băm 1.3.4.1. Một số vấn đề với chữ ký số 1/. Vấn đề 1 Ký số thực hiện trên từng bit tài liệu, nên độ dài của chữ ký số ít nhất cũng bằng độ dài của tài liệu. Một số chữ ký trên bản tin có kích thƣớc gấp đôi bản tin gốc. Ví dụ khi dùng sơ đồ chữ ký số DSS để ký vào bản tin có kích thƣớc 160 bit, thì chữ ký số này sẽ có kích thƣớc 320 bit.Trong khi đó trên thực tế, ta cần phải ký vào các bản tin có kích thƣớc rất lớn, ví dụ vài chục MegaByte ( tƣơng ứng hàng ngàn trang tin trên giấy ). Nhƣ vậy phải tốn nhiều bộ nhớ để lƣu trữ “chữ ký”, mặt khác tốn nhiều thời gian để truyền “chữ ký” trên mạng. 2/. Vấn đề 2 Với một số sơ đồ chữ ký “an toàn” thì tốc độ ký lại chậm vì chúng dùng nhiều phép tính số học phức tạp nhƣ số mũ modulo. 3/. Vấn đề 3 Thực tế có thể xảy ra trƣờng hợp: với nhiều bản tin đầu vào khác nhau, sử dụng hệ mã hóa hay sơ đồ ký giống nhau ( có thể khác nhau ) nhƣng lại cho ra bản mã hay chữ ký giống nhau ( ánh xạ nhiều – một ). Điều này sẽ dẫn đến phức tạp cho việc xác thực thông tin. 28 1.3.4.2. Cách giải quyết các vấn đề trên 1/. Cách 1 - Một cách đơn giản để giải quyết các vấn đề trên với thông điệp có kích thƣớc lớn là “ chặt ” bản tin thành nhiều đoạn nhỏ (Ví dụ các đoạn 160 bit ), sau đó ký lên các đoạn đó độc lập nhau. Nhƣng biện pháp này vẫn không giải quyết đƣợc vấn đề nêu trên. - Hơn thế nữa còn gặp vấn đề nghiêm trọng hơn. Đó là kết quả 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. Ta cần phải bảo vệ tính toàn vẹn của bản tin gốc. 2/. Cách 2 - Thay vì phải ký trực tiếp trên tài liệu dài, ngƣời ta thƣờng dùng “hàm băm” để tạo “đại diện” cho tài liệu, sau đó ký số lên “đại diện” này. - Các tài liệu (bản tin) có thể dƣới dạng văn bản, hình ảnh, âm thanh,… và kích thƣớc của chúng tùy ý (vài KB đến vài chục MB), qua các thuật toán băm nhƣ MD4, MD5, SHA,…các đại diện tƣơng ứng của chúng có kích thƣớc cố định, ví dụ 128 bit với dòng MD, 160 bit với dòng SHA. - Đại diện của tài liệu chính là giá trị của “hàm băm” trên tài liệu, nó còn đƣợc gọi là “tóm lƣợc” hay “bản thu gọn” của tài liệu. - Với mỗi tài liệu ( đầu vào ), qua hàm băm chỉ có thể tính ra đƣợc một “đại diện” với giá trị băm tƣơng ứng - duy nhất. “Đại diện” của tài liệu đƣợc xem là “đặc thù” của tài liệu ( thông điệp ), giống nhƣ dấu vân tay của mỗi ngƣời. - Trên thực tế, hai tài liệu khác nhau có hai “đại diện” khác nhau. Nhƣ vậy khi đã có “đại diện” duy nhất cho tài liệu, thì việc “ký” vào tài liệu, đƣợc thay bằng ký vào đại diện của nó là hoàn toàn hợp lý. Đó là chƣa kể việc tiết kiệm thời gian cho việc ký số, bộ nhớ lƣu giữ “chữ ký”, thời gian truyền “chữ ký” trên mạng. 1.3.4.3. Tổng quan về hàm băm 1/. Khái niệm hàm băm Hàm băm là thuật toán không dùng khóa để mã hóa ( ở đây dùng thuật ngữ “băm” thay cho “mã hóa” ), nó có nhiệm vụ “lọc” ( băm ) tài liệu và cho kết quả là một giá trị “băm” có kích thƣớc cố định, còn gọi là “đại diện tài liệu” hay “đại diện thông điệp”. 29 Hàm băm là “hàm một chiều”, theo nghĩa giá trị của hàm băm là duy nhất, và từ giá trị băm này khó có thể suy ngƣợc lại nội dung hay độ dài ban đầu của tài liệu gốc. 2/. Đặc tính của hàm băm Hàm băm h là hàm một chiều với các đặc tính sau: - Với tài liệu đầu vào (bản tin gốc) x, chỉ thu đƣợc giá trị băm duy nhất z = h(x). - Nếu dữ liệu trong bản tin x bị thay đổi hay bị xóa để thành bản tin x’ thì giá trị băm h(x’) ≠ h(x). - Cho dù chỉ là một sự thay đổi nhỏ, ví dụ chỉ thay đổi 1 bit dữ liệu của bản tin gốc x, thì giá trị băm h(x) của nó cũng vẫn thay đổi. Điều này có nghĩa là: hai thông điệp khác nhau thì giá trị băm của chúng cũng khác nhau. - Nội dung của bản tin gốc khó thể suy ra từ giá trị hàm băm của nó. Nghĩa là: với thông điệp x thì dễ tính đƣợc z = h(x) nhƣng lại khó tính ngƣợc lại đƣợc x nếu chỉ biết giá trị băm h(x) ( kể cả khi biết hàm băm h ). 3/. Ứng dụng của hàm băm - Với bản tin dài x, thì chữ ký trên x cũng sẽ dài, nhƣ vậy tốn thời gian ký, tốn bộ nhớ lƣu giữ chữ ký, tốn thời gian truyền chữ ký trên mạng. Ngƣời ta dùng hàm băm h để tạo đại diện bản tin z = h(x), nó có độ dài ngắn ( Ví dụ 128 bit ). Sau đó ký trên z, nhƣ vậy chữ ký trên z sẽ nhỏ hơn rất nhiều so với chữ ký trên bản tin gốc x. - Hàm băm dùng để xác định tính toàn vẹn dữ liệu. 4/. Các tính chất của hàm băm - Tính chất 1: Hàm băm h là không va chạm yếu. Hàm băm h đƣợc gọi là không va chạm yếu nếu cho trƣớc bức điện x, khó thể tính toán để tìm ra bức điện x’ ≠ x mà h(x’) = h(x) - Tính chất 2: Hàm băm h là không va chạm mạnh. Hàm băm h đƣợc gọi là không va chạm mạnh nếu khó thể tính toán để tìm ra hai bức thông điệp khác nhau x’ và x ( x’ ≠ x ) mà có h(x’) = h(x) - Tính chất 3: Hàm băm h là hàm một chiều Hàm băm h đƣợc gọi là hàm một chiều nếu khi cho trƣớc một bản tóm lƣợc thông báo z thì khó thể tính toán để tìm ra thông điệp ban đầu x sao cho h(x) = z. 30 Chương 2. CHỮ KÝ MÙ RSA 2.1. KHÁI NIỆM CHỮ KÝ MÙ Chữ ký mù đƣợc David Chaum giới thiệu vào năm 1983, nó là một loại chữ ký số, trong đó nội dung của thông điệp cần đƣợc ký bị “che” đi trƣớc khi nó đƣợc ký. Chữ ký thu đƣợc có thể đƣợc xác thực nhƣ là đối với chữ ký số thông thƣờng. Chữ ký mù thƣờng đƣợc dùng trong các vấn đề đòi hỏi sự nặc danh nhƣ trong các ứng dụng tiền điện tử, bỏ phiếu điện tử,…. Chữ ký mù là chữ ký mà ngƣời ký không biết mình đang ký trên nội dung gì. Vì vậy mà ngƣời ta gọi là “mù”. Làm đƣợc nhƣ vậy vì nội dung X trƣớc khi đƣa cho ngƣời ký đã đƣợc làm mù thành X’. Ngƣời ký ký trên X’ chứ không phải ký trên X. A cần B ký cho một chữ ký trên nội dung X, A không đƣa X cho B ký mà làm mù X thành X’. Sau đó A đƣa X’ cho B ký. Sau khi nhận đƣợc chữ ký trên X’, A xóa mù để thu đƣợc chữ ký trên X. Nhƣ vậy A vẫn có chữ ký trên X mà B không biết thông tin gì về X. 2.1.1. Sơ đồ chữ ký RSA 1/. Sơ đồ - Tạo cặp khóa (bí mật, công khai) (a, b) : Chọn bí mật 2 số nguyên tố lớn p, q, tính n = p * q, công khai n, đặt P = A = Zn Tính bí mật (n) = (p-1).(q-1). Chọn khóa công khai b < (n), nguyên tố cùng nhau với (n). Khóa bí mật a là phần tử nghịch đảo của b theo mod (n): a*b  1 (mod (n)). Tập cặp khóa (bí mật, công khai) K = (a, b)/ a, b  Zn , a*b  1 (mod (n)). - Ký: Chữ ký trên x  P là y = Sigk (x) = x a (mod n), y  A. - Kiểm tra chữ ký: Verk (x, y) = đúng  x  y b (mod n). 31 2/. Ví dụ - Tạo cặp khóa (bí mật, công khai) (a, b) : Chọn bí mật số nguyên tố p = 3, q = 5, tính n = p * q = 3*5 = 15, công khai n. Đặt P = A = Zn . Tính bí mật (n) = (p-1).(q-1) = 2 * 4 = 8. Chọn khóa công khai b = 3 < (n), nguyên tố với (n) = 8. Khóa bí mật a = 3, là phần tử nghịch đảo của b theo mod (n): a * b  1 (mod (n). - Ký số: Chữ ký trên x = 2  P là y = Sig k (x) = x a (mod n)= 2 3 (mod 15) = 8, y  A. - Kiểm tra chữ ký: Verk (x, y) = đúng  x  y b (mod n)  2  8 3 (mod 15). 2.1.2. Sơ đồ chữ ký mù RSA 1/. Sơ đồ Mục đích là ông A có đƣợc chữ ký của bà B trên văn bản x theo sơ đồ chữ ký RSA nhƣng không để cho B biết giá trị x thực sự. Chữ ký đó là giá trị xa mod n. Lúc này A và B phải thực hiện một số bƣớc sau: - A làm mù x ( che x ) thành u: u = Blind(x) = x.r b (mod n) , với n và b đƣợc lấy từ khóa công khai của B, r là ngẫu nhiên  Zn và r nguyên tố cùng nhau với n. ( r phải nguyên tố cùng nhau với n để tồn tại phần tử nghịch đảo r-1 mod n ) - A gửi u cho B, B ký trên u, đƣợc chữ ký là v = Sig(u) sau đó gửi lại cho A: v = Sig(Blind(x)) = Sig( x*r b ) = x a . (r b ) a (mod n) - A xóa mù trên v, sẽ nhận đƣợc chữ ký trên x z = Unblind(v) = v/r mod n = x a . (r b ) a / r (mod n) = x a .r/r mod n = x a mod n Nhƣ vậy A đã nhận đƣợc chữ ký của B: xa mod n, mà B không biết nội dung của văn bản x. Bởi vì nội dung của thông điệp x đã đƣợc làm mù thành u thông qua việc nhân với rb, cho dù b là số công khai lấy từ B, nhƣng r là số ngẫu nhiên mà B khó có thể biết đƣợc. Sau khi B ký xong, A xóa mù ( nhân với r-1) chữ ký trên u để nhận đƣợc chữ ký của B trên x. 32 2.1.3. Ví dụ minh họa Sơ đồ chữ ký mù RSA với K = ( n, p, q, r, b, a ) trong đó: p = 3, q = 5, n = p * q = 15 (n) = ( p -1 ) * (q – 1 ) = 8 Chọn khóa công khai b = 3 < (n), nguyên tố cùng nhau với (n). Khóa bí mật a là phần tử nghịch đảo của b theo mod (n): a = 3. Giả sử thông điệp cần ký là x = 2. - Ông A chọn số ngẫu nhiên r = 4 nguyên tố cùng nhau với n. A che dấu định danh x bằng bí danh u: u = Blind(x) = x.r b (mod n) = 2 * 4 3 (mod 15) = 8. - A gửi bí danh u cho B, nhận đƣợc chữ ký v: v = Sig(u) = u a mod n = 8 3 ( mod 15) = 2 - Sau khi nhận đƣợc v, A xóa mù trên v sẽ nhận đƣợc chữ ký trên định danh x: Unblind(v) = v * 𝑟−1 mod n = 2 * 4-1 ( mod 15) = 8. 33 2.2. ỨNG DỤNG CHỮ KÝ MÙ 2.2.1. Ứng dụng trong tiền điện tử 2.2.1.1. Giao thức dùng tiền điện tử Trong [3], tác giả Trịnh Nhật Tiến đã trình bày giao thức cơ bản của Chaum để thực hiện việc dùng tiền điện tử bằng một minh họa đơn giản, trong đó ngƣời mua hàng là Alice muốn mua một quyển sách với giá 100$ từ một ngƣời bán hàng trực tuyến. Cả Alice và ngƣời bán sách cùng sử dụng một dịch vụ của một ngân hàng. Giao dịch đƣợc thực hiện nhƣ sau: 1/. Rút tiền + Alice tạo đồng tiền điện tử C bao gồm một chuỗi các bit để xác định một vài thông tin nhƣ số seri và giá trị của C ( trong trƣờng hợp này là 100$ ). + Ngân hàng ký mù lên đồng tiền C. + Ngân hàng trừ 100$ trong tài khoản của Alice. 2/. Tiêu tiền + Alice yêu cầu cuốn sách cần mua, Alice chuyển đồng tiền C (đã có chữ ký của ngân hàng) cho ngƣời bán hàng. + Ngƣời bán hàng kiểm tra sự hợp lệ của đồng tiền C bằng cách xác thực chữ ký (sử dụng khóa công khai của ngân hàng). Nếu chữ ký không hợp lệ thì ngƣời bán hàng kết thúc giao thức. 3/. Gửi tiền + Ngƣời bán hàng lấy đồng tiền C (đã nhận đƣợc từ Alice) gửi cho ngân hàng. + Ngân hàng xác thực chữ ký trên đồng tiền C. Nếu chữ ký hợp lệ thì ngân hàng sẽ kiểm tra xem đồng tiền C đã đƣợc tiêu chƣa. Nếu C chƣa đƣợc tiêu trƣớc đó thì ngân hàng sẽ cộng thêm vào tài khoản của ngƣời bán 100$. + Sau khi nhận tiền, ngƣời bán hàng gửi sách cho Alice. Trong trƣờng hợp này ngƣời bán hàng khó thể biết đồng tiền C đó từ tài khoản nào, hơn thế nữa, khi ngƣời bán hàng gửi tiền C vào tài khoản của mình, ngân hàng cũng khó thể biết đồng tiền đó nhận từ Alice vì nó đƣợc ký mù. 34 2.2.1.2. Vấn đề phát sinh khi dùng chữ ký mù Vấn đề có thể xảy ra đối với việc ký mù vào đồng tiền điện tử. Ví dụ Alice gửi cho ngân hàng một đồng tiền không trung thực và yêu cầu ký. Rất có thể Alice làm tờ tiền $1000 nhƣng lại khai báo với ngân hàng là $100 nhƣng khi ký mù thì không biết đƣợc số lƣợng tiền trong đồng tiền do nó đã bị làm mù. Trong [3] đã trình bày hai cách giải quyết vấn đề trên: 1/. Cách 1 Ngân hàng sử dụng các khóa ký (bí mật) khác nhau với các lƣợng tiền khác nhau. Theo đó, nếu Alice muốn lấy $1000 nhƣng khai báo với ngân hàng là $100, vì thế ngân hàng sẽ dùng khóa ký trên $100. ⇒ Khi kiểm tra chữ ký đồng tiền $1000 là không hợp lệ. 2/. Cách 2 Alice và ngân hàng có thể thực hiện một giao thức dựa vào xác suất. Đầu tiên Alice làm 10 tờ tiền ( c1, c2, …, c10 ), các tờ tiền này có mệnh giá giống nhau, chỉ khác nhau về số seri. Sau đó Alice làm mù tất cả các đồng tiền và gửi về cho ngân hàng. Ngân hàng chọn ngẫu nhiên 9 trong số 10 đồng tiền đó để yêu cầu Alice tiết lộ các thông tin xóa mù chúng. Ngân hàng xóa mù 9 đồng tiền này, nếu tất cả đều hợp lệ thì ngân hàng sẽ ký mù lên đồng tiền còn lại và gửi cho Alice. 2.2.2. Ứng dụng trong bỏ phiếu trực tuyến Trong [4], tác giả trình bày ứng dụng của chữ ký mù trong bỏ phiếu trực tuyến nhƣ sau: 2.2.2.1. Giao thức Theo phƣơng thức bỏ phiếu điện tử, mỗi lá phiếu phải có thông tin định danh. Nó có thể là số x nào đó và phải khác nhau. Mỗi lá phiếu phải có chữ ký trên định danh x thì lá phiếu mới có giá trị để bầu cử. Nếu cử tri CT chuyển định danh x cho Ban bầu cử ký, thì những thành viên trong ban bầu cử có thể xác định đƣợc mối quan hệ giữa cử tri và x ( Ví dụ qua địa chỉ nơi gửi trên Internet ). Đó là điều cử tri không muốn vì sợ rắc rối sau này. Vì thế, cử tri biến đổi x thành y trƣớc khi đƣa cho ban bầu cử ký xác nhận, Ban bầu cử ký vào y. Họ trao chữ ký trên y là z cho CT. Cử tri xóa mù trên z sẽ thu đƣợc chữ ký của Ban bầu cử trên định danh x, nhƣ vậy CT có quyền bầu cử. 35 Với kỹ thuật này, cuộc bỏ phiếu bảo đảm đƣợc: quyền bỏ phiếu và bí mật. Tức là: chỉ có ngƣời có quyền bầu cử mới đƣợc bỏ phiếu (vì lá phiếu đã có chữ ký của ban bầu cử ). 2.2.2.2. Vấn đề phát sinh khi dùng chữ ký mù Do ký mù trên lá phiếu nên ban bầu cử không ghi lại đƣợc định danh của cử tri. Do đó cử tri có thể xin nhiều lá phiếu để bỏ phiếu nhiều lần. Có thể giải quyết nhƣ sau: - Cử tri + Cử tri chọn bí mật số định danh x, “làm mù” thành y = blind(x) + Cử tri gửi tới ban bầu cử thông tin nhận dạng của mình, chứng minh thƣ điện tử, số y ( định danh x đã đƣợc làm mù thành y ). - Ban bầu cử + Ban bầu cử nhận dạng cử tri, kiểm tra chứng minh thƣ của cử tri. + Nếu hồ sơ của cử tri hợp lệ, khớp với danh sách cử tri của Ban điều hành, cử tri chƣa xin cấp chữ ký lần nào, thì ra lệnh cho Hệ thống “ký” lên y. Đó là chữ ký z = sign(y). + Ban bầu cử ghi số chứng minh thƣ của cử tri vào danh sách cử tri đã đƣợc cấp chữ ký ( để tránh việc cử tri đăng ký bỏ phiếu nhiều lần ). + Ban Bầu cử gửi chữ ký z về cho cử tri. - Cử tri + Khi nhận đƣợc chữ ký này, cử tri “xóa mù” trên z, thu đƣợc chữ ký trên định danh thật x là sign(x). Lá phiếu có gắn chữ ký sign(x) đƣợc xem nhƣ đã có chữ ký của ban bầu cử, đó là lá phiếu hợp lệ để cử tri ghi ý kiến của mình. + Cử tri có thể kiểm tra chữ ký của ban bầu cử trên lá phiếu của mình có hợp lệ hay không bằng cách dùng hàm kiểm tra chữ ký và khóa công khai của ban bầu cử. 36 Chương 3. CHỮ KÝ KHÔNG THỂ CHỐI BỎ 3.1. KHÁI NIỆM CHỮ KÝ KHÔNG THỂ CHỐI BỎ Chữ ký số, không giống nhƣ chữ ký trên giấy, nó có thể dễ dàng bị sao chép một cách chính xác. Thuộc tính này có thể có lợi cho những ứng dụng cần sự phổ biến rộng rãi của các thông báo cùng với khóa công khai, khi mà càng nhiều bản sao chép đƣợc phát ra càng tốt. Tuy nhiên, nó không phù hợp với nhiều ứng dụng khác. Ví dụ ứng dụng chữ ký điện tử thay thế cho ứng dụng mang tính cá nhân hoặc nhạy cảm nhƣ bản cam kết viết tay hoặc bằng miệng. Trong những trƣờng hợp này, sự phổ biến của bản sao chép có thể làm cho ngƣời dùng không hợp lệ thực hiện các hành vi nhƣ tống tiền hoặc gián điệp. Ngƣời nhận của những cam kết này có thể chắc chắn rằng ngƣời ký cam kết này sau này không thể chối bỏ nó, nhƣng ngƣời nhận không thể đƣa ra bản cam kết này cho bất kỳ ai khác khi không có sự đồng thuận của ngƣời ký. Chữ ký không thể chối bỏ phù hợp với các ứng dụng nhƣ ở trên. Chữ ký không thể chối bỏ, giống nhƣ chữ ký số thông thƣờng, là một số đƣợc đƣa ra bởi ngƣời ký, phụ thuộc vào khóa bí mật của ngƣời ký và thông điệp cần ký. Tuy nhiên, không giống nhƣ chữ ký số thông thƣờng, kiểm tra chữ ký không thể chối bỏ phải có sự hợp tác của ngƣời ký. Tính hợp lệ của chữ ký không thể chối bỏ có thể đƣợc kiểm tra ( bởi bất kỳ ai) bằng cách đƣa ra các giá trị hỏi ( challenge ) cho ngƣời ký, và ngƣời ký sẽ đƣa ra các giá trị đáp lại (response). Nếu kiểm tra là sai, có hai trƣờng hợp xảy ra: (a) chữ ký là không hợp lệ hoặc (b) ngƣời ký cố tình đƣa ra các giá trị đáp sai để cố tình chối bỏ một chữ ký do anh ta ký. Tuy nhiên cho dù ngƣời ký có máy tính với năng lực tính toán vô hạn, ngƣời kiểm thử chữ ký có thể phân biệt đƣợc trƣờng hợp (a) và (b) với độ chắc chắn cao bằng giao thức hỏi đáp thứ hai. 3.1.1. Sơ đồ chữ ký không thể chối bỏ Chaum – Van Antwerpen Sơ đồ chữ ký không thể chối bỏ đƣợc David Chaum và Hans van Antwerpen đề xuất năm 1989. Sơ đồ gồm 3 phần: thuật toán ký, giao thức kiểm thử và giao thức chối bỏ. 1/. Chuẩn bị các tham số + Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong 𝑍𝑝 là khó giải, đồng thời thỏa mãn điều kiện p = 2 * q + 1, q cũng là nguyên tố. + Chọn g ∈ 𝑍𝑝 ∗ là phần tử có cấp q. 37 + Chọn 1 ≤ a ≤ q – 1, tính h = 𝑔𝑎 mod p. + G là nhóm con (theo phép nhân) cấp q sinh ra bởi g của 𝑍𝑝 ∗ + Tập hữu hạn các văn bản có thể P, tập hữu hạn các chữ ký có thể A + P = A = G + Khóa công khai đƣợc định nghĩa pk = ( p, g, h ), khóa bí mật sk = a. 2/. Thuật toán ký Dùng khóa bí mật sk ở trên để ký lên thông điệp x, chữ ký là: y = sigsk( x ) = x a mod p 3/. Giao thức kiểm thử Bob muốn xác thực chữ ký y trên thông điệp x đƣợc ký bởi Alice. Giao thức đƣợc thực hiện nhƣ sau: - Bob chọn ngẫu nhiên 𝑒1, 𝑒2 ∈ 𝑍𝑞 ∗ - Bob tính c = 𝑦𝑒1𝑕𝑒2 mod p và gửi cho Alice. - Alice tính d = 𝑐𝑎 −1 mod q𝑚𝑜𝑑 𝑝 và gửi cho Bob. - Bob chấp nhận y là chữ ký đúng trên x khi và chỉ khi 𝑑 ≡ 𝑥𝑒1 g𝑒2𝑚𝑜𝑑 𝑝 4/. Giao thức chối bỏ chữ ký - Bob chọn ngẫu nhiên 𝑒1, 𝑒2 ∈ 𝑍𝑞 ∗ - Bob tính c = 𝑦𝑒1𝑕𝑒2 mod p và gửi cho Alice. - Alice tính d = 𝑐𝑎 −1 mod q𝑚𝑜𝑑 𝑝 và gửi cho Bob. - Bob kiểm tra 𝑑 ≢ 𝑥𝑒1 g𝑒2𝑚𝑜𝑑 𝑝 - Bob chọn ngẫu nhiên 𝑓1, 𝑓2 ∈ 𝑍𝑞 ∗ - Bob tính C = 𝑦𝑓1𝑕𝑓2mod p và gửi cho Alice3 - Alice tính D = 𝐶𝑎 −1 𝑚𝑜𝑑 𝑞𝑚𝑜𝑑 𝑝 và gửi cho Bob - Bob kiểm tra 𝐷 ≢ 𝑥𝑓1 g𝑓2𝑚𝑜𝑑 𝑝 - Bob kết luận chữ ký y thực sự là giả mạo nếu: (𝒅𝒈−𝒆𝟐)𝒇𝟏 ≡ (𝑫𝒈−𝒇𝟐)𝒆𝟏 𝑚𝑜𝑑 𝑝 38 3.1.2. Ví dụ minh họa Trong ví dụ này, Alice là ngƣời ký, Bob là ngƣời cần xin chữ ký. 1/. Chuẩn bị các tham số Alice chuẩn bị các tham số cho việc ký - Chọn số nguyên tố p = 59747 = 2 * q + 1, q = 29873 cũng là số nguyên tố - G là nhóm nhân con của 𝑍𝑝 ∗ cấp q. Chọn phần tử sinh của nhóm G là g = 3. - Đặt P = A = G, K = {(p, g, a, h ): a ∈ 𝑍𝑞 ∗, h ≡ 𝑔𝑎 mod p } Chọn a = 11, h = 311 mod 59747 = 57653 2/. Thuật toán ký Dùng khóa bí mật sk = a để ký lên x = 229 Chữ ký thu đƣợc là y = sigsk (x) = x a mod p = 229 11 mod 59747 = 30179. 3/. Giao thức kiểm thử chữ ký Dùng khóa công khai pk = ( p, g, h ) = ( 59747, 3, 57653 ) - Bob chọn ngẫu nhiên 𝑒1 = 11, 𝑒2 = 15 ∈ 𝑍𝑞 ∗ - Bob tính c = 𝑦𝑒1𝑕𝑒2mod p = 30179115765315mod 59747 = 55601 - Alice tính d = 𝑐𝑎 −1 mod q𝑚𝑜𝑑 𝑝 = 5560111 −1mod 29873𝑚𝑜𝑑 59747 = 43319 - Bob kiểm tra điều kiện 𝑑 ≡ 𝑥𝑒1 g𝑒2𝑚𝑜𝑑 𝑝 Có 𝑥𝑒1 g𝑒2𝑚𝑜𝑑 𝑝 = 22911315mod 59747 = 43319 ≡ 43319 mod 59747  Bob kết luận chữ ký là đúng. 4/. Giao thức chối bỏ chữ ký Giả sử Bob gửi tài liệu x = 229, với chữ ký y = 30178 - Bob chọn ngẫu nhiên 𝑒1 = 11, 𝑒2 = 15 ∈ 𝑍𝑞 ∗ - Bob tính c = 𝑦𝑒1𝑕𝑒2 mod p = 30178115765315 𝑚𝑜𝑑 59747 = 19071 - Alice tính d = 𝑐𝑎 −1mod q𝑚𝑜𝑑 𝑝 = 1907111 −1mod 29873𝑚𝑜𝑑 59747 = 33692 - Bob kiểm tra điều kiện 𝑑 ≡ 𝑥𝑒1 g𝑒2𝑚𝑜𝑑 𝑝 Có 𝑥𝑒1α𝑒2𝑚𝑜𝑑 𝑝 = 22911315mod 59747 = 43319 ≠ 33692 mod 59747  Bob thực hiện tiếp 39 - Bob chọn ngẫu nhiên 𝑓1 = 17, 𝑓2 = 19 ∈ 𝑍𝑞 ∗ - Bob tính C = 𝑦𝑓1𝑕𝑓2 mod p = 30178175765319mod 59747 = 9217 và gửi cho Alice - Alice tính D = 𝐶𝑎 −1mod q𝑚𝑜𝑑 𝑝 = 921711 −1mod 29873𝑚𝑜𝑑 59747 = 33028 và gửi cho Bob - Bob kiểm tra 𝐷 ≢ 𝑥f1 g𝑓2𝑚𝑜𝑑 𝑝 - Bob kiểm tra: (𝒅𝒈−𝒆𝟐)𝒇𝟏 ≡ (𝑫𝒈−𝒇𝟐)𝒆𝟏 𝒎𝒐𝒅 𝒑 Có (𝒅𝒈−𝒆𝟐)𝒇𝟏 mod p = (33692 * 3-15)17 (mod 59747) = 40635 (𝑫𝒈−𝒇𝟐)𝒆𝟏 ( mod p ) = (33028 * 3-19)11 ( mod 59747 ) = 40635  (𝒅𝒈−𝒆𝟐)𝒇𝟏 ≡ (𝑫𝒈−𝒇𝟐)𝒆𝟏 𝒎𝒐𝒅 𝒑  Bob kết luận chữ ký là giả mạo Ví dụ này đƣợc trình bày với mục đích minh họa, nên chỉ sử dụng các số nguyên tố p, q nhỏ. Trong thực tế ứng dụng, để đảm bảo an toàn, ngƣời ta dùng các số p, q rất lớn, chẳng hạn các số có biểu diễn nhị phân cỡ 512 bits. Khi đó ta có q ≥ 2512 tức là 1/q ≤ 2−512 , một xác suất rất bé, có thể bỏ qua; và vì vậy, các yêu cầu đối với các giao thức kiểm thử và giao thức chối bỏ nhƣ trong phần đặt vấn đề có thể xem nhƣ là đƣợc thỏa mãn. 3.1.3. Một số đánh giá về sơ đồ 3.1.3.1. Độ an toàn của chữ ký Độ an toàn của hệ thống phụ thuộc vào bài toán logarit rời rạc do khóa bí mật sk = a đƣợc tính từ công thức h = ga mod p  a = loggh mod p, trong đó g, h, p là công khai. Đây chính là vấn đề của bài toán logarit rời rạc khó giải. 3.1.3.2. Chứng minh tính đúng đắn của giao thức xác thực 1/. Kết luận 1 Nếu y đúng là chữ ký của Alice trên x ( tức là y ≡ 𝑥𝑎 𝑚𝑜𝑑 𝑝 ), thì việc Bob chấp nhận y là chữ ký của Alice trên x theo giao thức kiểm thử là đúng. 40 Chứng minh Giả sử y là chữ ký hợp lệ trên x. Bắt đầu từ giá trị d mà Bob nhận từ Alice: d = 𝑐𝑎 −1 mod q𝑚𝑜𝑑 𝑝 = 𝑦𝑒1𝑎 −1 𝑕𝑒2𝑎 −1 𝑚𝑜𝑑 𝑝 (1) - Lại có y ≡ 𝑥𝑎𝑚𝑜𝑑 𝑝  𝑦𝑎 −1 ≡ 𝑥 𝑚𝑜𝑑 𝑝 (2) h ≡ 𝑔𝑎𝑚𝑜𝑑 𝑝  𝑕𝑎 −1 ≡ 𝑔 𝑚𝑜𝑑 𝑝 (3) Từ (1) (2) (3)  𝑑 ≡ 𝑥𝑒1 g𝑒2𝑚𝑜𝑑 𝑝 là điều kiện đúng để Bob chấp nhận một chữ ký là đúng. 2/. Kết luận 2 Trong trƣờng hợp y ≠ 𝑥𝑎(𝑚𝑜𝑑 𝑝), tức y không phải là chữ ký của Alice trên x thì việc Bob, theo giao thức kiểm thử, chấp nhận chữ ký y là chữ ký của Alice trên x, có thể xảy ra với xác suất là 1/q. Chứng minh - Giá trị c mà Alice nhận đƣợc quyết định bởi sự lựa chọn 2 giá trị 𝑒1, 𝑒2. - y, h là phần tử trong G cấp q  mỗi giá trị c tƣơng ứng với q cặp (𝑒1, 𝑒2 ) - Khi Alice nhận đƣợc c từ Bob, Alice không có cách gì để biết là Bob đã dùng cặp ( e1, e2) nào trong q cặp có thể đó. Chúng ta sẽ chứng minh rằng, nếu y ≠ x a mod p, bất kỳ giá trị d nào mà Alice trả lại cho Bob tƣơng ứng với duy nhất 1 trong q cặp ( e1, e2 ), tức là trong q cặp đó chỉ có đúng một cặp ( e1, e2) thỏa mãn đồng dƣ thức d ≡ 𝑥𝑒1𝑔𝑒2 (𝑚𝑜𝑑 𝑝). Thật vậy: + g là phần tử sinh của nhóm G theo modulo q. Vì thế chúng ta có thể viết lại nhƣ sau: c = g i mod q, d = g j mod q, x = g k mod q, y = g l mod q trong đó i, j, k, l ϵ Zq. + Kết hợp với c ≡ 𝑦𝑒1𝑕𝑒2 ( 𝑚𝑜𝑑 𝑝 ) d ≡ 𝑥𝑒1𝑔𝑒2 ( 𝑚𝑜𝑑 𝑝 )  i = le1 + ge2 ( mod q ) j = ke1 + e2 ( mod q ) Do giả thiết y ≠ xa( mod p )  l ≢ ak ( mod q ) (I) 41  Định thức của ma trận hệ số của (I) với các ẩn số e1, e2 là khác 0  (I) có nghiệm duy nhất  bất kỳ d ∈ G là giá trị đáp ( response ) của chỉ một trong q cặp giá trị có thể ( e1, e2 )  Xác suất để Alice đƣa ra giá trị đáp đúng cho Bob trong quá trình xác thực chữ ký là 1/q. Nhận định đƣa ra đã đƣợc chứng minh 3.1.3.3. Chứng minh tính đúng đắn của giao thức chối bỏ 1/. Kết luận 1 Nếu y ≠ xa mod p và cả Alice và Bob đều tuân theo giao thức chối bỏ, thì (𝑑𝑔−𝑒2 )𝑓1 ≡ (𝐷𝑔−𝑓2 )𝑒1 𝑚𝑜𝑑 𝑝 tức giao thức cho kết quả chính xác. Chứng minh Giả sử y ≠ xa (mod p), Alice và Bob cùng thực hiện giao thức chối bỏ. Do y không là chữ ký của Alice trên x nên Bob sẽ kiểm thử đúng các bất đồng dƣ thức trong các bƣớc 3 và 6 của giao thức. Vì 𝑕 ≡ 𝑔𝑎 ( 𝑚𝑜𝑑 𝑝 ), nên ta có: (𝒅𝒈−𝒆𝟐)𝒇𝟏 ≡ ((𝑦𝑒1𝑕𝑒2 )𝑎 −1 𝑔−𝑒2 )𝑓1 ( mod p ) ≡ 𝑦𝑎 −1𝑒1𝑓1𝑕𝑎 −1𝑒2𝑓1𝑔−𝑒2𝑓1 ( mod p ) ≡ 𝑦𝑎 −1𝑒1𝑓1 ( mod p ) Tƣơng tự ta cũng có: (𝑫𝒈−𝒇𝟐)𝒆𝟏 ≡ 𝑦𝑎 −1𝑒1𝑓1 ( mod p ) Nhƣ vậy, đồng dƣ thức ở bƣớc 7 của giao thức đƣợc nghiệm đúng, và kết luận y là chữ ký giả mạo của A trên x là chính xác, không thể bác bỏ đƣợc. 2/. Kết luận 2 Một điều thú vị có thể xảy ra khi Alice cố tình muốn chối bỏ một chữ ký của mình bằng cách không tuân theo giao thức hỏi – đáp một cách trung thực. Alice có thể làm cho Bob nghĩ rằng chữ ký thực sự là giả mạo trong khi không phải nhƣ thế. Dƣới đây xin nêu ra 1 kết luận nhƣ sau: Xác suất để Alice chối bỏ một chữ ký đúng của anh ta là 1/q Chứng minh Nếu Alice cố gắng lừa Bob để Bob nghĩ rằng chữ ký đó là giả mạo, có nghĩa là những điều kiện sau đây đồng thời xảy ra: 42 𝑦 ≡ 𝑥𝑎 𝑚𝑜𝑑 𝑝 (1) 𝑑 ≢ 𝑥𝑒1𝑔𝑒2 𝑚𝑜𝑑 𝑝 (2) 𝐷 ≢ 𝑥𝑓1𝑔𝑓2 𝑚𝑜𝑑 𝑝 (3) (𝒅𝒈−𝒆𝟐)𝒇𝟏 ≡ (𝑫𝒈−𝒇𝟐)𝒆𝟏 𝒎𝒐𝒅 𝒑 (4) Điều kiện (4) có thể đƣợc viết lại nhƣ sau 𝐷 ≡ 𝑑𝑜 𝑓1𝑔𝑓2 (mod p ) trong đó x = do = 𝑑 1/𝑒1𝑔−𝑒2/𝑒1𝑚𝑜𝑑 𝑝 mod p (5) Nhƣ trong phần trình bày trƣớc, chúng ta kết luận rằng y là chữ ký hợp lệ của d0 với xác suất 1 – 1/q ( do xác suất của việc chấp nhận chữ ký 𝑦 ≠ 𝑥𝑎 𝑚𝑜𝑑 𝑝 là 1/q ) Do y là chữ ký hợp lệ của x, x = d0 => (2)  x ≢ 𝑑 1/𝑒1𝑔−𝑒2/𝑒1𝑚𝑜𝑑 𝑝 Lại có do = 𝑑 1/𝑒1𝑔−𝑒2/𝑒1𝑚𝑜𝑑 𝑝 Từ 2 điều trên => x ≠ d0. Điều này có nghĩa là Alice làm cho Bob nghĩ rằng y là giả mạo với xác suất 1/q. 43 3.2. CÁC HÌNH THỨC TẤN CÔNG CHỮ KÝ KHÔNG THỂ CHỐI BỎ Trong [8], Markus Jakobsson trình bày hai hình thức tấn công chữ ký không thể chối bỏ nhƣ sau: 3.2.1. Tống tiền ngƣời ký Giả sử Alice ký chữ ký y trên thông điệp x, nhƣng không muốn để lộ thông tin về x cho các đối thủ của cô biết. Ngƣời tống tiền Eve bằng cách nào đó, tìm đƣợc (x, y) và quyết định tống tiền Alice. Eve thực hiện: - Bƣớc 1: Eve thông báo cho các đối thủ của Alice biết cô ta có một số thông tin mà họ cần. Cô ta đƣa cho mỗi đối thủ {Enemyi}( i = 1 – n ) cặp giá trị {y, h} và yêu cầu mỗi đối thủ tạo hai số bí mật ai, bi sau đó tính bí mật ci = 𝑦 𝑎1𝑕𝑏𝑗 và đƣa giá trị ci cho Eve. - Bƣớc 2: Eve cũng tạo bí mật cặp (a0, b0 ), tính c0 = 𝑦 𝑎0𝑕𝑏0 . - Bƣớc 3: Eve tính c = 𝑐𝑖 𝑛 𝑖=0 . Sau đó, Eve bằng cách nào đó yêu cầu Alice ký lên một thông điệp x’ bất kỳ, thu đƣợc chữ ký y’. Thay vì xác thực chữ ký x’, Eve xác thực chữ ký trên x. Alice không thể biết đƣợc điều này bởi vì cặp giá trị ngẫu nhiêu trong giao thức hỏi đáp là do ngƣời xác thực chữ ký thực hiện. Sau khi gửi giá trị c cho Alice, Eve nhận đƣợc d = 𝑥𝑒1𝑔𝑒2 trong đó e1 = 𝑎𝑖 𝑛 𝑖=0 và e2 = 𝑏𝑖 𝑛 𝑖=0 ( vào thời điểm này, Eve không biết các giá trị ai, bi ). - Bƣớc 4: Alice yêu cầu các đối thủ của Alice đƣa cho cô ta cặp giá trị ( ai, bi ). Eve thông báo cho Alice biết cô ta đã có đƣợc thông điệp x và có thể cô ta sẽ nói với các đối thủ của Alice. Nếu Alice không thực hiện theo những gì Eve nói, Eve sẽ thực hiện bƣớc 5 nhƣ sau: - Bƣớc 5: Ở bƣớc này, Eve đƣa ( {𝑎𝑖}𝑖=1 𝑛 , {𝑏𝑖}𝑖=1 𝑛 ,𝑑, 𝑥 ) cho tất cả các đối thủ . Khi đó {Enemy}i có thể thấy cặp (ai, bi) đƣợc dùng trong tập {ai}{bi} dùng để xác thực chữ ký. Vì thế họ tin rằng Alice đã kí lên thông điệp x. 3.2.2. Nhiều ngƣời cùng xác thực chữ ký mà ngƣời ký không biết Eve là ngƣời đứng ra xác thực, cô ta tính c = 𝑐𝑖 𝑛 𝑖=0 từ các giá trị ci = 𝑦 𝑎𝑖𝑕𝑏𝑖 mà những ngƣời muốn xác thực chữ ký gửi đến cho cô ta. Eve gửi c cho Alice. Sau khi nhận đƣợc d từ Alice, Eve gửi ({𝑎𝑖}𝑖=0 𝑛 , {bi}𝑖=0 𝑛 , d) cho những ngƣời vừa gửi ci đến cho Eve. Tất cả những ngƣời này đã xác thực đƣợc chữ ký mà Alice không hề hay biết. Thật vậy: c = 𝑐𝑖 𝑛 𝑖=0 = 𝑦 𝑎𝑖𝑛 𝑖=0 𝑕 𝑏𝑖 = 𝑦 𝑎𝑖 𝑛 𝑖=0 𝑕 𝑏𝑖 𝑛 𝑖=0 44  e1 = 𝑎𝑖 𝑛 𝑖=0 và e2 = 𝑏𝑖 𝑛 𝑖=0 Khi đó tất cả những ngƣời gửi ci cho Eve kiểm tra đƣợc rằng (ai, bi) đã đƣợc sử dụng trong giao thức kiểm tra chữ ký, và chữ ký đƣợc kiểm tra nhƣ là liên hệ trực tiếp với Alice. 45 3.3. ỨNG DỤNG CHỮ KÝ KHÔNG THỂ CHỐI BỎ 3.3.1. Ứng dụng trong thẻ chứng minh thƣ điện tử Bởi vì quá trình xác thực một chữ ký cần sự cộng tác của ngƣời ký, chữ ký không thể chối bỏ phù hợp với ứng dụng chứng minh thƣ điện tử. Ở Bỉ ngƣời ta đã sử dụng chứng minh thƣ điện tử dựa trên chữ ký không thể chối bỏ [6]. Một ví dụ minh họa, ngƣời A mua một vài hàng hóa qua mạng Internet và đƣợc chuyển về bƣu điện địa phƣơng cho A. A ký vào văn bản online sử dụng chữ ký không thể chối bỏ, khi A tới bƣu điện để lấy hàng hóa, A xác thực rằng anh ta chính là chủ sở hữu của những hàng hóa đó. 3.3.2. Ứng dụng trong ký hợp đồng qua điện thoại Một ví dụ khác đƣợc minh họa trong [11]. Bài báo trình bày về sự không chối cãi của cuộc hội thoại VoIP ( Voice – over –IP ). Do sự sử dụng rộng rãi của VoIP, sẽ là một sự tiện lợi nếu chúng ta ghi âm cuộc hội thoại và coi nhƣ 1 bản hợp đồng giữa hai tổ chức. Một bản hợp đồng miệng có tính ràng buộc nhƣ một bản hợp đồng trên giấy, tuy nhiên hợp đồng trên giấy thƣờng đƣợc sử dụng rộng rãi hơn bởi vì có chữ ký của hai bên nên sẽ dễ dàng xử lý khi có tranh chấp. Vì thế nếu chúng ta ghi âm cuộc hội thoại dƣới dạng số và ký trên nó, thì đoạn ghi âm có thể đƣợc sử dụng nhƣ bằng chứng nếu có tranh chấp. Khi đó nó có sức thuyết phục không kém gì hợp đồng trên giấy. Ở đây, chữ ký không thể chối bỏ là một sự lựa chọn tốt, bởi vì nó chỉ liên quan đến hai tổ chức, không cần phát tán ra bên ngoài. Khi đó mỗi tổ chức dùng khóa bí mật của mình ký lên đoạn ghi âm. Khi đó đoạn hội thoại cùng với 2 chữ ký của 2 tổ chức lên đoạn hội thoại chính là hợp đồng. Bởi vì đoạn hội thoại đã đƣợc ký lên, không ai có thể thay đổi nó hoặc tạo ra một chữ ký giả. 46 Chương 4. THỬ NGHIỆM CÁC CHƢƠNG TRÌNH 4.1. THỬ NGHIỆM ỨNG DỤNG CHỮ KÝ SỐ 4.1.1. Giới thiệu Chƣơng trình ký số file văn bản tiếng Việt theo thuật toán ký số RSA đƣợc viết bằng Visual C++ trên nền .NET 3.5, sử dụng thƣ viện nguồn mở OpenSSL. Chƣơng trình có các chức năng chính sau: - Ký văn bản text tiếng việt theo thuật toán RSA - Xác thực 1 chữ ký - Mã hóa văn bản và chữ ký theo thuật toán mã hóa DES - Giải mã văn bản và chữ ký theo thuật toán mã hóa DES Dƣới đây là giao diện của chƣơng trình: Hình 1: Giao diện chương trình ký số RSA 47 4.1.2. Mô tả hoạt động chƣơng trình 4.1.2.1. Chức năng ký số ( sử dụng thuật toán ký số RSA ) 1/. Mô tả cách dùng - Mô tả chức năng: Chƣơng trình sẽ sinh ra khóa ký RSA ngẫu nhiên có độ dài 512 bits hoặc 1024 bits (theo lựa chọn của ngƣời dùng ). Sau đó ghi khóa bí mật và khóa công khai ra các file tƣơng ứng. Trƣớc khi ký, văn bản sẽ đƣợc băm theo thuật toán SHA1. Hình 2: Giao diện chức năng “Ký”RSA - Ngƣời dùng nhập vào các thông tin sau + Key size ( có 2 lựa chọn 512 bits và 1024 bits ). + Input file: Đƣờng dẫn tuyệt đối của văn bản cần ký ( File text Unicode ) + Public key file: đƣờng dẫn tuyệt đối của file sẽ lƣu khóa công khai tạo ra + Private key file: đƣờng dẫn tuyệt đối của file sẽ lƣu khóa bí mật + Digest: đƣờng dẫn tuyệt đối của file sẽ lƣu đại diện của văn bản ( giá trị băm của văn bản trƣớc khi ký ). + Signature: đƣờng dẫn tuyệt đối của file chứa chữ ký. 48 Trong chƣơng trình này, khóa công khai, khóa bí mật, đại diện, chữ ký đƣợc biểu diễn dƣới dạng 1 xâu chứa mã ASCII của các ký tự. 2/. Mô tả cách cài đặt chức năng ký số Chức năng này có các hàm chính sau: - Hàm sinh khóa bí mật và công khai phục vụ việc ký private: RSA* generateKey (String^ klen) đƣợc cài đặt nhƣ sau: + Khởi tạo biến RSA* r bằng hàm RSA_generate_key của thƣ viện OpenSSL. Ở đây chúng ta lƣu ý rằng trong thƣ viện OpenSSL, khóa bí mật và khóa công khai đƣợc biểu diễn theo chuẩn PKCS#1. + Ghi khóa bí mật vào file khóa bí mật + Ghi khóa công khai vào file khóa công khai + Hàm trả lại giá trị r - Hàm thực hiện việc ký private: void hSign(RSA* r ) đƣợc cài đặt nhƣ sau: + Đọc nội dung file cần ký vào mảng buffer có kiểu wchar_t* + Biểu diễn mỗi phần tử trong buffer dƣới dạng mã Unicode của nó. Kết quả thu đƣợc là String mesStr chứa mã Unicode tƣơng ứng của buffer. + Gọi đến hàm SHA1 trong thƣ viện OpenSSL để băm string mesStr theo thuật toán băm SHA1, kết quả thu đƣợc lƣu vào mảng unsigned char* hash. + Gọi đến hàm RSA_sign trong thƣ viện OpenSSL để ký lên mảng hash ở trên với khóa ký r. Kết quả trả về sau khi ký là là mảng unsigned char* signature. + Biểu diễn 2 mảng kiểu unsigned char* hash và signature dƣới dạng các String chứa mã ASCII của các ký tự. Ghi các giá trị này tƣơng ứng ra file chứa đại diện và file chứa chữ ký. + Khi việc ký kết thúc thành công sẽ hiện lên thông báo “Signing completed successfully!!!”. 49 4.1.2.2. Chức năng xác thực chữ ký số 1/. Mô tả Hình 3: Giao diện chức năng xác thực chữ ký số RSA - Ngƣời dùng nhập vào các thông tin sau: + Input file: File văn bản + Signature: File chữ ký trên văn bản + Public key file: File chứa khóa công khai dùng để xác thực chữ ký. - Kết quả trả về là “Signature is true” nếu chữ ký là đúng hoặc “Signature is false” nếu chữ ký là sai. 2/. Mô tả cài đặt Có các hàm chính sau đây: - Hàm xử lý sự kiện click vào nút Verify private:System::Void Verify_Click(System::Object^sender,System::EventArgs^ e) + Đọc file thông điệp vào 1 mảng wchar_t* wbuffer. + Biểu diễn mỗi phần tử trong buffer dƣới dạng mã Unicode của nó. Kết quả thu đƣợc là String mesStr chứa mã Unicode tƣơng ứng của buffer. + Đọc nội dung file chữ ký vào một mảng char* sig 50 + Băm String mesStr theo thuật toán SHA1, giá trị băm đƣợc lƣu vào mảng unsigned char* hash. + Đọc nội dung file khóa công khai vào một mảng unsigned char* pubKey. Tạo biến RSA* rsa từ hàm d2i_RSAPublicKey ( trong thƣ viện nguồn mở OpenSSL ) trong đó pubKey là 1 tham số của hàm. + Gọi đến hàm RSA_verify trong thƣ viện OpenSSL để xác thực chữ ký là đúng hay sai. 4.1.2.3. Chức năng mã hóa theo hệ mã hóa DES 1/. Mô tả - Chức năng: mã hóa file văn bản và file chữ ký theo hệ mã hóa DES Hình 4: Giao diện chức năng mã hóa DES file văn bản và chữ ký - Ngƣời dùng nhập vào các thông tin sau: + Input file: đƣờng dẫn tuyệt đối của file văn bản + Signature: đƣờng dẫn tuyệt đối của file chữ ký + Passphrase + Encrypted input file: đƣờng dẫn tuyệt đối file lƣu bản mã văn bản. + Encrypted signature: đƣờng dẫn tuyệt đối file lƣu bản mã chữ ký 51 2/. Mô tả cài đặt - Hàm mã hóa file thông điệp và file chữ ký theo hệ mã hóa DES private:System::Void encrypt_Click(System::Object^ sender, System::EventArgs^e) đƣợc cài đặt nhƣ sau: + Đọc nội dung file văn bản vào wchar_t* buffer. + Biểu diễn mỗi phần tử trong buffer dƣới dạng mã Unicode của nó. Kết quả thu đƣợc là String mesStr chứa mã Unicode tƣơng ứng của buffer. + Đọc file chữ ký vào một mảng unsigned char* sig. + Tạo khóa mã hóa và giải mã từ passphrase do ngƣời dùng nhập vào. + Lần lƣợt dùng hàm DES_cfb64_encrypt với tùy chọn DES_ENCRYPT của thƣ viện OpenSSL để mã hóa 2 mảng buffer và sig thu đƣợc 2 mảng unsigned char lần lƣợt là resMes và resSig. + Biểu diễn 2 mảng kiểu unsigned char resMes và resSig dƣới dạng các String chứa mã ASCII của các ký tự. Ghi các giá trị này tƣơng ứng ra file chứa bản mã của văn bản và file chứa bản mã của chữ ký. 4.1.2.4. Chức năng giải mã DES 1/. Mô tả Hình 5: Giao diện chức năng giải mã DES 52 - Chức năng: giải mã bản mã thông điệp và bản mã chữ ký thành bản rõ tƣơng ứng. - Ngƣời dùng nhập vào các thông tin sau: + Encrypted input file: đƣờng dẫn tuyệt đối của file chứa bản mã thông điệp + Encrypted signature: đƣờng dẫn tuyệt đối của file chứa bản mã chữ ký + Passphrase + Decrypted input file: đƣờng dẫn tuyệt đối của file sẽ chứa bản rõ thông điệp + Decrypted signature: đƣờng dẫn tuyệt đối của file chứa bản rõ của chữ ký. Sau khi kết thúc quá trình mã hóa, một thông báo “Decryption completed sucessfully!!!” đƣợc đƣa ra. 2/. Mô tả cài đặt Các hàm chính - Hàm giải mã bản mã thông điệp và bản mã chữ ký private:System:: Void decrypt_Click(System::Object^sender, System::EventArgs^e) + Đọc dữ liệu từ file thông điệp đã mã hóa vào mảng unsigned char enFileArr + Đọc dữ liệu từ file chữ ký đã mã hóa vào mảng unsigned char enSigArr. + Tạo khóa DES từ passphrase do ngƣời dùng nhập vào. + Dùng hàm DES_cfb64_encrypt với tùy chọn DES_DECRYPT để giải mã file bản mã thông điệp. Tham số của hàm là mảng unsigned char enFileArr. Kết quả trả về của hàm là 1 mảng unsigned char chứa mã Unicode của các ký tự. Từ mảng này ta chuyển sang đƣợc mảng wchar_t chứa các ký tự của văn bản nguyên gốc. Ghi mảng này vào file ta đƣợc file chứa bản rõ thông điệp. + Dùng hàm DES_cfb64_encrypt với tùy chọn DES_DECRYPT để giải mã file bản mã chữ ký. Tham số của hàm là mảng unsigned char enSigArr. Kết quả trả về của hàm này là 1 mảng unsigned char chứa mã ASCII của các ký tự. Từ mảng này ta chuyển sang mảng char chứa các ký tự nguyên gốc. Ghi mảng này vào file ta đƣợc file chứa bản rõ chữ ký. 53 4.2. THỬ NGHIỆM CHƢƠNG TRÌNH KÝ MÙ RSA 4.2.1. Giới thiệu Chƣơng trình minh họa đƣợc viết bằng Visual C++ trên nền .NET 3.5 gồm 2 chức năng: - Ký mù trên một số nguyên - Xóa mù chữ ký 4.2.2. Mô tả hoạt động chƣơng trình 1/. Chức năng ký mù - Thông tin đầu vào + Số nguyên tố p, q, chọn khóa công khai b, số ngẫu nhiên r (nhƣ mô tả trong thuật toán) + Nhập vào thông điệp cần ký là một số nguyên + Sau khi nhập xong thông tin, bấm Sign để thực hiện việc ký, Cancel để hủy bỏ - Thông tin đầu ra + Giá trị thông điệp sau khi làm mù + Chữ ký mù trên thông điệp Hình 6: Giao diện chức năng ký mù 54 2/. Chức năng xóa mù chữ ký - Thông tin đầu vào + Số n, khóa công khai b, số ngẫu nhiên r, giá trị thông điệp sau khi làm mù, chữ ký mù. + Sau khi nhập các thông tin ở trên, bấm Unblind để xóa mù và xác thực chữ ký, Cancel để hủy bỏ. - Thông tin đầu ra + Giá trị chữ ký sau khi xóa mù. + Xác thực tính đúng sai của chữ ký ( nếu chữ ký là đúng, chƣơng trình trả vể “OK”, ngƣợc lại là “Not OK”). Hình 7: Giao diện chức năng xóa mù chữ ký 55 4.3. THỬ NGHIỆM CHỮ KÝ KHÔNG THỂ CHỐI BỎ 4.3.1. Giới thiệu Chƣơng trinh gồm 2 tab, 1 cho ngƣời ký (signer) và 1 cho ngƣời xác thực chữ ký - Tab Signer Hình 8: Giao diện của người ký chữ ký không thể chối bỏ - Tab verifier Hình 9: Giao diện của người xác thực chữ ký không thể chối bỏ 56 4.3.2. Mô tả hoạt động chƣơng trình 1/. Chuẩn bị các tham số - Khi chƣơng trình đƣợc bật lên, số nguyên tố ngẫu nhiên p, q đã đƣợc chọn sẵn cho ngƣời dùng. Giá trị g cũng đã đƣợc tính sẵn dựa theo p. Tuy nhiên ngƣời dùng có thể nhập trực tiếp giá trị p và g từ bàn phím bằng cách sửa trực tiếp ở các textbox này. - Ngƣời ký nhập giá trị khóa bí mật a ( 0 < a < q ) vào textbox sau đó nhấn enter. Chƣơng trình tự động tính giá trị h = ga mod p. Khi đó: + Tab Signer có các thông tin: p, q, g, a, h + Tab Verifier có các thông tin: p, q, g, h 2/. Ký - Ngƣời cần ký nhập vào thông điệp cần ký ( bên tab Verifier ) là một số sau đó nhấn Enter, khi đó thông điệp đƣợc chuyển sang cho Signer, Signer ký y = x a mod p sau đó bấm vào nút “Send” để gửi giá trị chữ ký cho Verifier. 3/. Giao thức kiểm thử chữ ký - Verifier nhập vào 2 số ngẫu nhiên 𝑒1, 𝑒2 ∈ 𝑍𝑞 ∗. Khi đó chƣơng trình sẽ tính giá trị c và hiển thị giá trị này vào textbox c. Sau đó giá trị này đƣợc gửi cho Signer. - Sau khi nhận đƣợc c, chƣơng trình tính d = 𝑐𝑎 −1𝑚𝑜𝑑 𝑞𝑚𝑜𝑑 𝑝 và hiển thị giá trị này vào textbox d trong tab Signer. Signer bấm vào nút “Send” để gửi giá trị này cho Verifier. - Sau khi nhận đƣợc d, Verifier bấm vào nút “Result” để hiện kết quả kiểm tra chữ ký. Nếu chữ ký là đúng, chƣơng trình sẽ có thông báo: 57 Hình 10: Thông báo khi chữ ký không thể chối bỏ được xác thực là đúng 4/. Giao thức chối bỏ chữ ký - Trƣờng hợp thứ nhất: Ngƣời ký (Signer) chối bỏ một chữ ký không phải do anh ta ký + Verifier nhập 1 số nguyên vào textbox Message. + Verifier nhập chữ ký vào textbox Signature. Sau khi nhập xong, nhấn Enter để chƣơng trình thực hiện việc chuyển thông điệp và chữ ký cho Signer. + Sau đó, ngƣời xác thực chữ ký (Verifier) nhập giá trị 𝑒1, 𝑒2 tƣơng ứng. Nhấn Enter để chƣơng trình tự động tính c. Giá trị c này đƣợc tự động gửi cho Signer. + Sau khi nhận đƣợc c, chƣơng trình tính d = 𝑐𝑎 −1𝑚𝑜𝑑 𝑞𝑚𝑜𝑑 𝑝 và hiển thị giá trị này vào textbox d trong tab Signer. Signer bấm vào nút “Send” để gửi giá trị này cho Verifier. + Sau khi nhận đƣợc d, Verifier bấm vào nút “Result” để hiện kết quả kiểm tra chữ ký. Nếu điều kiện kiểm tra không đƣợc thỏa mãn, chƣơng trình sẽ hiện lên nhƣ sau: 58 Hình 11: Thông báo khi điều kiện 𝒅 ≡ 𝒙𝒆𝟏𝒈𝒆𝟐𝒎𝒐𝒅 𝒑 không được thỏa mãn + Sau khi bấm OK, các textbox 𝑓1, 𝑓2 xuất hiện để ngƣời dùng nhập thông tin vào. Sau khi nhập vào 𝑓1, 𝑓2 Verifier nhấn Enter để chƣơng trình tự động tính C. Giá trị C này đƣợc tự động gửi cho Signer. + Signer sau khi nhận đƣợc C sẽ tính D. Signer bấm “Send” để gửi cho Verifier. + Sau khi Verifier nhận đƣợc D, Verifier click vào nút “Result” để xem kết quả. Nếu chữ ký đúng là giả mạo, thông báo của chƣơng trình nhƣ sau: Hình 12: Thông báo khi chữ ký đúng là giả mạo 59 - Trƣờng hợp Signer cố tình chối bỏ chữ ký của mình + Verifier nhập 1 số nguyên vào textbox Message. + Verifier nhập chữ ký của Signer trên Message vào textbox Signature. Sau khi nhập xong, nhấn Enter để chƣơng trình thực hiện việc chuyển thông điệp và chữ ký cho Signer. + Sau đó, verifier nhập giá trị 𝑒1, 𝑒2 tƣơng ứng. Nhấn Enter để chƣơng trình tự động tính c. Giá trị c này đƣợc tự động gửi cho Signer. + Sau khi nhận đƣợc c, chƣơng trình tính d = 𝑐𝑎 −1𝑚𝑜𝑑 𝑞𝑚𝑜𝑑 𝑝 và hiển thị giá trị này vào textbox d trong tab Signer. Signer có thể chỉnh sửa giá trị d này tùy ý sau đó bấm vào nút “Send” để gửi giá trị này cho Verifier. + Sau khi nhận đƣợc d, Verifier bấm vào nút “Result” để kiểm tra chữ ký. Nếu điều kiện kiểm tra không thỏa mãn, thông báo nhƣ Hình 11 hiện ra. + Sau khi bấm OK, các textbox 𝑓1, 𝑓2 xuất hiện để ngƣời dùng nhập thông tin vào. Sau khi nhập vào 𝑓1, 𝑓2, verifier nhấn Enter để chƣơng trình tự động tính C. Giá trị C này đƣợc tự động gửi cho Signer. + Phía Signer sau khi nhận đƣợc C sẽ tính D. Signer có thể chỉnh sửa giá trị D này tùy ý sau đó bấm vào nút “Send” để gửi giá trị này cho Verifier. + Sau khi Verifier nhận đƣợc D, Verifier click vào nút “Result” để xem kết quả sẽ thu đƣợc thông báo nhƣ sau: Hình 13: Thông báo khi phát hiện người ký cố tình chối bỏ chữ ký của mình 60 KẾT LUẬN a. Kết quả thu đƣợc Sau thời gian thực hiện khóa luận, em đã tìm hiểu đƣợc kiến thức tổng quan về lý thuyết bảo mật thông tin, mã hóa, ký số. Đồng thời đã nghiên cứu sử dụng thƣ viện mã nguồn mở OpenSSL để xây dựng các ứng dụng thử nghiệm. Khóa luận gồm các kết quả nghiên cứu sau: 1/. Tìm hiểu và nghiên cứu các tài liệu để hệ thống lại các vấn đề sau: + Chữ ký mù RSA + Chữ ký không thể chối bỏ 2/. Thử nghiệm các chƣơng trình ứng dụng sau: + Chữ ký số RSA + Chữ ký mù RSA + Chữ ký không thể chối bỏ b. Tƣơng lai phát triển Cùng với sự phát triển nhanh chóng của công nghệ thông tin, nền quản lý hành chính điện tử, thƣơng mại điện tử hay chính phủ điện tử sẽ là những vấn đề cấp thiết cần nghiên cứu và phát triển. Bởi vậy, việc xây dựng một cơ sở hạ tầng thông tin an toàn là rất cần thiết và cấp bách. Chữ ký số là một phƣơng pháp hiệu quả trong bảo vệ thông tin. Vì vậy, nó đã, đang và sẽ thu hút nhiều sự chú ý, nghiên cứu và ứng dụng trên thế giới. Ở Việt Nam, chuyên ngành an toàn thông tin cũng chỉ đang trong giai đoạn phát triển, nên những kiến thức nền tàng này đóng vai trò rất quan trọng. Trong tƣơng lai, em muốn tiếp tục nghiên cứu để cải tiến nhƣợc điểm của các sơ đồ chữ ký trên, cũng nhƣ tìm hiểu thêm nhiều loại chữ ký số khác để có thể áp dụng rộng rãi vào nhiều lĩnh vực khác nhau nhƣ: quản lý hành chính, thƣơng mại điện tử, …. TÀI LIỆU THAM KHẢO [1] Phan Đình Diệu. Lý thuyết mật mã và an toàn thông tin – NXB Đại học Quốc gia Hà Nội - 2006 [2] Trịnh Nhật Tiến. Giáo trình An toàn dữ liệu [3] Trịnh Nhật Tiến, Đinh Vinh Quang. Thanh toán bằng “Tiền điện tử” [4] Trịnh Nhật Tiến, Trƣơng Thị Thu Hiền. Về một quy trình bỏ phiếu từ xa – Tạp chí Khoa học ĐHQGHN, KHTN & CN, T.XXI, SỐ 2PT. 2005 [5] Trịnh Nhật Tiến. Chữ ký: mù, nhóm, mù nhóm và ứng dụng. Kỷ yếu HN KH FAIR lần 2 tại TP Hồ Chí Minh 9/2005 [6] Danny De Cock, Christopher Wolf, Bart Preneel. The Belgian Electronic Identity Card. [7] Doublas Stinson. Cryptography: Theory and Practice – CRC Press 03/17/95 [8] Markus Jakobsson. Blackmailing using undeniable signatures. Springer- Verlag [9] Matt Messsier, John Viega. Secure Programming Cookbook for C and C++ - O’Reilly July 2003 [10] Morten Bohoj, Mads Keblov Kjeldsen. Cryptography report Undeniable signature schems – December 15, 2006 [11] N. Kuntze C. Hett and A. U. Schmidt. Non-repudiation of voice-over-ip conversations with chained digital signatures. From Fraunhofer SIT [12] [13] [14] [15]

Các file đính kèm theo tài liệu này:

  • pdfLUẬN VĂN- NGHIÊN CỨU MỘT SỐ CHỮ KÝ SỐ ĐẶC BIỆT VÀ ỨNG DỤNG.pdf