1. Trang chủ
  2. » Tất cả

Xây dựng phần mềm ký số, mã mật cms, json

100 6 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 100
Dung lượng 2,26 MB

Nội dung

Sử dụng thư viện mã nguồn mở BouncyCastle với ngôn ngữ C và công nghệ Windows Form để xây dựng phần mềm ký số cấu trúc mật mã CMS, JSON, XML. Bài đọc bao gồm kiến thức lý thuyết phổ biến về mật mã đối xứng và bất đối xứng, hạ tầng khóa công khai (PKI), ... Bài đọc bao gồm hướng dẫn cách sử dụng thư viện mật mã BouncyCastle như: cách chuyển đổi cấu trúc dữ liệu từ BouncyCastle sang Microsoft, cách ký số và xác thực, mã hóa dữ liệu và giải mã dữ liệu và một số chức năng tiện ích khác mà thư viện mang lại, ...

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG PHẦN MỀM KÝ SỐ, Mà MẬT CMS, JSON VÀ XML TRÊN WINDOWS Ngành: An tồn thơng tin Mã số: 7.48.02.02 Sinh viên thực hiện: Võ Lê Huy – AT131315 Lớp: AT13P Cán hướng dẫn: Tiến sĩ Lê Quang Huy Cục chứng thực số Bảo mật thông tin Thành phố Hồ Chí Minh, 2021 BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG PHẦN MỀM KÝ SỐ, Mà MẬT CMS, JSON VÀ XML TRÊN WINDOWS Ngành: An tồn thơng tin Mã số: 7.48.02.02 Sinh viên thực hiện: Võ Lê Huy – AT131315 Lớp: AT13P Cán hướng dẫn: Tiến sĩ Lê Quang Huy Cục chứng thực số Bảo mật thông tin Thành phố Hồ Chí Minh, 2021 Mục lục CHƯƠNG 1: HẠ TẦNG MẬT Mà KHĨA CƠNG KHAI 1.1 Một số khái niệm PKI 1.2 Sự cần thiết PKI 1.3 Kiến trúc hạ tầng PKI 1.4 Các thành phần, dịch vụ 1.4.1 Các thành phần PKI 1.4.2 Certification Authority (CA) 1.4.3 Registration Authority (RA) 1.4.4 Validation Authority (VA) 1.4.5 Thực thể cuối 1.5 Chứng thư số CRL 10 1.5.1 Chứng thư số 10 1.5.2 Danh sách thu hồi chứng thư số CLR 21 1.6 Hoạt động hệ thống PKI 25 1.6.1 Chứng thực cặp khóa 25 1.6.2 Sử dụng cặp khóa 25 1.6 Ứng dụng PKI 28 1.7 Miền tin cậy mở rộng miền tin cậy 29 1.8 Các mơ hình hoạt động PKI 29 1.8.1 Hierarchical PKI 29 1.8.2 Mesh PKI 30 1.8.3 Single CA 31 1.9 Chuẩn, đặc tả, luật pháp sách 31 CHƯƠNG 2: CẤU TRÚC DỮ LIỆU KÝ SỐ, Mà MẬT CMS, XML JSON 33 2.1 Cấu trúc liệu ký số, mã mật CMS 33 2.1.1 Giới thiệu chung 33 2.1.2 Các chuẩn CMS 34 2.1.3 Cấu trúc liệu CMS 46 2.2 Cấu trúc liệu ký số, mã mật XML 51 2.2.1 Giới thiệu chung 51 i 2.2.2 Các chuẩn ký số, mã mật XML 54 2.2.3 Cấu trúc liệu XML 60 2.3 Cấu trúc liệu ký số, mã mật JSON 62 2.3.1 Giới thiệu chung 62 2.3.2 Các chuẩn JSON Web Token 65 2.3.3 Cấu trúc liệu JSON 74 CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG DEMO 79 3.1 Một số thư viện mật mã 79 3.1.1 Thư viện mật mã Bouncy Castle 79 3.1.2 Thư viện mật mã Microsoft Crypto API 87 3.2 Phân tích thiết kế chương trình 89 3.2.1 Giới thiệu chung ứng dụng 89 3.2.2 Phân tích 89 3.2.3 Thiết kế 91 Kết luận 94 TÀI LIỆU THAM KHẢO 95 ii LỜI CẢM ƠN Lời nói đầu tiên, em xin gửi lời cảm ơn đến quý thầy cô Học Viện Kỹ Thuật Mật Mã quý thầy khoa an tồn thơng tin truyền đạt kiến thức, kinh nghiệm quý báu, quan tâm, hỗ trợ em suốt thời gian học trường Đặc biệt, em xin chân thành cảm ơn Tiến sĩ Lê Quang Huy, người hướng dẫn, tạo điều kiện thuận lợi cho em thực khóa luận Mặc dù, em cố gắng hồn thành khóa luận hạn chế thời gian kiến thức nên không tránh khỏi sai sót Em kính mong nhận thơng cảm ý kiến đóng góp từ q thầy để em hồn thiện phát triển khóa luận Em xin chân thành cảm ơn Thành phố Hồ Chí Minh, 2021 iii CHƯƠNG 1: HẠ TẦNG MẬT Mà KHĨA CƠNG KHAI 1.1 Một số khái niệm PKI Cơ sở hạ tầng: phận thiết bị phụ thuộc tạo thành sở hệ thống hay thiết bị cố định nhà nước Phân biệt khái niệm sở hạ tầng triết học Đặc điểm hạ tầng: • Lan tỏa rộng khắp (mạng điện, đường…), sử dụng • Hỗ trợ ứng dụng (Trong suốt với người dùng, dễ nhận biết sử dụng) Hạ tầng an ninh, an toàn mạng: phận phụ thuộc tạo thành sở hệ thống an tồn mạng Cơ sở hạ tầng khóa cơng khai (Public Key Infrastructure – PKI) hạ tầng an toàn, an ninh mạng, sử dụng kỹ thuật mật mã khố cơng khai nhằm cung cấp dịch vụ đảm bảo an toàn cho giao dịch điện tử mạng Hạ tầng mật mã hóa cơng khai: hệ thống hỗ trợ cho việc áp dụng mật mã khóa cơng khai vào thực tiễn, nhằm đảm bảo an tồn cho giao dịch điện tử mơi trường mạng Mục tiêu hạ tầng mật mã khóa cơng khai: cung cấp dịch vụ nhằm đảm bảo an toàn cho giao dịch điện tử 1.2 Sự cần thiết PKI Xã hội phát triển, mạng Internet sử dụng rộng rãi, dẫn tới giao dịch điện tử thực ngày nhiều, kéo theo vấn đề an tồn thơng tin Các vấn đề an tồn thơng tin cho giao dịch điện tử: xác thực, bí mật, tồn vẹn, chống chối bỏ Các giải pháp áp dụng để đảm bảo an toàn cho giao dịch sau: Các giải pháp/dịch vụ Tên/mật Sinh trắc Đối xứng Xác thực Tồn vẹn Bí mật Trung bình Mạnh Khơng Không Không Mạnh Không Không Mạnh Chống chối bỏ Không Không Không Các kỹ Bất đối Mạnh Mạnh Mạnh Mạnh thuật mật xứng mã Theo bảng thống kê giải pháp tốt ứng dụng mật mã, mật mã khóa cơng khai Tuy nhiên mật mã khóa cơng khai ứng dụng gặp số vấn đề sau: • Xác thực cặp khóa: chủ sở hữu cặp khóa thực ký, mã liệu • Chối bỏ hành động: chủ sở hữu cặp khóa chối bỏ việc thực hành động (ký lên tài liệu) • Thu hồi cặp khóa: làm hiệu lực cặp khóa thơng báo với người khác có quan hệ giao dịch với Mật mã khóa cơng khai ứng dụng gặp số vấn đề Và cần có hạ tầng để giải vấn đề PKI phần quan trọng xương sống chiến lược CNTT PKI quan trọng cơng nghệ dựa chứng giúp tổ chức thiết lập chữ ký, mã hóa danh tính đáng tin cậy người, hệ thống thứ Với việc mơ hình kinh doanh phát triển ngày phụ thuộc nhiều vào giao dịch điện tử tài liệu kỹ thuật số, với nhiều thiết bị nhận biết Internet kết nối với mạng công ty, vai trị sở hạ tầng khóa cơng khai khơng cịn giới hạn hệ thống biệt lập email an tồn, thẻ thơng minh để truy cập vật lý lưu lượng truy cập web mã hóa PKI ngày kỳ vọng hỗ trợ số lượng lớn ứng dụng, người dùng thiết bị hệ sinh thái phức tạp Và với quy định nghiêm ngặt bảo mật liệu phủ ngành, hệ điều hành thống ứng dụng kinh doanh trở nên phụ thuộc hết vào tổ chức PKI để đảm bảo tin cậy 1.3 Kiến trúc hạ tầng PKI Figure Kiến trúc hạ tần khóa cơng khai (PKI) Kiến trúc chia thành phần riêng biệt: khung pháp lý (văn luật, văn luật, hệ thông SP, CP CPS) hạ tầng kỹ thuật (hạ tầng kỹ thuật, phần cứng, phần mềm, người, kỹ thuật mật mã) 1.4 Các thành phần, dịch vụ 1.4.1 Các thành phần PKI Figure Các thành phần PKI Mơ hình hoạt động: Client – Server • Hạ tầng - cung cấp dịch vụ: CA, RA, VA • Client - sử dụng dịch vụ: người dùng, thiết bị Thẩm quyền chứng thực (Certification Authority - CA) bao gồm chức nhiệm vụ Chức thẩm quyền chứng thực: • Chứng thực cặp khóa thuộc khơng thuộc th bao • Quản lý vịng đời chứng thư số (cặp khóa) sau phát hành Nhiệm vụ thẩm quyền chứng thực: Phát hành, gia hạn, tạm dừng/kích hoạt, thu hồi chứng thư số, khơi phục cặp khóa, phát hành CRL Thẩm quyền đăng ký (Registration Authority - RA) bao gồm xác định/xác thực hỗ trợ người dùng cuối Xác định xác thực thẩm quyền đăng ký: công việc quản lý (tiếp nhận, kiểm tra phê duyệt yêu cầu cấp, thu hồi, gia hạn, tạm dừng, khôi phục … chứng thư số, cặp khóa) Hỗ trợ người dùng cuối thẩm quyền đăng ký: tạo cặp khóa quản lý người dùng, bàn giao kết Figure Mối quan hệ VA-CA-RA Thẩm quyền xác nhận (Validation Authority - VA): • Mục tiêu: Khẳng định tính hợp lệ tin cậy chứng thư số (cặp khóa) • Kho cơng cộng chứa chứng thư số CRL (LDAP), OCSP… • Dịch vụ dấu thời gian: TimeStamp, … Thực thể cuối (client) – người dùng, thiết bị: • Người dùng, thiết bị, sử dụng chứng thư số - relying party • Chủ thể sở hữu chứng thư số (thuê bao) – subscriber Thẩm quyền chứng thực (Certification Authority – CA) Thẩm quyền đăng ký (Registration Authority - RA) Thực thể cuối (client) – người dùng, thiết bị Chứng thực: chứng thực cặp khóa thuộc chủ thể (CTS) chứng thực cặp khóa khơng thuộc chủ thể (CRL) Khẳng định tính hợp lệ tin cậy cặp khóa chứng thực: • Kho chứng thư số: chứa tất CTS, CRL tổ chức chứng thực tạo ra, điểm tin cậy hệ thống RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(512); RSAParameters rp = rsa.ExportParameters(true); AsymmetricCipherKeyPair kp = DotNetUtilities.GetRsaKeyPair(rp); DotNetUtilities.ToRSA((RsaKeyParameters)kp.Public); DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)kp.Private); GetRsaPublicKey: trích xuất khóa công khai từ định dạng Microsoft sang BouncyCastle // mã nguồn BouncyCastle public static RsaKeyParameters GetRsaPublicKey(RSA rsa) { return GetRsaPublicKey(rsa.ExportParameters(false)); } // mã nguồn BouncyCastle public static RsaKeyParameters GetRsaPublicKey(RSAParameters rp) { return new RsaKeyParameters(false, new BigInteger(1, rp.Modulus), new BigInteger(1, rp.Exponent)); } 3.1.1.2.2 GeneratorUtilities Cấu trúc tiện ích thường sử dụng để gọi thuật tốn tạo khóa mật mã đối xứng cơng khai GetKeyGenerator: gọi thuật tốn sinh khóa đối xứng CipherKeyGenerator aesKg = GeneratorUtilities.GetKeyGenerator("AES"); aesKg.Init(new KeyGenerationParameters(new SecureRandom(), keySize)); return ParameterUtilities.CreateKeyParameter("AES", aesKg.GenerateKey()); GetKeyPairGenerator: gọi thuật toán sinh khóa mật mã cơng khai var kpGen = GeneratorUtilities.GetKeyPairGenerator("RSA"); kpGen.Init(new KeyGenerationParameters(new SecureRandom(), 1024)); AsymmetricKeyParameter privKey = kpGen.GenerateKeyPair().Private; 81 3.1.1.2.3 X509Certificate Cấu trúc cho biết thông tin chứng thư số: IsValid, CheckValidity: kiểm tra hiệu lực chứng thông qua thời gian // mã nguồn BouncyCastle public virtual bool IsValid(DateTime time) { return time.CompareTo(NotBefore) >= && time.CompareTo(NotAfter) 0) throw new CertificateExpiredException("certificate expired on " + c.EndDate.GetTime()); if (time.CompareTo(NotBefore) < 0) throw new CertificateNotYetValidException("certificate not valid until " + c.StartDate.GetTime()); } Tổng hợp tất thông tin chứng thư số bao gồm: version, serial number, issuer, subject, signature, … GetPublicKey: trích xuất khóa cơng khai pkcs12Store.GetCertificate(keyAlias).Certificate.GetPublicKey(); 82 Verify: kiểm tra chữ ký chứng thư với đầu vào khóa cơng khai // mã nguồn BouncyCastle public virtual void Verify(AsymmetricKeyParameter key) { CheckSignature(new Asn1VerifierFactory(c.SignatureAlgorithm, key)); } 3.1.1.2.4 Pkcs12Store Cấu trúc cho phép xuất nhập chuẩn PKCS#12 Hàm tạo Load: định đầu vào tên chứng thư mật để tải thông tin public static Pkcs12Store GetPkcs12Store(string pfxPath, string pwd) { Pkcs12Store pkcs12Store = null; using (var keyStream = new FileStream(pfxPath, FileMode.Open, FileAccess.Read)) { pkcs12Store = new Pkcs12Store(); pkcs12Store.Load(keyStream, pwd.ToCharArray()); } return pkcs12Store; } Alias: liệt kê bí danh chứng thư public static string GetAliasFromPkcs12Store(Pkcs12Store pkcs12Store) { return pkcs12Store.Aliases.Cast().FirstOrDefault(p => pkcs12Store.IsKeyEntry(p)); } GetKey: sử dụng alias để lấy khóa bí mật AsymmetricKeyParameter privateKey = pkcs12Store.GetKey(keyAlias).Key; 83 GetCertificate: sử dụng alias để lấy cấu trúc chứng thư X.509 X509Certificate cert = pkcs12Store.GetCertificate(keyAlias).Certificate; 3.1.1.2.5 CmsSignedDataStreamGenerator Cấu trúc cho phép ký số mã mật CMS chế độ Stream phù hợp yêu cầu tốc độ liệu lớn • AddSigner: nhận khóa cơng khai, thơng tin chứng thư X.509 thuật tốn tóm tắt thơng điệp • Open: trả stream ký số using (FileStream signedStream = new FileStream(signedFile, mode: FileMode.Create, access: FileAccess.Write)) using (FileStream originDataStream = new FileStream(originalFile, FileMode.Open, access: FileAccess.Read)) { var pkcs12Store = …// load PKCS#12 var keyAlias = …// get alias privateKey = …// get private key bouncycastleCert = pkcs12Store.GetCertificate(keyAlias).Certificate; var gen = new CmsSignedDataStreamGenerator(); gen.AddSigner(privateKey: privateKey, cert: bouncycastle_cert, CmsSignedDataGenerator.DigestSha256); using (Stream signingStream = gen.Open(signedStream, true)) { // sign originDataStream.CopyTo(signingStream); } } 3.1.1.2.6 CmsSignedDataParser Cấu trúc chứa thông tin liệu ký: • Cấu trúc cần khởi tạo stream: CmsTypedStream tham số đầu vào với liệu gốc Stream tham số thứ hai với liệu tạo • GetSignerInfos: liệt kê thơng tin người ký 84 3.1.1.2.7 SignerInformation Cấu trúc chứa thông tin người ký, nhờ vào thông tin để chứng thực chữ ký, nội dung ký • Verify với khóa cơng khai: xác minh với khóa cơng khai, tính làm tròn nhiệm vụ xác minh thiếu xót • Verify với chứng thư X.509: xác minh với chứng thư số, tính tốt ngồi việc xác minh kiểm tra hiệu lực chứng thư SignerInformation signer = signers.FirstOrDefault(); if (signer.Verify(bouncycastleCert)) { // signature ok byte[] expectedDigest = signer.GetContentDigest(); if (Org.BouncyCastle.Utilities.Arrays.AreEqual(digest, expectedDigest)) { // data ok result = true; } else { // fake data throw new Exception("Verify data fail"); } } 3.1.1.2.8 CmsEnvelopedDataStreamGenerator Cấu trúc dùng cho việc mã hóa liệu mã mật CMS với mật mã khóa bí mật tức khóa đối xứng Trong cấu trúc mã hóa CMS Bouncy Castle khởi tạo sẵn khóa bí mật để mã hóa yêu cầu thêm số biện pháp bảo vệ khóa bí mật Cấu trúc cho phép sử dụng stream nhằm phục vụ nhu cầu tốc độ nhanh liệu lớn • AddKekRecipient: sử dụng khái niệm Kek (Key Encryption Key) để bảo vệ khóa đối xứng, tính u cầu khóa đảm nhiệm vai trị Kek • AddKeyTransRecipient: sử dụng chứng thứ số X.509 cấu trúc BouncyCastle để bảo vệ khóa đối xứng khóa bí mật cần giải mã 85 • Open: khởi tạo stream để mã hóa var aesKey = ParameterUtilities.CreateKeyParameter("AES", aesKeyRaw); byte[] kekId = new byte[] { 1, 2, 3, 4, }; var cmsEncryptor = new CmsEnvelopedDataStreamGenerator(); cmsEncryptor.AddKekRecipient("AES128", aesKey, kekId); using (var originalDataStream = new FileStream(rawFilePath, FileMode.Open, FileAccess.Read)) using (var encryptedStream = new FileStream(cipherFilePath, FileMode.Create, FileAccess.Write)) { // encrypt var encryptingStream = cmsEncryptor.Open(encryptedStream, CmsEnvelopedDataGenerator.Aes128Cbc); originalDataStream.CopyTo(encryptingStream); encryptingStream.Close(); } 3.1.1.2.9 CmsEnvelopedDataParser Cấu trúc dùng để tải liệu mã hóa, trích xuất thông tin phương thức để giải mã Với liệu đầu vào stream liệu mã hóa • GetRecipientInfos: lấy danh sách người nhận Từ kết trích xuất chi tiết người nhận giải mã o GetRecipients o RecipientInformation: chứa phương thức GetContentStream trả stream giải mã KeyParameter aesKey = ParameterUtilities.CreateKeyParameter("AES", aesKeyRaw); using (FileStream cipherStream = new FileStream(cipherFilePath, FileMode.Open, FileAccess.Read)) using (FileStream decryptedStream = new FileStream(decryptedFilePath, FileMode.Create, FileAccess.Write)) { // import cipher var cmsEnvelopedDataParser = new CmsEnvelopedDataParser(cipherStream); 86 RecipientInformationStore recipientInformationStore = cmsEnvelopedDataParser.GetRecipientInfos(); ICollection recipients = recipientInformationStore.GetRecipients(); foreach (RecipientInformation recipient in recipients) { // decrypt CmsTypedStream decryptingStream = recipient.GetContentStream(aesKey); decryptingStream.ContentStream.CopyTo(decryptedStream); decryptingStream.ContentStream.Close(); } } 3.1.2 Thư viện mật mã Microsoft Crypto API 3.1.2.1 Giới thiệu chung Thư viện CryptoAPI Microsoft cho phép lập trình viên bảo mật ứng dụng thơng qua mật mã, hỗ trợ tính mã hóa, giải mã liệu ký số, xác minh liệu Thư viện với gốc thể thơng qua ngơn ngữ C tính Win32 • Sự tiện lợi tốc độ cao với khơng phổ biến làm việc với ngơn ngữ bậc thấp số cú pháp khó chịu Microsoft WinAPI • Ngơn ngữ Microsoft C# hỗ trợ chuyển thể CryptoAPI để dễ dàng tiếp cận sử dụng cho lập trình viên 3.1.2.2 Danh mục lớp 3.1.2.2.1 SignedXml Cấu trúc xây dựng Microsoft với phương thức để tính tốn cho chữ ký số, thông tin quan trọng cần ý tới cấu trúc SignedXml sau: • Thuộc tính SigningKey: nhận khóa bí mật để ký số • Phương thức ComputeSignature: kích hoạt tính tốn nội thân chữ ký số • Phương thức GetXml: lấy chữ ký số 87 SignedXml signedXml = new SignedXml(xmlDoc); signedXml.SigningKey = privateKey; signedXml.AddReference(reference); signedXml.ComputeSignature(); XmlElement xmlDigitalSignature = signedXml.GetXml(); 3.1.2.2.2 X509Certificate2UI Cấu trúc cho phép người dùng thao tác với chứng thư số thông qua số giao diện quy định sẵn Microsoft • Phương thức SelectFromCollection: trình diễn giao diện cho người dùng chọn chứng thư số • Phương thức DisplayCertificate: trình diễn giao diện thuộc tính chứng thư số var store = new X509Certificates.X509Store("MY", StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | SOpenFlags.OpenExistingOnly); var collection = store.Certificates; collection = X509Certificate2UI.SelectFromCollection(collection, "Select", "Select a certificate", X509SelectionFlag.MultiSelection); var microsoftCert = collection[0]; 3.1.2.2.3 EncryptedXml Cấu trúc gồm chức mã hóa tài liệu XML thơng qua khóa đối xứng • Phương thức EncryptData: dùng để mã hóa thành phần tài liệu XML • Phương thức ReplaceElement: dùng để thay thành phần hay liệu gốc liệu mã hóa byte[] encryptedBytes = xmlEncryptor.EncryptData(elementToEncrypt, symAlgo, false); var encryptedDataElem = new EncryptedData(); encryptedDataElem.Type = EncryptedXml.XmlEncElementUrl; encryptedDataElem.EncryptionMethod = new EncryptionMethod(algo); encryptedDataElem.CipherData.CipherValue = Encoding.UTF8.GetBytes(Convert.ToBase64String(encryptedBytes)); var target = Tuple.Create(elementToEncrypt, encryptedDataElem); EncryptedXml.ReplaceElement(target.Item1, target.Item2, false); 88 3.2 Phân tích thiết kế chương trình 3.2.1 Giới thiệu chung ứng dụng Chương trình ký số nhằm đáp ứng nhu cầu đóng dấu chữ ký cách tiện lợi, áp dụng nhiều tệp tin lúc, chương trình cho phép mã hóa giải mã tài liệu Chương trình viết ngơn ngữ C# cơng nghệ giao diện Windows Form, ngồi module hạt nhân phân tách riêng biệt thành tệp tin thư viện DLL giúp dễ dàng cho việc quản lý, nâng cấp sửa đổi mà không ảnh hưởng giao diện, dễ dàng nâng cấp từ công nghệ Winform sang công nghệ Microsoft Windows Presentation Foundation (WPF) Chương trình ký số sử dụng mã mật CMS, JSON XML cấu trúc sử dụng phổ biến giới, cho phép tùy chọn chứng thư số liệt kê kho tài ngun chủ Microsoft Ngồi chương trình cịn áp dụng tiêu chuẩn quốc tế RFC để giải vấn đề nhập nhằng logic truyền nhận liệu, nhằm đáp ứng hay tiền đề cho việc áp dụng giao tiếp xuyên suốt ứng dụng người dùng máy chủ cách an toàn 3.2.2 Phân tích 3.2.2.1 Xác định tác nhân trường hợp sử dụng 3.2.2.1.1 Tác nhân (Actor) 3.2.2.1.1.1 Khái niệm Figure 43 Minh họa tác nhân (actor) Là đối tượng bên ngồi tương tác với hệ thống theo hình thức: • Tương tác trao đổi thơng tin với hệ thống sử dụng chức • Cung cấp đầu vào nhận thông tin đầu từ hệ thống • Không điều khiển hoạt động hệ thống 3.2.2.1.1.2 Xác định tác nhân Tác nhân chương trình ký số người dùng sử dụng tính chương trình: mở tệp tin, đóng chương trình, ký số, xác thực, mã hóa, giải mã, … 89 Figure 44 Xác định tác nhân chương trình 3.2.2.1.2 Trường hợp sử dụng (UseCase) 3.2.2.1.2.1 Khái niệm UC xem chức hệ thống cung cấp từ quan điểm người dùng UC dùng để mô tả hệ thống mặt chức năng, chức biểu diễn nhiều UC Không phải thiết kế, cài đặt mà phần vấn đề cần giải Figure 45 Xác định trường hợp sử dụng với tính Figure 46 Xác định trường hợp sử dụng với tính phụ trợ 3.2.2.1.2.2 Xác định UseCase Những usecase chương trình gồm: • Mở tệp tin, lưu tệp tin, đóng ứng dụng, xem giới thiệu phần mềm (about), hướng dẫn sử dụng 90 • Chọn hành động: ký số, xác thực, mã hóa, giải mã • Chọn chế độ mã mật: CMS, JSON, XML • Chốt hành động: ký số, xác thực, mã hóa, giải mã 3.2.2.2 Xác định lớp mối quan hệ 3.2.3 Thiết kế 3.2.3.1 Thiết kế chức 3.2.3.1.1 Mở tệp tin Chức mở tệp tin đặt menu bar truyền thống phù hợp với thói quen tất người Figure 47 Giao diện tính mở tệp tin Chức cho phép mở nhiều tệp tin lúc để ký số, xác thực, mã hóa giải mã 3.2.3.1.2 Đóng ứng dụng Chức đóng ứng dụng đặt menu bar truyền thống phù hợp với thói quen tất người Figure 48 Giao diện tính chương trình 3.2.3.1.3 Ký số mã mật CMS, XML, JSON Đầu vào yêu cầu thỏa mãn để thực chức ký số mã mật CMS sau: 91 • Chấp nhận tất phần mở rộng cho tệp tin ký với chế độ CMS, cấu trúc XML cần có định dạng • Đối tượng ký • Tệp tin tiêu chuẩn PKCS#12 (pfx p12) mật • Trình diễn chi tiết thơng tin tệp tin PKCS#12 bao gồm: • Phiên hành • Ngày hiệu lực ngày hết hạn • Số Serial • Thumprint • Thuật tốn chữ ký Sử dụng ý tưởng tiêu chuẩn quốc tế RFC-7517 áp dụng cho XML JSON Sau nhân nút khởi tạo, đầu tệp tin ký tương ứng với tệp tin đầu vào thêm phần đuôi mở rộng “.sig” 3.2.3.1.4 Xác thực mã mật CMS Tải lên chứng thư số từ kho tài nguyên chủ windows thư viện hệ thống mà Microsoft cung cấp cho ngơn ngữ lập trình C#, đồng thời trình diễn chi tiết thơng tin chứng thư số để người dùng dễ dàng nắm bắt hoàn cảnh sử dụng 3.2.3.1.5 Xác thực mã mật XML, JSON Việc xác thực ngược lại với ký số chỗ khơng có đầu ra, thông báo xác minh thành công thất bại • Đầu vào tệp tin cần xác minh • Trích xuất khóa cơng khai có phần header để xác minh tài liệu, không tùy chọn chứng thư nhu CMS nhằm đáp ứng nhu cầu truyền nhận liệu liên tục máy chủ ứng dụng máy khách cách nhanh, xuyên suốt liên tục 3.2.3.1.6 Mã hóa giải mã mã mật CMS, XML Đầu vào bao gồm: • Tệp tin liệu cần mã hóa khơng giới hạn mở rộng, tệp tin cần giải mã phải có mở rộng nhận biết “.enc” • Mật mã hóa tùy chọn kích thước khóa đối xứng AES 92 Đầu tệp tin liệu tương ứng với đầu vào thêm đuôi mở rộng “.enc” với trường hợp giải mã, ngược lại giải mã loại bỏ đuôi mở rộng “.enc” 3.2.3.1.7 Mã hóa giải mã mã mật JSON Mô trao đổi liệu xuyên suốt máy chủ máy khách theo cách nhất, cách bóc tách làm module xử lý máy chủ Áp dụng tiêu chuẩn quốc tế RFC-7516, bên có cặp khóa bất đối xứng chứng thư số mình, gửi request bên đính kèm khóa cơng khai để bên nhận sử dụng để mã hóa khóa đối xứng mã hóa nội dung mà bên gửi yêu cầu Chu trình lặp lặp lại cách liên tục mà đảm bảo độ an toàn 93 Kết luận Chữ ký điện tử chữ ký số ngày sử dụng phổ biến tất giao dịch điển tử với lợi ích đặc biệt mà chúng mang lại Việc dùng chữ ký số để cam kết lời hứa điều khơng thể rút lại giúp nhận dạng người ký vào cam kết Con người sử dụng hợp đồng dạng điện tử từ 100 năm với việc sử dụng mã Morse điện tín Vào năm 1889, tịa án tối cao bang New Hampshire (Hoa kỳ) phê chuẩn tính hiệu lực chữ ký điện tử Tuy nhiên, với phát triển khoa học kỹ thuật gần chữ ký điện tử vào sống cách rộng rãi Vào thập niên 1980, công ty số cá nhân bắt đầu sử dụng máy fax để truyền tài liệu quan trọng Mặc dù chữ ký tài liệu thể giấy trình truyền nhận chúng hồn tồn dựa tín hiệu điện tử Tuy nhiên mã mật lạc hậu thời xưa nói riêng giải pháp ký số nói chung thiếu đảm bảo mật mã học nhận dạng người tạo thiếu kiểm tra tính tồn vẹn liệu Phần mềm ký số thiết kế chặt chẽ, ứng dụng nhiều mã mật nói chung tiêu chuẩn quốc tế RFC nói riêng, việc chọn sử dụng mã mật để đáp ứng cho thành phẩm bảo vệ cách tốt cần thiết để tránh khỏi tác hại rị rỉ thơng tin, mạo danh người ký thay đổi liệu Bên cạnh kết mà em nghiên cứu cịn vấn đề tồn tại: • Chỉ tập trung vào phần mềm với thao tác từ người dùng nên chưa mô hình hóa rõ nét trao đổi thơng tin mã mật XML/JSON mơ hình máy chủ máy khách • Chưa sử dụng nâng cao với thiết bị ngoại vi USB Token • Chưa nắm hết yếu tố bảo mật tùy chọn thư viện BouncyCastle • Chưa tìm hiểu vài trường hợp api BouncyCastle bị ngăn chặn sử dụng đồng thời với phần mềm chống virus hãng lớn như: Norton Mỹ, Kastersky Nga, … 94 TÀI LIỆU THAM KHẢO [1] Nghiên cứu Hạ tầng khóa cơng khai (PKI) trang chủ Microsoft: https://docs.microsoft.com/en-us/windows/win32/seccertenroll/public-keyinfrastructure [2] Tìm hiểu thư viện mã mật BouncyCastle trang chủ: https://www.bouncycastle.org/csharp/ [3] Nghiên cứu cách sử dụng thư viện mã mật BouncyCastle C# github cung cấp trang chủ: https://github.com/bcgit/bc-csharp [4] Nghiên cứu thư viện mã mật Windows Crypto Win32: https://docs.microsoft.com/en-us/windows/win32/seccrypto/cryptographyportal [5] Nghiên cứu thư viện mật mã Windows Crypto C# NET API: https://docs.microsoft.com/en-us/dotnet/api/?view=dotnet-plat-ext-6.0 [6] Nghiên cứu tiêu chuẩn quốc tế XML RFC-3275: https://datatracker.ietf.org/doc/html/rfc3275 [7] Nghiên cứu tiêu chuẩn quốc tế CMS RFC-5652: https://datatracker.ietf.org/doc/html/rfc5652 [8] Nghiên cứu tiêu chuẩn quốc tế XML RFC-6931: https://datatracker.ietf.org/doc/html/rfc6931 [9] Nghiên cứu tiêu chuẩn quốc tế JSON RFC-7515: https://datatracker.ietf.org/doc/html/rfc7515 [10] Nghiên cứu tiêu chuẩn quốc tế JSON RFC-7516: https://datatracker.ietf.org/doc/html/rfc7516 [11] Nghiên cứu tiêu chuẩn quốc tế JSON RFC-7517: https://datatracker.ietf.org/doc/html/rfc7517 [12] Nghiên cứu tiêu chuẩn quốc tế JSON RFC-7518: https://datatracker.ietf.org/doc/html/rfc7518 [13] Nghiên cứu tiêu chuẩn JSON RFC-7519: https://datatracker.ietf.org/doc/html/rfc7519 [14] Nghiên cứu chuẩn PKCS#7 trang chủ Microsoft: https://docs.microsoft.com/en-us/windows/win32/seccrypto/pkcs 7concepts [15] Nghiên cứu tiêu chuẩn Viện tiêu chuẩn Viễn thông Âu châu: https://www.etsi.org/standards#Pre-defined%20Collections [16] Nghiên cứu chuẩn PKCS#12: https://en.wikipedia.org/wiki/PKCS_12 95 ... YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG PHẦN MỀM KÝ SỐ, Mà MẬT CMS, JSON VÀ XML TRÊN WINDOWS Ngành: An tồn thơng tin Mã số: 7.48.02.02 Sinh viên thực... liệu ký số, mã mật XML 51 2.2.1 Giới thiệu chung 51 i 2.2.2 Các chuẩn ký số, mã mật XML 54 2.2.3 Cấu trúc liệu XML 60 2.3 Cấu trúc liệu ký số, mã mật JSON. .. LIỆU KÝ SỐ, Mà MẬT CMS, XML JSON 2.1 Cấu trúc liệu ký số, mã mật CMS 2.1.1 Giới thiệu chung 2.1.1.1 Khái niệm Cấu trúc CMS có tên đầy đủ tiếng Anh Cryptographic Message Syntax, dùng việc ký số,

Ngày đăng: 08/02/2023, 09:34