Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
1,13 MB
Nội dung
Chơng trình KC-01: Nghiên cứu khoa học phát triển công nghệ thông tin truyền thông Đề tài KC-01-01: Nghiên cứu số vấn đề bảo mật an toàn thông tin cho mạng dùng giao thức liên mạng máy tính IP Báo cáo kết nghiên cứu Phần mềm sinh kiểm tra chữ ký số Quyển 7A: Một hệ chữ ký số có sử dụng RSA Hà NộI-2004 Báo cáo kết nghiên cứu Phần mềm sinh kiểm tra chữ ký số Quyển 7A: Một hệ chữ ký số có sử dụng RSA Chủ trì nhóm thực hiện: TS Trần Duy Lai Mục lục Chơng I Chữ ký số dựa mật mà đại 1-Giới thiƯu 2- Ch÷ ký sè tõ hƯ m· cã thĨ đảo ngợc - Các định nghĩa phân loại 4- Lợc đồ chữ ký số phụ lục 5- Lợc đồ chữ ký khôi phục thông báo 6- Các kiểu công lợc đồ ký 7- Hàm băm Chơng II Lợc đồ chữ ký số RSA 1- Lợc đồ chữ ký RSA 2- Các công ch÷ ký RSA 3- Ch÷ ký RSA thùc tÕ 4- Định dạng chuẩn ISO/IEC 9796 5- Định dạng chuẩn PKCS #1 1 12 13 15 15 16 17 20 24 Ch−¬ng III Module thùc ký kiểm tra chữ ký số sử dụng chøng chØ sè 27 1-Mét sè chuÈn mËt m· kho¸ công khai 1.1-Giới thiệu PKCS#1: Chuẩn mà hoá RSA 1.1.1- Sinh khoá 1.1.2- Cú pháp khoá 1.1.3- Tiến trình mà hoá 1.1.4- Tiến trình giải mà 1.1.5- Các thuật toán chữ ký số 1.2-Giới thiệu định dạng PKCS#7 1.2.1- Data content type 1.2.2- Signed-data content type 1.2.3- Enveloped-data content type 1.2.4- Signed-and-enveloped-data content type 1.2.5- Digested-data content type 1.2.6- Encrypted-data content type 1.3- PKCS#8: Private-Key information Syntax Standard 1.3.1- Private-key information syntax 1.3.2- Encrypted private-key information syntax 2-Module thùc hiƯn viƯc ký/kiĨm tra ch÷ ký 2.1-Module thùc hiƯn ký mét tƯp d÷ liƯu sư dơng chøng chØ sè 2.1.1-Các th viện cung cấp hàm thực việc ký 2.1.2-Chơng trình ví dụ thực việc ký tƯp d÷ liƯu 27 27 27 27 28 28 28 29 30 30 32 33 34 35 35 35 36 36 36 36 38 i 2.2-Module thùc hiƯn viƯc kiĨm tra chữ ký số 2.2.1-Các th viện cung cấp hàm thực việc kiểm tra chữ ký 2.2.2-Module chơng trình ví dụ việc kiểm tra chữ ký 40 40 40 ii Chơng I Chữ ký số dựa mật mà đại 1-Giới thiệu Một yếu tố gốc mật mà (cryptographic primitive) tảng xác thực, chứng thực, chống chối bỏ chữ ký số Mục đích chữ ký số để cung cấp phơng tiện cho thực thể để gắn kết định danh với thông tin Quá trình ký gây biến đổi thông điệp số thông tin bí mật đợc giữ thực thể thành đợc gọi chữ ký Mô tả chung nh sau Thuật ngữ ký hiệu ã M tập thông điệp mà đợc ký ã S tập phần tử gọi chữ ký, chuỗi nhị phân với độ dài xác định ã SA phép ánh xạ từ tập thông điệp M tới tập chữ ký S, đợc gọi phép ánh xạ ký (signing transformation) cho thực thể A (Alice) Phép ánh xạ SA đợc giữ bí mật A, đợc sử dụng để tạo chữ ký số cho thông điệp từ tập M ã VA phép ánh xạ từ tập M x S tới tập {true, false} VA đợc gọi phép ánh xạ kiểm tra (verification transformation) chữ ký A, đà đợc công bố công khai, đợc sử dụng thực thể khác để kiểm tra chữ ký đà tạo A Định nghĩa Các phép ánh xạ SA VA cung cấp lợc đồ ch÷ ký sè (digital signature scheme) cho thùc thĨ A Đôi thuật ngữ kỹ thuật chữ ký số (digital signature mechanism) đợc sử dụng Ví dụ (digital signature scheme) M = {m1, m2, m3} vµ S = {s1, s2, s3} Hình bên trái dới biểu diễn hàm ký SA từ tập M hình bên phải biểu diễn hàm kiểm tra VA tơng ứng m1 m2 m3 Ο Ο Ο Ο Ο Ο SA s3 s2 s1 (m1, s1) o (m1, s2) o (m1, s3) o (m2, s1) o (m2, s2) o (m2, s3) o (m3, s1) o (m3, s2) o (m3, s3) o o True o False VA Hµm ký vµ kiĨm tra cđa lợc đồ chữ ký số Thủ tục ký Thực thể A (signer) tạo chữ ký cho thông ®iƯp m ∈ M b»ng c¸ch thùc hiƯn nh− sau: TÝnh s = SA(m) Chun giao cỈp (m, s) s đợc gọi chữ ký thông điệp m Thđ tơc kiĨm tra §Ĩ kiĨm tra r»ng mét chữ ký s thông điệp m đà đợc t¹o bëi A, mét thùc thĨ B (verifier) thùc hiƯn bớc sau: Lấy hàm kiểm tra ký VA cña A TÝnh u = VA(m, s) ChÊp chữ ký đà đợc tạo A u = true, bác bỏ chữ ký u = false Nhận xét (concise representation) Các phép ánh xạ SA VA thờng đợc đặc trng cách gọn khoá; tức là, có lớp thuật toán ký kiểm tra ký đợc công bố công khai, thuật toán đợc định danh khoá Do vậy, thuật toán ký SA A đợc xác định khoá kA yêu cầu A phải giữ bí mật khoá kA Tơng tự, thuật kiểm tra ký VA A đợc xác định khoá lA đợc đa công khai Nhận xét (handwritten signatures, chữ ký viết tay) Các chữ ký viết tay đợc coi nh lớp đặc biệt chữ ký số Trờng hợp này, tập chữ ký S bao gồm phần tử chữ ký viÕt tay cđa A, gäi lµ sA Hµm kiĨm tra chữ ký đơn giản kiểm tra xem chữ ký thông điệp đợc ký cách có chủ ý A sA Một đặc trng không mong muốn, chữ ký viết tay không phụ thuộc vào thông điệp (message-dependent) Do đó, cần có bắt buộc thêm đợc áp đặt lên kỹ thuật chữ ký số nh thảo luận dới Các tính chất yêu cầu hàm ký kiểm tra ký Có vài tính chất mà ánh xạ ký kiểm tra ký phải thoả mÃn (a) s chữ A thông điệp m vµ chØ nÕu VA(m, s) = true (b) Nã lµ tính toán đợc thực thể khác A để tìm s S mà VA(m, s) = true, với m M Hình thể tính chất (a) Có đờng mũi tên biểu ®å cho VA tõ (mj, sj) ®Õn true t−¬ng øng với đờng mũi tên từ mj tới sj biểu đồ SA Tính chất (b) đảm bảo tính an toàn cho phơng pháp - chữ ký ràng buộc A với thông điệp đà đợc ký Cha có phơng pháp thức chứng minh đợc lợc đồ chữ ký số thoả mÃn tồn tính chất (b) (mặc dù tồn đợc tin đúng); nhiên, có vài ứng cử viên tốt Mục sau giới thiệu lớp đặc biệt gồm chữ ký số nảy sinh từ kỹ thuật mà hoá khoá công khai Sự mô tả chữ ký số mục tổng quát, đợc mở rộng chi tiết n÷a, nh− giíi thiƯu ë phÝa sau 2- Ch÷ ký số từ hệ mà đảo ngợc Trong mục quan tâm đến lớp lợc đồ chữ ký số mà đợc dựa hệ thống mà hoá khoá công khai có dạng đặc biệt Giả sử Ee ánh xạ mà hoá khoá công khai với không gian thông điệp M không gian mà C Hơn nữa, giả sử M = C Nếu Dd ánh xạ giải mà tơng ứng với Ee Ee Dd phép hoán vị: Dd(Ee(m)) = Ee(Dd(m)) = m, với m M Một lợc đồ mà hoá khoá công khai theo kiểu đợc gọi reversible (có lớp rộng chữ ký số mà đợc coi phát triển từ thuật toán mật mà không thuận nghịch, nh mục 3.2.4 3.2.5) Chú ý điều kiện M=C cần thiết đẳng thức với m M; mặt khác, Dd(m) nghĩa với m C Cấu trúc cho lợc đồ chữ ký số Giả sử M không gian rõ lợc đồ chữ ký Giả sử C = M, không gian chữ ký S Giả sử (e, d) cặp khoá lợc đồ mà hoá khoá công khai Định nghĩa hàm ký SA Dd Điều có nghĩa chữ ký rõ m M s = Dd(m) Định nghĩa hàm kiểm tra ký VA true, V A (m, s ) = false, E e ( s ) = m, lại Lợc đồ chữ ký đợc đơn giản A ký rõ có cấu trúc đặc biệt, cấu trúc đợc biết công khai Cho M’ lµ mét tËp cđa M víi phần tử M có cấu trúc đặc biệt đà định nghĩa, đó, M chứa phần không đáng kể rõ Ví du, giả sử M bao gồm tất chuỗi nhị phân với độ dài 2t, với t số nguyên dơng Cho M’ lµ tËp cđa M bao gåm tÊt chuỗi mà t bits đợc lặp lại t bits lại (ví dụ, 101101 thuộc tập M với t=3) Nếu A ký rõ nằm tập M, điều đợc dễ dàng nhận biết ngời kiểm tra ký Định nghĩa lại hàm kiểm tra ký VA true, V A (m, s ) = false, nÕu E e ( s ) ∈ M ' , lại Với giả thiết này, A cần chuyển giao chữ ký s rõ m = Ee(s) đợc khôi phục lại cách áp dụng hàm kiểm tra ký Một lợc đồ nh đợc gọi digital signature scheme with message recovery Hình sau minh hoạ cách sử dụng hàm chữ ký Đặc điểm lựa chọn rõ với cấu trúc đặc biệt đợc tham khảo nh việc chọn rõ có phần d (redundancy) Ee(s) m’ e s nguån kho¸ d ChÊp nhËn nÕu m’ ∈ M’ Dd(m) = s Verifier B nguån b¶n râ M m Signer A Lợc đồ chữ ký số khôi phục rõ Sự sửa đổi đợc trình bày (đa độ d vào) nhiều phép thu gọn không gian đợc ký; hoàn toàn cốt yếu hy vọng thoả mÃn yêu cầu tính chất (b) hàm ký kiểm tra ký đà nêu HÃy xem lại nh vậy, chó ý r»ng mét thùc thĨ B cã thĨ chän ngẫu nhiên phần tử s S nh chữ ký áp dụng Ee để lấy u = Ee(s), S = M Ee công khai B cã thĨ lÊy b¶n râ m = u chữ ký m s, sau chuyển giao (m, s) DƠ dµng kiĨm tra r»ng s sÏ đợc chấp nhận nh chữ ký đà đợc tạo A cho m, nhng A không đóng vai trò Trong trờng hợp nói B đà giả mạo chữ ký A Đây ví dụ đợc gọi existential forgery (B đà tạo chữ ký A rõ mà rõ không theo lựa chọn B) Nếu M chứa phần nhỏ tin từ M, xác suất để giả mạo đợc chữ ký A theo cách nhỏ Nhận xét (chữ ký số so với tin cậy) Mặc dù lợc đồ chữ ký số dựa mà hoá khoá công khai thuận nghịch hấp dẫn, chúng yêu cầu phơng pháp mà hoá nh gốc mật mà Có tình mà kỹ thuật chữ ký số đợc yêu cầu nhng mà hoá bị ngăn cấm Trong trờng hợp nh lợc đồ chữ ký số không thích hợp Chữ ký số thực tế Với chữ ký số thực tác dụng thực tế, phơng án cụ thể khái niệm trớc chắn phải có thêm tính chất khác Một chữ ký số phải dễ dàng tính toán ngời ký (hàm ký dễ dàng áp dụng); dễ dàng kiểm tra ngời khác (hàm kiểm tra ký dễ dàng áp dụng); có khoảng thời gian phù hợp, ví dụ, an toàn phơng diện tính toán tránh đợc giả mạo chữ ký không cần thiết cho mục đích Giải tranh chấp Mục đích chữ ký số (hoặc phơng pháp ký bất kỳ) phép giải trạnh chấp Ví dụ, thực thể A phủ nhận đà ký lên rõ thực thể B khẳng định sai chữ ký rõ đợc tạo A Để khắc phục vấn đề nh Tổ chức tin cËy thø ba (Trusted Third Party, TTP) hc quan (judge) đợc yêu cầu TTT cần phải thực thể mà tất bên tham gia đồng ý c«ng nhËn tõ tr−íc NÕu A phđ nhËn r»ng rõ m lu giữ B đà đợc ký A, B đa chữ ký sA m tới TTP với m Các định TTP ủng hộ B VA(m, sA)=true ủng hộ A ngợc lại B chấp nhận định B tin cậy TTP có phép ánh xạ kiểm tra ký VA nh− A ®· cã A sÏ chÊp nhËn quyÕt ®Þnh ®ã nÕu A tin cËy r»ng TTP ®· sư dụng VA tin SA không bị phá Do vậy, việc giải hợp lý tranh chấp yêu cầu tiêu chuẩn sau phải đợc thoả mÃn Những yêu cầu để giải chữ ký bị tranh chấp SA VA có tính chất (a) (b) đà nói TTP có VA Phép ánh xạ ký SA phải đợc giữ bí mật an toàn Các tính chất cần thiết nhng thực tế không đảm bảo đợc chúng Ví dụ, giả thiết cho SA VA có đặc điểm nh yêu cầu tính chất không cho lợc đồ chữ ký đặc biệt Một khả khác A khẳng định sai SA đà bị phá Để vợt qua vấn đề yêu cầu phơng pháp thoả thuận để phê chuÈn chu kú thêi gian mµ A sÏ chÊp nhËn trách nhiệm ánh xạ kiểm tra Một hoàn cảnh tơng tự xảy việc huỷ bỏ thẻ tín dụng Ngời sử dụng card chịu trách nhiệm đến tận thông báo với công ty phát hành card card đà bị đà bị đánh cắp - Các định nghĩa phân loại Các định nghĩa Chữ ký số (digital signature) chuỗi liệu làm nhiệm vụ liên kết 5 thông điệp (ở dạng số) với thực thể tạo Thuật toán sinh chữ ký số (digital signature generation algorithm signature generation algorithm) phơng pháp tạo chữ ký số Thuật toán kiểm tra chữ ký số (digital signature verification algorithm verification algorithm) phơng pháp để kiểm tra chữ ký số đáng tin (tức thực đà đợc tạo thực thể đà đợc ra) Lợc đồ chữ ký số (digital signature scheme mechanism) bao gồm thuật toán sinh chữ ký thuật toán kiểm tra chữ ký kèm Quy trình sinh chữ ký số (digital signature signing process procedure) bao gồm thuật toán sinh chữ ký số (toán học), với phơng pháp định khuôn dạng liệu cho thông điệp để ký đợc Tiến trình kiểm tra chữ ký số (digital signature verification process procedure) bao gồm thuật toán kiểm tra ký, với phơng pháp khôi phục liệu từ thông điệp Trong chơng này, hầu hết mục (nh chữ ký ElGamal, chữ ký Rabin) liên quan đơn đến lợc đồ chữ ký số Nhng để sử dụng đợc lợc đồ chữ ký số thực tế cần nhiều (chỉ có lợc đồ chữ ký cha đủ), có nghĩa cần đến quy trình sinh chữ ký số (thêm vào cách padding chẳng hạn) Có nhiều quy trình liên quan đến nhiều lợc đồ khác đà lên nh chuẩn thơng mại thực sự; quy trình nh vậy, ISO 9796 PKCS #1, đợc trình bày riêng cho hƯ ch÷ ký sè RSA Ký hiƯu sư dơng cho phần lại chơng đợc cung cấp bảng sau Các tập hàm đà liệt kê bảng đợc công bố công khai Ký hiÖu M MS S R MR R-1 R h Mh ý nghĩa tập phần tử đợc gọi không gian rõ tập phần tử đợc gọi không gian ký tập phần tử đợc gọi không gian chữ ký ánh xạ 1-1 từ M tới MS gọi hàm phần d ảnh R (tức là, MR=Im(R)) nghịch ảnh R (tức là, R-1: MR->M) tập phần tử gọi tập số chữ ký (indexing set for signing) hàm chiều miền M ảnh h (tức là, h: M->Mh); MhMS đợc gọi không gian giá trị băm Ký hiệu cho kỹ thuật chữ ký số Chú ý (giải thích bảng trên) (i) (không gian rõ) M tập phần tử mà từ ngời ký thêm vào chữ ký số ã Với PKCS#1 v2.0 phần RSA encryption/decryption đợc hỗ trợ thêm kiÓu RSAES-OAEP (RSA Encryption Scheme - Optimal Asymmetric Encryption Scheme) Lợc đồ mà hoá đợc xem nh an toàn chứng minh đợc ã Với PKCS#1 v2.1 phần RSA signature/verification đợc hỗ trợ thêm kiểu RSASSA-PSS (RSA Signature Scheme with Appendix - Probabilistic Signature Scheme) Lợc đồ chữ ký đợc xem an toàn chứng minh đợc, độ khó giả mạo chữ ký tơng đơng với việc tính hàm ngợc thuật toán RSA Lợc đồ đa thêm hàm sinh hash mask đợc xem nh black boxes random oracles Nhng lý thuyết kẻ công thay hàm hash khác hàm hash mà signer đà chọn, nên gợi ý hàm sinh mask EMSA-PSS (hàm encoding thuật toán RSASSA-PSS) giống hàm hash Nh vậy, theo kiểu tất encoded message phụ thuộc vào hàm hash khó khăn cho đối phơng thực việc thay hàm hash khác Để kết thúc phần giới thiệu PKCS#1 đa số thông tin RSA encryption/decryption RSA signature/verification để bạn tiện tham khảo ã Version 1.5: RSA encryption/decryption theo kiÓu RSAES-PKCS1-V1_5, RSA signature/verification theo kiểu RSASSA-PCKS1-V1_5 ã Version 2.0: RSA encryption/decryption đợc hỗ trợ thªm kiĨu RSAESOAEP (RSA Encryption Scheme - Optimal Asymmetric Encryption Scheme) Version 2.1: RSA signature/verification đợc hỗ trợ thêm kiểu RSASSA-PSS (RSA Signature Scheme with Appendix - Probabilistic Signature Scheme) 1.2-Giới thiệu định dạng PKCS#7 Chuẩn PKCS#7 mô tả định dạng tổng quát cho liệu mà có phần mật mà áp dụng vào đó, cụ thể là: chữ ký số bọc số (digital envelope, trớc tiên nội dung đợc mà hoá khoá content-encryption key với thuật toán contentencryption algorithm, content-encryption key đợc mà hoá RSA public key ngời nhận, sau kết hợp nội dung đà mà hoá khoá đà mà hoá theo chuẩn PKCS#7) Định dạng cho phép đệ quy, ví dụ, ký lên liệu số đà bị bọc trớc Chuẩn cho phép có thuộc tính tuỳ ý nh thời gian ký, đợc xác thực cïng víi néi dung cđa mét message Trong tr−êng hỵp đơn giản định dạng việc phát hành certificates CRLs Chuẩn hỗ trợ nhiều kiến trúc quản lý khoá dựa certificate (ví dụ, dạng PEM RFC 1422) Sự định kiến trúc nh là: ngời phát hành certificate đợc xem nh top-level, thực thể certificate đợc uỷ quyền chứng thực, distinguished name đợc chấp nhận, ngời phát hành certificate dựa vào policy 29 Trong chuẩn đa cú pháp tổng quát cho kiÓu néi dung sau: data, signed data, enveloped data, signed-and-enveloped data, digested data, vµ encrypted data Tr−íc mô tả kiểu nội dung đa cú pháp tổng quát (nó thay đổi phụ thuộc vào kiểu nội dung liệu) chuẩn PKCS#7 nh− sau: ContentInfo ::= SEQUENCE { contentType ContenType, content [0] EXPLICIT ANY DEFINED BY contenType OPTIONAL } ContentType ::= OBJECT IDENTIFIER Giải thích: contentType xác định kiểu nội dung liệu (6 kiểu) Nó định danh object, tức chuỗi số nguyên ®Ĩ biĨu diƠn kiĨu néi dung d÷ liƯu content néi dung liệu Dới mô tả chi tiết kiểu nội dung liệu 1.2.1- Data content type Data content type lµ mét octet string, định nghĩa theo ASN.1 kiểu Data đơn giản nh sau: Data ::= OCTET STRING 1.2.2- Signed-data content type Signed-data conten type bao gồm nội dung kiểu tơng ứng message digest đà đợc mà hoá không cho hc cho nhiỊu ng−êi ký Chóng ta hiĨu message digest đợc mà hoá cho signer chữ ký nội dung signer Kiểu nội dung đợc ký nhiều ngời lên (parallel) Hơn nữa, trờng hợp đơn giản tức signer ký nội dung đó, nghĩa phát hành certificates CRLs Điều nói lên với ứng dụng riêng biệt sử dơng signed-data content type víi mét ch÷ ký sè cđa signer lên nội dung kiểu nội dung liệu Với ứng dụng riêng biệt khác sử dụng trờng hợp suy biến để phát hành certificates CRLs Quá trình ký liệu đợc xây dựng theo bớc sau: ã Tạo message digest Với signer message digest đợc thực nội dung với thuật toán băm xác định Nếu signer cần xác thực số thông tin khác thông tin đợc băm thuật toán ã Message digest đợc mà private key signer 30 ã Encrypted message digest đợc đặt vào giá trị SignerInfo Certificates CRLs cho signer, không thuộc signer đợc đa vào SignerInfo ã Đa tất thuật toán message-digest algorithm signer giá trị SignerInfo tơng ứng vào SigneData Ngời nhận kiểm tra chữ ký cách giải mà encrypted message digest cđa tõng signer víi public key cđa signer t−¬ng øng, sau so sánh với message digest tìm đợc với message digest đà tính độc lập Kiểu nội dung liệu đợc ký đợc định nghĩa ASN.1 SignedData nh− sau: SignedData ::= SEQUENCE { version Version, digestAlgorithms DigestAlgorithmIdentifiers, contentInfo ContenInfo, certificates [0] IMPLICIT ExtendedCertifictesAndCertificates OPTIONAL, crls [1] IMPLICIT CertificateRevocationLists OPTIONAL, signerInfos SignerInfos } DigestAlgorithmIdentifiers ::= SER OF DigestAlgorithmIdentifier SignerInfos ::= SET OF SignerInfo Kiểu thông tin signer đợc định nghĩa ASN.1 SignerInfo nh sau: SignerInfo ::= SEQUENCE { version Version, issuerAndSerialNumber IssuerAndSerialNumber, digestAlgorithm DigestAlgorithmIdentifier, authenticateAttributes [0] IMPLICIT Attributes OPTIONAL, digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier, encryptedDigest EncryptedDigest, unauthenticateAttributes [1] IMPLICIT Attributes OPTIONAL } EncryptedDigest ::= OCTET STRING Quá trình tạo message digest mà hoá message digest đợc chi tiết mơc 9.3 vµ 9.4 tµi liƯu PKCS#7 D−íi đa số ý trình ã Sự khác trình ký chuẩn PKCS#7 PKCS#1 chữ ký chuẩn PKCS#1 đợc biểu diễn dạng bit string (cã thĨ sư dơng X.509 macro SIGNED) 31 • Định danh thuật toán băm DigestInfo thay thoả thuận thuật toán băm giảm đợc mối nguy hiểm Ví dụ, kẻ công tìm đợc message với message digest nhận đợc Hắn giả mạo chữ ký cách lấy message với thuật toán băm mà đà đợc ký trớc đó, biểu diễn chữ ký trớc lên message 1.2.3- Enveloped-data content type Envelope-data content type bao gåm néi dung đà đợc mà (một số kiểu) khoá mà nội dung đợc mà (encrypted content-encryption keys) cho nhiều ngời nhận Sự kết hợp nội dung đà đợc mà khoá mà nội dung đà đợc mà cho ngời nhận đợc gọi digital envelope cho ngời Envelope-data content type đợc áp dụng để biểu diễn digital envelope nhiều ngời nội dung liệu, digested-data, signed-data content type Quá trình liệu đợc bọc theo bớc sau: ã Sinh ngẫu nhiên khoá content-encryption key (với thuật toán contentencryption algorithm) ã Với ngời nhận, conten-encryption key đợc mà hoá public key tơng ứng (kết encrypted conten-encryption key) • Víi tõng ng−êi nhËn, encrypted conten-encryption key số thông tin khác đợc đa vào giá trị RecipientInfo ã Nội dung đợc mà hoá sử dụng conten-encryption key, thu đợc encrypted content ã Tập hợp giá trị RecipientInfo với encrypted content vào giá trị EnvelopedData Ngời nhận mở vỏ bọc số cách giải mà mét c¸c encrypted contentencryption keys víi private key cđa mình, kết nhận đợc conten-encryption key giải mà encrypted content với conten-encryption key đà tìm đợc Private key ngời nhận đợc tham chiếu tên phát hành số serial định danh certificate cho public key tơng ứng Envelope-data content type định nghĩa ASN.1 cã kiÓu EnvelopedData nh− sau: EnvelopedData ::= SEQUENCE { version Version, recipientInfos RecipientInfos, encryptedContentInfo EncryptedContentInfo } RecipientInfos ::= SET OF RecipientInfo EncryptedContentInfo ::= SEQUENCE { contentType ContentType, contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, encryptedContent [0] IMPLICIT Encrypted Content OPTIONAL 32 } EncryptedContent ::= OCTET STRING RecipientInfo type đợc định nghĩa ASN.1 lµ kiĨu RecipientInfo nh− sau: RecipientInfo ::= SEQUENCE { version Version, issuerAndSerialNumber IssuerAndSerialNumber, keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, encryptedKey EncryptedKey } EncryptedKey ::= OCTET STRING Quá trình mà hoá khoá mà hoá nội dung đà đợc chi tiết mục 10.3 chuẩn PKCS#7 Chúng đa ý sau: Một số thuật toán contentencryption algorithm làm việc với độ dài đầu vào bội k octets, với k > 1, ứng dụng đa phơng pháp đơn giản điều khiển độ dài đầu vào mà độ dài không bội k Với phơng thực pad thêm vào đầu vào kéo dài phần cuối với k - (l mod k) octets với tất giá trị k - (l mod k), với l độ dài đầu vào Nh vậy, phơng pháp tốt k < 256 (< 2048 bits), với k lớn toán mở (PKCS#7 v1.5) Trên windows sử dụng tools để update giúp cho việc import certificate với khoá có độ dài lớn 2048, phải đà giải đợc vấn đề 1.2.4- Signed-and-enveloped-data content type Signed-and-enveloped-data content type bao gåm encrypted content, encrypted content-encryption key cho nhiều ngời cặp encrypted message digests (một đợc mà private key signer mà contentencryption key) cho nhiều signers Nh vậy, định dạng kết hợp phần: Signed-data content type enveloped-data content type Quá trình xây dựng liệu signed-and-enveloped-data content type theo bớc sau: ã Khoá content-encryption key (cho thuật toán content-encryption algorithm) đợc sinh ngẫu nhiên ã Với ngời nhận, content-encryption key đợc mà hoá với public key tơng ứng • Víi tõng ng−êi nhËn, encrypted content-encryption key vµ mét số thông tin ngời nhận đợc đa vào giá trị RecipientInfo ã Với signer, message digest đợc thực nội dung với thuật toán băm đà chØ bëi signer • Víi tõng signer, message digest số thông tin khác đợc mà hoá với private key signer, kết thu đợc encrypted content-encryption key ã Với signer, cặp encrypted message digest số thông tin khác đợc đa vào giá trị SignerInfo 33 ã Nội dung đợc mà với content-encryption key, nhận đợc encrypted content ã Hợp tất thuật toán băm, giá trị SignerInfo, giá trị RecipientInfo với encrypted content vào giá trị SignedAndEnvelopedData Khi ng−êi nhËn muèn më vá bäc sè vµ kiểm tra chữ ký thực lần lợt nh mục 3.4 3.3, không nhắc lại ý rằng: phơng pháp thuộc tính xác thực nên đợc ứng dụng để bọc thông tin ngời ký việc thực ký Signed-and-enveloped-data content type định nghÜa ASN.1 lµ kiĨu SignedAndEnvelopedData nh− sau: SignedAndEnvelopedData ::= { version Version, recipientInfos RecipientInfos, digestAlgoritms DigestAlgorithmIdenfifiers, encryptedContentInfo EncryptedContentInfo, certificates [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL, crls [1] IMPLICIT CertificateRevocationLists OPTIONAL, signerInfos SignerInfos } Quá trình digest-encryption đợc thực nh mục 3.2 nhng có điểm khác là: trình thùc hiƯn b−íc B−íc thø nhÊt thùc hiƯn nh− mơc 3.2 B−íc thø lÊy kÕt qu¶ cđa b−íc nhng không mà dạng DER Mục đích việc chống việc kẻ công khôi phục đợc message digest nội dung Nếu việc thực đợc kẻ xác định đợc danh sách ứng viên nội dung sau xác định đợc nội dung thực so sánh message digest họ với message digest 1.2.5- Digested-data content type Digested-data content type bao gåm néi dung message digest nội dung Công việc đợc yêu cầu để đảm bảo tính toàn vẹn nội dung liệu Quá trình thực băm liệu theo bớc sau: ã Một message digest đợc thực nội dung với thuật toán message digest algorithm ã Message digest algorithm message digest đợc đa vào giá trị DigestedData Nh đà đề cËp ë trªn, ng−êi nhËn kiĨm tra message digest b»ng cách so sánh message digest với message digest đợc tính độc lập nội dung 34 Digested-data content type đợc định nghĩa ASN.1 kiểu DigestedData nh sau: DigestedData ::= SEQUENCE { version Version, digestAlgorithm DigestAlgorithmIdentifier, contentInfo ContentInfo, digest Digest } Digest ::= OCTET STRING 1.2.6- Encrypted-data content type Encrypted-data content type gåm cã néi dung ®· đợc mà hoá encrypted content Kiểu đợc định nghĩa ASN.1 lµ kiĨu EncryptedData nh− sau: EncryptedData ::= SEQUENCE { version Version, encryptedContentInfo EncryptedContentInfo } 1.3- PKCS#8: Private-Key information Syntax Standard Chuẩn PKCS#8 mô tả cú pháp thông tin private-key Thông tin bao gồm private key cho thuật toán khoá công khai tập hợp thuộc tính Đồng thời chuẩn mô tả cú pháp private key đà đợc mà hoá Thuật toán mà hoá dựa vào password (đà đợc mô tả PKCS#5) đợc sử dụng để mà hoá thông tin private key Chuẩn đa tập hợp thuộc tính nhằm mục đích cung cấp cách đơn giản cho user thiết lập tin cậy thông tin: distinguished nam public key cđa top-level CA Trong ®ã sù tin cậy đợc thiết lập với chữ ký số, mà hoá với secret key (user đà biết) Trong chuẩn trình bày mục: private-key information syntax (PrivateKeyInfo) vµ encrypted private-key information syntax (EncryptedPrivateKeyInfo) 1.3.1- Private-key information syntax Cú pháp thông tin private key cã kiÓu PrivateKeyInfo (ASN.1) nh− sau: PrivateKeyInfo ::= SEQUENCE { version Version, privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, privateKey PrivateKey, attributes [0] IMPLICIT Attributes OPTIONAL } Version ::= INTEGER 35 PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier PrivateKey ::= OCTET STRING Attributes ::= SET OF Attribute Gi¶i thích: version số phiên cú pháp (để tơng thích với lần sửa tiếp theo), chuẩn số version privateKeyAlgorithm xác định thuật toán sinh private key (vÝ dô, rsaEncryption) privateKey mét octet string mà nội dung giá trị private key attributes tập thuộc tính, chúng thông tin mở rộng đà đợc mà hoá với th«ng tin private key 1.3.2- Encrypted private-key information syntax Có pháp thông tin private key có kiểu EncryptedPrivateKeyInfo (ASN.1) nh− sau: EncryptedPrivateKeyInfo ::= SEQUENCE { encryptionAlgorithm EncryptionAlgorithmIdentifier, encryptedData EncryptedData } EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier EncryptedData ::= OCTET STRING Gi¶i thÝch: encryptionAlgorithm xác định thuật toán mà thông tin private key đợc mà hoá (ví dụ, pbeWithMD5AndDES-CBC) encryptedData liệu private key đà đợc mà hoá Quá trình mà hoá theo bớc: ã Thông tin private key đợc mà (encode) dạng BER, sau bớc thu đợc octet string ã Octet string (thu đợc bớc 1) đợc mà hoá với secret key, sau bớc thu đợc octet string kết trình mà hoá 2-Module thực việc ký/kiểm tra chữ ký 2.1-Module thùc hiƯn ký mét tƯp d÷ liƯu sư dơng chøng số 2.1.1-Các th viện cung cấp hàm thực việc ký Để xây dựng module thực ký tệp liệu cần sử dụng hai th− viƯn libcrypto.a, sign.o vµ mét tƯp C header sign.h Trong th viện libcrypto.a cung cấp hàm tác vụ cho việc thực xây dựng hàm thùc hiƯn ký mét tƯp d÷ liƯu th− viƯn sign.o Dới số cấu trúc liệu hàm đợc cung cấp hai th viƯn trªn: 36 Th− viƯn libcrypto.a: -CÊu tróc l−u chøng chØ sè X509 *x509; -CÊu tróc l−u kho¸ bÝ mËt EVP_PKEY *pkey; -Cấu trúc lu đối tợng liệu PKCS#7 EVP_PKEY *pkey; -Cấu trúc lu thông tin liên quan đến chữ ký số (thời gian, đối tợng ký, ) EVP_PKEY *pkey; -Hàm đọc chứng số từ file dạng PEM if ((x509=PEM_read_bio_X509(incert,NULL,NULL,NULL)) == NULL) goto err; -Hàm đọc khoá bí mật số từ file dạng PEM if ((pkey=PEM_read_bio_PrivateKey(inkey,NULL,NULL,NULL)) == NULL) goto err; -Hàm khởi tạo đối tợng PKCS7 p7=PKCS7_new(); -Hàm bổ sung chứng số cho đối tợng PKCS7 PKCS7_add_certificate(p7,x509); -Hàm bổ sung liệu cần ký cho đối tợng PKCS7 PKCS7_content_new(p7,NID_pkcs7_data); -Hàm thực ký đối tợng PKCS7 if (!PKCS7_dataFinal(p7,p7bio)) goto err; -Hàm thực ghi kết mét tƯp PEM_write_PKCS7(fb,p7); Th− viƯn sign.o: Th− viƯn nµy chØ cung cÊp mét hµm nhÊt tõ viƯc sư dơng hàm th viện libcrypto.a: int signdata(char *infile,char *outfile, char *certfile, char *keyfile) Trong infile: đờng dẫn tên tệp cần ký outfile: đờng dẫn tên tệp lu kết chữ ký số certfile: đờng dẫn tên tệp chứng số dới dạng PEM keyfile: đờng dẫn tên tệp khoá bí mật dới đinh dạng PEM Giá trị trả về: trình ký thành công trình ký gặp lỗi Tệp sign.h Khai báo hàm signdata() nh sau: #include #include int signdata(char *infile,char *outfile, char *certfile, char *keyfile); C¸c th viện libcrrypto.a, sign.o sign.h đợc lu th mục Lib\libsign CD-ROM 37 2.1.2-Chơng trình ví dụ thực việc ký tệp liệu Để mô tả cụ thể việc xây dựng chơng trình thực gọi hàm ký liệu sử dụng chứng số khóa bí mật, xây dựng module chơng trình ví dụ thực ký tệp liệu Module chơng trình ví dụ đợc lu th mục Example\sign, nội dung th mục gồm tệp dới đây: ã Tệp \Lib\libcrypto.a: th viện cung cấp dịch vụ mật mà khóa công khai ã Tệp \Lib\sign.o: th viện cung cấp hàm ký tệp liệu ã Tệp \sign.h: ã Tệp \data.txt: ví dụ tệp liệu đợc ký ã Tệp \signdata.c: tệp chơng trình thực tác vụ ký ã Tệp \user1.crt: tệp chứng số đợc sử dụng ký ã Tệp \user1.key: tƯp khãa bÝ mËt t−¬ng øng víi tƯp chøng chØ số user1.crt ã Tệp \chuky.p7: tệp kết dới định dạng PKCS#7 ã Tệp \Makefile: sử dụng để biên dịch chơng trình ví dụ ã Tệp \Readme: hớng dẫn biên dịch sử dụng chơng trình Dới toàn nội dung tệp chơng trình nguồn signdata.c /*S dng tệp header*/ #include #include #include "sign.h" int main(int argc, char **argv) { /*Khai báo biến nhận tham số đầu vào*/ int i; char *infile=NULL; char *outfile=NULL; char *certfile=NULL; char *keyfile=NULL; /*Nhận tham số đầu vào*/ argv++; argc ; for (;;) { if (argc