Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
1,18 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN DANH ĐẠI NGHIÊN CỨU CHỮ KÝ SỐ TRONG ỨNG DỤNG QUẢN LÝ TÀI LIỆU LƢU TRỮ QUỐC GIA LUẬN VĂN HÀ NỘI - 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN DANH ĐẠI NGHIÊN CỨU CHỮ KÝ SỐ TRONG ỨNG DỤNG QUẢN LÝ TÀI LIỆU LƢU TRỮ QUỐC GIA : Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số 60.48.0103 Ngành : LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Ngƣời hƣớng dẫn khoa học: TS HỒ VĂN HƢƠNG HÀ NỘI - 2015 LỜI CAM ĐOAN Với mục đích học tập, nghiên cứu để nâng cao kiến thức, trình độ chun mơn nên làm luận văn cách nghiêm túc hoàn toàn trung thực Trong toàn nội dung luận văn, điều trình bày cá nhân tôi tổng hợp từ nhiều nguồn tài liệu Đã nêu phần tài liệu tham khảo cuối luận văn Tôi xin cam đoan điều thật, sai, xin chịu hoàn toàn trách nhiệm Hà Nội, ngày tháng năm 2015 Học viên Trần Danh Đại LỜI CẢM ƠN Để hoàn thành luận văn có kiến thức ngày hơm nay, xin gửi lời cảm ơn đến Ban Giám hiệu tồn thể thầy khoa Cơng nghệ thơng tin - Trường Đại học Công nghệ - Đại học Quốc gia Hà Nội tận tình giảng dạy, truyền đạt kiến thức kinh nghiệm quý báu cho tơi tồn thể học viên cao học khóa 19 suốt trình học tập nghiên cứu trường Tơi xin bày tỏ lịng biết ơn sâu sắc đến thầy giáo hướng dẫn TS Hồ Văn Hương - Ban Cơ yếu Chính phủ tận tình hướng dẫn, quan tâm động viên tơi q trình tìm hiểu, nghiên cứu, xây dựng hồn thành luận văn Tơi xin bày tỏ lịng biết ơn đến Ban Giám đốc Trung tâm Tin học, Ban Giám đốc Trung tâm Lưu trữ quốc gia nhiệt tình dẫn cung cấp yêu cầu thực tế toán Những kiến thức quan trọng giúp ích cho tơi nhiều q trình cài đặt thử nghiệm Mặc dù cố gắng hoàn thành luận văn thời gian khả nhiều hạn chế nên luận văn khó tránh khỏi sai sót định, mong thông cảm dẫn, góp ý thầy bạn bè để luận văn hoàn thiện Cuối xin gửi lời chúc sức khỏe thành đạt tới tất quý thầy cô, quý đồng nghiệp gia đình bạn bè Học viên Trần Danh Đại MỤC LỤC Lời mở đầu Chương 1: Tổng quan an tồn thơng tin, khảo sát thực trạng tài liệu Trung tâm lưu trữ quốc gia 10 1.1 Tổng quan an tồn thơng tin 10 1.2 An tồn thơng tin tài liệu lưu trữ quốc gia 11 1.3 Khảo sát thực trạng tài liệu Trung tâm Lưu trữ quốc gia 12 1.3.1 Giới thiệu Trung tâm Lưu trữ quốc gia 12 1.3.2 Khảo sát tài liệu lưu trữ Trung tâm Lưu trữ quốc gia 12 1.3.3 Tổng hợp sở liệu Trung tâm Lưu trữ quốc gia 16 1.3.4 Tổng hợp tài liệu số hóa Trung tâm Lưu trữ quốc gia 22 Chương 2: Nghiên cứu cở sở lý thuyết chữ ký số ứng dụng quản lý tài liệu lưu trữ quốc gia 25 2.1 Mã hóa liệu 25 2.1.1 Khái niệm mật mã 25 2.1.2 Phân loại hệ mật mã 26 2.2 Hàm băm mật mã 29 2.2.1 Định nghĩa 29 2.2.2 Phân loại hàm băm 29 2.2.3 Họ hàm băm SHA 30 2.3 Chữ ký số 31 2.3.1 Định nghĩa 31 2.3.2 Các ưu điểm chữ ký số 31 2.3.3 Thực chữ ký số khóa cơng khai 32 2.3.4 Chữ ký số RSA 32 2.3.5 Lược đồ ký số RSA 34 2.3.6 Lược đồ xác thực chữ ký RSA 34 2.3.7 Đánh giá độ chi phí, tốc độ độ an tồn thuật tốn RSA 35 2.4 Hạ tầng khóa cơng khai (PKI) 37 2.4.1 Giới thiệu PKI 37 2.4.2 Chức PKI 37 2.4.3 Các thành phần PKI 37 2.4.4 Mơ hình hoạt động PKI 38 2.4.5 Các chức PKI 39 2.4.6 Các mơ hình PKI 40 2.5 Chứng thư số 40 2.5.1 Giới thiệu chứng thư số 40 2.5.2 Các thành phần chứng thư: 40 2.5.3 Ứng dụng chứng thư số 41 2.6 File định dạng PDF chữ ký số 41 Chương 3: Xây dựng ứng dụng ký số cho tài liệu lưu trữ quốc gia 43 3.1 Xây dựng yêu cầu ứng dụng chữ ký số cho tài liệu lưu trữ quốc gia43 3.1.1 Xây dựng toán chuyển tài liệu từ file định dạng JPEG sang định dạng PDF 43 3.2 Lựa chọn hàm băm đại diện chữ ký số cho tài liệu lưu trữ 44 3.3 Xây dựng ứng dụng ký số tài liệu 44 3.3.1 Quá trình ký số file tài liệu 44 3.3.2 Q trình mã hóa 44 3.3.3 Quá trình giải mã: 45 3.3.4 Quá trình xác thực 46 3.3.5 Yêu cầu ứng dụng xây dựng 46 3.3.6 Một số hình ảnh ứng dụng ký số 49 Kết luận 53 Tài liệu tham khảo 54 Phụ lục: Mã nguồn chương trình 55 DANH MỤC HÌNH VẼ, ĐỒ THỊ Bảng 1.1: Bảng tổng hợp liệu đặc tả Trung tâm Lưu trữ quốc gia 22 Bảng 1.2: Bảng tổng hợp liệu toàn văn Trung tâm Lưu trữ quốc gia 23 Bảng 2.1: Quá trình mã hóa giải mã 26 Bảng 2.2: Mơ hình hệ thống mã hố khố bí mật 27 Bảng 2.3: Mơ hình hệ thống mã hố với khố cơng khai 28 Bảng 2.4: Ảnh minh họa làm việc hàm băm 29 Bảng 2.5: Các tính chất thuật toán băm 30 Bảng 2.6: Lược đồ ký số RSA 34 Bảng 2.7: Lược đồ xác thực chữ ký RSA 35 Bảng 2.8: Mơ hình PKI 38 Bảng 2.9: Quy trình đăng ký chứng thư số 39 Bảng 3.1: Mơ hình mã hóa file 45 Bảng 3.2: Mơ hình xác thực 46 Bảng 3.3: Giao diện ứng dụng 49 Bảng 3.4: Chức chuyển đổi file JPEG sang PDF ký số tài liệu 50 Bảng 3.5: Giao diện chọn chứng thư số tùy chọn hình ảnh đại diện 50 Bảng 3.6: Lựa chọn hình ảnh đại diện 51 Bảng 3.7: Lựa chọn chứng thư để ký 51 Bảng 3.8: Tùy chọn mã hóa liệu 52 DANH MỤC TỪ VIẾT TẮT STT Từ viết tắt Từ đầy đủ tiếng Việt CVTLTNN Cục Văn thư Lưu trữ nhà nước TTLTQG Trung tâm Lưu trữ quốc gia TLLT Tài liệu lưu trữ PKI Hạ tầng khóa cơng khai CA Chứng thực CRL Danh sách chứng thư số bị thu hồi OCSP Giao thức kiểm tra chữ ký số trực tuyến SSL Giao thức bảo mật để áp dụng bảo mật kênh truyền tin PKCS Chuẩn mật mã hạ tầng khóa cơng khai 10 PIN Mật để truy xuất vào thiết bị chữ ký số 11 MAC Mã xác thực thông báo 12 OCSP Giao thức xác thực chữ ký số trực tuyến LỜI MỞ ĐẦU Tài liệu lưu trữ quốc gia di sản văn hố dân tộc, có giá trị trị, kinh tế, quốc phịng, an ninh, ngoại giao, văn hóa, giáo dục, khoa học cơng nghệ hình thành trình hoạt động quan, tổ chức, cá nhân gia đình, dịng họ tiêu biểu Nó có giá trị đặc biệt nghiệp xây dựng bảo vệ tổ quốc Việt Nam xã hội chủ nghĩa Việc ứng dụng công nghệ thông tin vào công tác quản lý tài liệu lưu trữ giúp việc quản lý, nâng cao tuổi thọ tài liệu gốc phục vụ nhanh chóng, kịp thời yêu cầu tra cứu tài liệu lưu trữ lúc, nơi Muốn phải chuyển tài liệu từ dạng truyền thống sang tài liệu lưu trữ dạng điện tử (tài liệu số) Khi chuyển sang tài liệu lưu trữ điện tử, tài liệu phải phải bảo đảm tính xác thực, tính tồn vẹn, qn, an tồn thơng tin, tính chống chối bỏ, có khả truy cập chuyển đổi theo thời gian môi trường điện tử từ tài liệu tạo lập Hiện nay, Trung tâm Lưu trữ quốc gia số hoá 12 triệu file tài liệu, nhiên tất hệ thống liệu chưa áp kỹ thuật để đảm bảo tính tồn vẹn xác thực liệu tính bảo mật tài liệu dẫn đến tình trạng sai lệch giả mạo liệu xảy đưa vào khai thác sử dụng Vì vậy, việc nghiên cứu ứng dụng chữ ký số quản lý tài liệu lưu trữ quốc gia đáp ứng nhu cầu đòi hỏi cấp thiết quản lý khai thác tài liệu điện tử Xuất phát từ lý lựa chọn đề tài “Nghiên cứu chữ ký số ứng dụng quản lý tài liệu lưu trữ quốc gia.” - Ngoài phần mở đầu, kết luận danh mục tài liệu tham khảo luận văn kết cấu thành chương: Chƣơng 1: Tổng quan an toàn thông tin, khảo sát thực trạng tài liệu lưu trữ Trung tâm Lưu trữ quốc gia Trong chương trình bày tổng quan an tồn thơng tin, an tồn thơng tin tài liệu Lưu trữ Phần cuối chương trọng vào việc khảo sát thực trạng tài liệu lưu trữ Trung tâm Lưu trữ quốc gia Chƣơng 2: Nghiên cứu cở sở lý thuyết chữ ký số ứng dụng quản lý tài liệu lưu trữ quốc gia Trong chương trình bày kiến thức sở lý thuyết liên quan hệ mật mã, hạ tầng khố cơng khai, hàm Băm, chữ ký số, chữ ký số RSA Kết chương phần nghiên cứu hạ tầng khóa cơng khai chứng thư số Chƣơng 3: Xây dựng ứng dụng chữ ký số cho tài liệu lưu trữ quốc gia Trong chương đưa xây dựng ứng dụng ký số quản lý tài liệu lưu trữ quốc gia, cuối chương có số hình ảnh mã nguồn minh họa 46 3.3.4 Quá trình xác thực Xác thực chữ ký, xác thực chữ ký sử dụng lấy khóa cơng khai, từ xác định chữ ký hay sai, liệu băm trước thuật toán với lúc ký Khóa cơng khai để Giải mã File PDF ký Trich rút liệu Lấy chữ ký số File Hàm băm SHA-256 Giải mã RSA Bản tóm lược Khơng Bản tóm lược Có giống File liệu bị thay đổi File liệu toàn vẹn Bảng 3.2: Mơ hình xác thực Từ file PDF người dùng khóa cơng khai người gửi, sử dụng thuật tốn băm SHA thuật toán RSA để xác thực - Kiểm tra Bản tóm lược Bản tóm lược có giống hay khơng? Nếu giống file nhận vẹn tồn (khơng bị thay đổi hay tác động), không giống file bị thay đổi - 3.3.5 Yêu cầu ứng dụng xây dựng - Chức chuyển đổi toàn file tài liệu đinh dạng JPEG sang file tài liệu định dạng PDF thư mục chọn; Chức tự động ký số toàn tài liệu thư mục chọn; Có thể đưa hình ảnh chữ ký số vào trang PDF; Chức mã hóa liệu; Chức xác thực tài liệu Phần mềm có sử dụng thư viện mã nguồn mở ItextSharp PdfSharp 47 48 ỨNG DỤNG KÝ SỐ TÀI LIỆU LƢU TRỮ QUÔC GIA Chuyển đổi fie JPEG sang PDF Ký số PDF (Tùy chọn hiển thị ảnh ký số) Mã hóa liệu Xác thực tài liệu 3.3.5.1 Module tự động chuyển file tài liệu từ nhiều file JPG sang file PDF Module có chức tìm kiếm tất file JPEG thư mục chọn sau tự động tạo file PDF đưa file JPEG thư mục vào file PDF, Thư mục có tên thư mục cũ thêm từ “_PDF” lưu vào Các bước thực - Bước 1: Chọn thư mục file JPEG cần chuyển đổi - Bước 2: Chon thư mục lưu file PDF; - Bước 3: Bấm nút Chuyển sang PDF ứng dụng đọc tất file JPEG thư mục chuyển thành file pdf lưu vào thu mục có tên giơng thư mục cũ thêm từ “_PDF” vào đằng sau - 3.3.5.2 Module Module mã hóa ký số vào file PDF; Module có chức tìm kiếm tất file PDF thư mục chọn sau tự động tạo file PDF đưa file JPEG thư mục vào file PDF thư mục có tên thư mục cũ thêm từ “_Signed” lưu vào đó; - Bước 1: Chọn thư mục file PDF cần ký; - Bước 2: Chọn thư mục file PDF ký; - Bước 3: Chọn chứng thư số cần ký; - 49 Bước 4: Nếu muốn mã hóa liệu tích nút mã hóa( khơng mã hóa bỏ qua bước này); - Bước 5: Bấm nút ký số để ký số cho toàn tài liệu chọn; - 3.3.5.3 Module xác thực file PDF Module có chức kiểm tra tính vẹn tồn tà PDF Bước 1: chọn thư file PDF cần xác thực; - Bước 2: Ấn nút xác thực tài liệu; Ứng dụng có thơng báo kết cùa file liệu có ven tồn hay thay đổi - 3.3.6 Một số hình ảnh ứng dụng ký số Bảng 3.3: Giao diện ứng dụng 50 ChuChuyển đổi JPEG sang PDF ChuKý số PDF Mô tả thông tin tài liệu Bảng 3.4: Chức chuyển đổi file JPEG sang PDF ký số tài liệu Bảng 3.5: Giao diện chọn chứng thư số tùy chọn hình ảnh đại diện 51 Bảng 3.6: Lựa chọn hình ảnh đại diện M Bảng 3.7: Lựa chọn chứng thư để ký 52 Bảng 3.8: Tùy chọn mã hóa liệu 53 Kết luận Với mục tiêu nghiên cứu chữ ký số ứng dụng chữ ký số quản lý tài liệu quốc gia, xét mặt kết tổng quan, Luận văn đạt yêu cầu sau Nội dung đạt đƣợc - Nghiên cứu tổng quan bảo mật an tồn thơng tin, an tồn thơng tin tài liệu lưu trữ - Khảo sát thực trạng tài liệu lưu trữ câc trung tâm Lưu trữ quốc gia, đưa số liệu cụ thể tài liệu số lưu trữ Trung tâm Lưu trữ quốc gia - Nghiên cứu tổng quan chữ ký số, hàm Băm, hạ tầng khóa cơng khai - Xây dựng ứng dụng ký số cho tài liệu lưu trữ quôc gia Hạn chế - Ứng dụng ký số cho tài liệu định dạng JPEG, chưa ký số cho định dạng khác Hƣớng phát triển Trong thời gian tới ứng dụng bổ sung thêm tính ký file ghi âm, định dạng video khác Ngoài ứng dụng cần hoàn tiện thêm triển khai thực tế Trung tâm Lưu trữ quốc gia giúp đảm bảo tính tồn vẹn xác thực tài liệu tính bảo mật tài liệu./ 54 Tài liệu tham khảo Tiếng Việt Trịnh Nhật Tiến, Giáo trình An tồn liệu; TS Hồ Văn Hương, Ths Đào Thị Ngọc Thuỳ, Ứng dụng hệ thống kiểm soát truy nhập mạng theo mơ hình truy nhập lần, Tạp chí An tồn thơng tin, số (025) 2013 TS Hồ Văn Hương, KS Hoàng Chiến Thắng, Ký số xác thực tảng web, Tạp chí An tồn thơng tin, số (026) năm 2013; TS Hồ Văn Hương, KS Hoàng Chiến Thắng, KS Nguyễn Quốc Uy Giải pháp bảo mật xác thực thư điện tử, Tạp chí An tồn thơng tin số 04 (028), 2013; Vnisa, Báo cáo trạng ATTT Việt Nam 2010 Báo cáo tổng hợp tình hình lưu trữ sử dụng sở liệu tài liệu lưu trữ Trung tâm Lưu trữ quốc gia năm 2014 Cục văn thư Lưu trữ nhà nước Tiếng Anh William Stallings, Cryptography and Network Security Principles and Practices, Fourth Edition, November 16, 2005; Whitfield Diffie and Martin E Hellman, New Directions in Cryptography, 1976; Bart Van Rompay Analysis and Desigbn of Cryptographic Hash Functions, MAC Algorithms and Block Ciphers, Juni 2004; 10 Burt Kaliski,RSA Laboratories, The Mathematics of the RSA PublicKey Cryptosystem; Website 11 www.antoanthongtin.vn 12 www.en.wikipedia.org 13 www.vi.wikipedia.org 14 www.pki.openca.org 15 www.ckca.vn 55 Phụ lục: Mã nguồn chƣơng trình private void btnConvert_Click(object sender, EventArgs e) { if (txtSrcFdr.Text == "") { MessageBox.Show("Bạn chưa chọn thư mục return; } nguồn"); if (!Directory.Exists(txtSrcFdr.Text)) { MessageBox.Show("Thư mục nguồn bạn chọn không tồm tại"); return; } if (txtDestFdr.Text == "") { MessageBox.Show("Bạn chưa chọn thư mục đích"); return; } if (!Directory.Exists(txtDestFdr.Text)) { try { Directory.CreateDirectory(txtDestFdr.Text); } catch { MessageBox.Show("Không tạo thư mục file ký số"); return; } } success = false; bw.RunWorkerAsync(); toolStripProgressBar1.Style = ProgressBarStyle.Marquee; } private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { toolStripProgressBar1.Style = ProgressBarStyle.Blocks; toolStripProgressBar1.Value = 0; if (success) MessageBox.Show("Bạn chuyển đổi thành công: " + TongFileTao + "/" + TongFileTao + TongFileLoi, "Hoan thanh", MessageBoxButtons.OK, MessageBoxIcon.Information); } 56 PdfSharp.Pdf.PdfDocument AddPage(PdfSharp.Pdf.PdfDocument doc, XSize size, string strFileName, int intPage) { double Height = 0, Width = 0; XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[intPage]); XImage img = XImage.FromFile(strFileName); if (XUnit.FromPoint(size.Height) < XUnit.FromPoint(img.Height)) { Height = Math.Round((XUnit.FromPoint(size.Height) XUnit.FromPoint(img.Height)) / 2); } if (XUnit.FromPoint(img.Width) < XUnit.FromPoint(size.Width)) { Width = Math.Round((XUnit.FromPoint(size.Width) XUnit.FromPoint(img.Width)) / 2); } xgr.DrawImage(img, 20, 20); return doc; } void CreateAllFilePDF(string strSounrcetFolder, ref int TongFileTao, ref int TongFileLoi) { CreateFilePDF(strSounrcetFolder, ref TongFileTao, ref TongFileLoi); string[] subdirectoryEntries = Directory.GetDirectories(strSounrcetFolder); foreach (string subdirectory in subdirectoryEntries) { CreateAllFilePDF(subdirectory, ref TongFileTao, ref TongFileLoi); } } void CreateFilePDF(string strSounrcetFolder, ref int TongFileTao, ref int TongFileLoi) { try { XSize size = new XSize(XUnit.FromMillimeter(297), XUnit.FromMillimeter(210)); PdfSharp.Pdf.PdfDocument doc = new PdfSharp.Pdf.PdfDocument(); string strTargetFile = txtDestFdr.Text + strSounrcetFolder.Substring(txtSrcFdr.Text.Length, strSounrcetFolder.Length txtSrcFdr.Text.Length); strTargetFile += "\\" + new DirectoryInfo(strSounrcetFolder).Name + ".pdf"; string strTarrgetFolder = Path.GetDirectoryName(strTargetFile); if (CreateDir(strTarrgetFolder) != 1) { return; } 57 string[] filePaths = Directory.GetFiles(strSounrcetFolder, "*.jpg", SearchOption.TopDirectoryOnly); if (filePaths.Length >= 0) { for (int intThutu = 0; intThutu < filePaths.Length; intThutu++) { doc.Pages.Add(new PdfSharp.Pdf.PdfPage()); AddPage(doc, size, filePaths[intThutu], intThutu); } } doc.Save(strTargetFile); doc.Close(); success = true; TongFileTao += 1; } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information); TongFileLoi += 1; } } private void bw_DoWork(object sender, DoWorkEventArgs e) { try { TongFileTao = 0; TongFileLoi = 0; CreateAllFilePDF(txtSrcFdr.Text, ref TongFileTao, ref TongFileLoi); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } Class Ký số using System; using System.Collections.Generic; using System.Text; using using using using Org.BouncyCastle.Crypto; Org.BouncyCastle.X509; System.Collections; Org.BouncyCastle.Pkcs; 58 using using using using iTextSharp.text.pdf; System.IO; iTextSharp.text.xml.xmp; Org.BouncyCastle.Security; namespace TTTH.DAITD.KYSO { class PDFSigner { private string inputPDF = ""; private string outputPDF = ""; private Cert myCert; private MetaData metadata; public PDFSigner(string input, string output) { this.inputPDF = input; this.outputPDF = output; } public PDFSigner(string input, string output, Cert cert) { this.inputPDF = input; this.outputPDF = output; this.myCert = cert; } public PDFSigner(string input, string output, MetaData md) { this.inputPDF = input; this.outputPDF = output; this.metadata = md; } public PDFSigner(string input, string output, Cert cert, MetaData md) { this.inputPDF = input; this.outputPDF = output; this.myCert = cert; this.metadata = md; } public void Sign(PDFSignatureAP sigAP, bool encrypt, PDFEncryption Enc) { PdfReader reader = new PdfReader(this.inputPDF); FileStream fs = new FileStream(this.outputPDF, FileMode.Create, FileAccess.Write); PdfStamper st; if (this.myCert == null) { st = new PdfStamper(reader, fs); } 59 else { st = PdfStamper.CreateSignature(reader, fs, '\0', null, sigAP.Multi); } if (encrypt && Enc != null) Enc.Encrypt(st); //st.SetEncryption(PdfWriter.STRENGTH128BITS, "user", "owner", PdfWriter.ALLOW_COPY); st.MoreInfo = this.metadata.getMetaData(); st.XmpMetadata = this.metadata.getStreamedMetaData(); if (this.myCert == null) //No signature just write meta-data and quit { st.Close(); return; } PdfSignatureAppearance sap = st.SignatureAppearance; sap.SetCrypto(this.myCert.Akp, this.myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED); sap.Reason = sigAP.SigReason; sap.Contact = sigAP.SigContact; sap.Location = sigAP.SigLocation; if (sigAP.Visible) { iTextSharp.text.Rectangle rect = st.Reader.GetPageSize(sigAP.Page); sap.Image = sigAP.RawData == null ? null : iTextSharp.text.Image.GetInstance(sigAP.RawData); sap.Layer2Text = sigAP.CustomText; sap.SetVisibleSignature(new iTextSharp.text.Rectangle(sigAP.SigX, sigAP.SigY, sigAP.SigX + sigAP.SigW, sigAP.SigY + sigAP.SigH), sigAP.Page, null); } PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, new PdfName("adbe.pkcs7.detached")); dic.Reason = sap.Reason; dic.Location = sap.Location; dic.Contact = sap.Contact; dic.Date = new PdfDate(sap.SignDate); sap.CryptoDictionary = dic; int contentEstimated = 15000; // Preallocate excluded byte-range for the signature content (hex encoded) Dictionary exc = new Dictionary(); exc[PdfName.CONTENTS] = contentEstimated * + 2; sap.PreClose(exc); PdfPKCS7 sgn = new PdfPKCS7(this.myCert.Akp, this.myCert.Chain, null, 60 "SHA-256", false); IDigest messageDigest = DigestUtilities.GetDigest("SHA-256"); Stream data = sap.RangeStream; byte[] buf = new byte[8192]; int n; while ((n = data.Read(buf, 0, buf.Length)) > 0) { messageDigest.BlockUpdate(buf, 0, n); } byte[] hash = new byte[messageDigest.GetDigestSize()]; messageDigest.DoFinal(hash, 0); DateTime cal = DateTime.Now; byte[] ocsp = null; if (this.myCert.Chain.Length >= 2) { String url = PdfPKCS7.GetOCSPURL(this.myCert.Chain[0]); if (url != null && url.Length > 0) ocsp = new OcspClientBouncyCastle(this.myCert.Chain[0], this.myCert.Chain[1], url).GetEncoded(); } byte[] sh = sgn.GetAuthenticatedAttributeBytes(hash, cal, ocsp); sgn.Update(sh, 0, sh.Length); byte[] paddedSig = new byte[contentEstimated]; if (this.myCert.Tsc != null) { byte[] encodedSigTsa = sgn.GetEncodedPKCS7(hash, cal, this.myCert.Tsc, ocsp); System.Array.Copy(encodedSigTsa, 0, paddedSig, 0, encodedSigTsa.Length); if (contentEstimated + < encodedSigTsa.Length) throw new Exception("Không đủ không gian để ký"); } else { byte[] encodedSig = sgn.GetEncodedPKCS7(hash, cal); System.Array.Copy(encodedSig, 0, paddedSig, 0, encodedSig.Length); if (contentEstimated + < encodedSig.Length) throw new Exception("Không đủ không gian để ký"); } PdfDictionary dic2 = new PdfDictionary(); dic2.Put(PdfName.CONTENTS, new PdfString(paddedSig).SetHexWriting(true)); sap.Close(dic2); } } }