PDF được viết tắt từ tên tiếng anh Portable Docunment Format là một định dạng file văn bản phổ biến của hãng Adobe Systems. Cũng giống như các file văn bản phổ biến như file Word, PDF hỗ trợ chứa các văn bản text, hình ảnh ... Với tính năng bảo mật khá cao nên PDF hiện đang một trong những file văn bản được sử dụng khá nhiều để lưu trữ các dữ liệu quan trọng trên thế giới. Một số đặc điểm của file PDF
- File PDF thường có kích thước khá nhỏ nên dễ dàng chia sẻ qua internet. - File PDF được hỗ trợ mã hóa cho nên tính bảo mật rất cao.
- PDF được xem và trình bày trên bất kỳ thiết bị bao gồm: máy tính, laptop, các thiết bị di động, smartphone ...
- Tạo file và chuyển đổi sang các file văn bản khác dễ dàng. - Hỗ trợ nhúng chữ ký số trong file.
Hiện nay trên thế giới cũng như Việt Nam chủ yếu dúng ký số trên file PDF
Kết luận chƣơng 2
Trong chương đã trình bày các kiến thức cơ sở về lý thuyết liên quan như các hệ mật mã, hạ tầng khoá công khai, hàm Băm, chữ ký số, chữ ký số RSA. Phần giữa và kết chương sẽ đi sâu tìm hiểu, nghiên cứu ứng dụng chữ ký số
RSA hạ tầng khóa công khai. Kết chương là giới thiệu file định dạng PDF và chữ ký số.
3. Chƣơng 3: Xây dựng ứng dụng ký số cho tài liệu lƣu trữ quốc gia 3.1. Xây dựng yêu cầu của ứng dụng chữ ký số cho tài liệu lƣu trữ quốc
gia
3.1.1. Xây dựng bài toán chuyển tài liệu từ file định dạng JPEG sang định dạng PDF
Tài liệu tại các Trung tâm Lưu trữ quốc gia chủ yếu trữ được lưu trữ dưới dạng file ảnh kiểu JPEG, đây là đinh dạng phổ biến khi lưu tài liệu ảnh trên thế giới, nguyên do trước đây các máy quét tài liệu hầu hết không hỗ trợ file định dạng PDF nên khi số hóa tài liệu các Trung tâm Lưu trữ quôc gia đều lưu file dưới định dạng PDF. Tuy nhiên đối với tài liệu lưu trữ khi quản lý và khai thác sử dụng tài liệu ảnh JPEG có rất nhiều bât lợi hơn so với file định dạng PDF
- Trung tâm Lưu trữ quốc gia phải quản lý số lượng lớn file tài liệu vì mỗi file ảnh JPEG chỉ chứa 01 trang tài liệu, mỗi hồ sơ tài liệu có rất nhiều file ảnh trong khi đó tài liệu định dạng PDF có thề chứa rất nhiều trang tài liệu bên trong giúp việc quản lý file đơn giản và dễ dàng hơn. Hiện nay các Trung tâm lưu trữ quôc gia có trên 12 triệu file tài liệu JPEG, nếu chuyển về định dạng PDF số lượng file tài liệu còn dưới 1 triệu file giúp cho việc quản lý tài liệu dễ dàng hơn nhiều.
- Đối với độc giả khi khai thác file tài liệu dạng JPEG có những hồ sơ có trên 500 trang tài liệu, việc đọc toàn bộ 500 file làm tốn rất nhiều thời gian, công sức của độc giả, trong khi đó nếu chuyển sang định dạng PDF khi đó chỉ có 01 file tài liệu giúp đọc giả tra cứu dễ dàng hơn.
- File tài liệu dạng JPEG không hỗ trợ trong việc nhúng chữ ký số vào trong file, muốn ký số file thì phải lưu thông tin sang một file mới, gây bất tiện cho độc giả khai thác tài liệu cũng như nhà quản lý, Trong khi đó file định dạng PDF có hỗ trợ nhúng chữ ký số vào trong file giúp cho nhà quản lý và độc giả có thể kiểm tra tính xác thực của tài liệu mọi lúc, mọi nơi.
- Hiện nay Cục văn thư và Lưu trữ nhà nước đang chuẩn bị hội thảo xin ý kiến chuyên gia đầu ngành trong lĩnh vực công nghệ thông tin cũng như trong lĩnh vực lưu trữ trong việc lưu trữ tài liệu số hóa theo định dạng PDF thay cho định dạng JPG.
Với những lý do trên tác giả đã đề xuất giải chuyển đổi toàn bộ tài liệu JPEG sang định dạng PDF và tiếp sau đó ký số trên file tài liệu định dạng PDF đó.
3.2. Lựa chọn hàm băm đại diện và chữ ký số cho tài liệu lƣu trữ
Sau khi nghiên cứu Thông tư số 06/2015/TT-BTTTT ngày 23 tháng 3 năm 2015 của Bộ Thông tin Truyền thông ngày Quy định Danh mục tiêu chuẩn bắt buộc áp dụng về chữ ký số và dịch vụ chứng thực chữ ký số. Do vậy tác giả lựa chọn thuật toán ký số RSA và hàm băm SHA-256 để ký số cho tài liệu lưu trữ tại các Trung tâm Lưu trữ quốc gia.
3.3. Xây dựng ứng dụng và ký số tài liệu
3.3.1. Quá trình ký số file tài liệu
Trước tiên ứng dụng sẽ chuyển file định dạng JPEG sang file PDF sau đó sẽ sử dụng thuật toán hàm băm SHA-256 để băm dữ liệu ra thành 256 bit (gọi là bản tóm lược). Sau đó sử dụng thuật toán RSA và khóa bí mật của người gửi để ký số lên file dữ liệu thành file chữ ký sau đó lưu thông tin vào file PDF.
Hình 3.1: Mô hình ký số tài liệu lưu trữ 3.3.2. Quá trình mã hóa
Người dùng không muốn để lộ thông tin trong file tài liệu nên mã hóa file tài liệu. Từ file JPEG chuyển đổi sang file PDF sau đó, sử dụng thuật toán mã hóa RSA và lấy khóa công khai để mã hóa tạo ra file dữ liệu mã hóa.
File định dạng JPEG Hàm Băm SHA-256 Bản tóm lược Ký số RSA Khóa bí mật(lấy từ USB Token) Lưu chữ ký vào file PDF Chuyển đổi sang
Bảng 3.1: Mô hình mã hóa file
Sau khi mã hóa người dùng đã có 1 file PDF đã được mã hóa 3.3.3. Quá trình giải mã:
Sau khi người nhận thực hiện việc nhận các tệp dữ liệu. Lúc này, sẽ có quá trình kiểm tra: kiểm tra file có đúng người nhận hay không? kiểm tra tính toàn vẹn của dữ liệu? Để thực hiện được các quá trình kiểm tra này phải thực hiện các công việc sau:
Bên nhận phải giải mã file dữ liệu mã hóa.
Hình 3.3: Mô hình giải mã
- Sử dụng thuật toán RSA để giải mã file dữ liệu bằng khóa bí mật; - Nếu giải mã không thành công có nghĩa file đó đã bị thay đổi dữ liệu. - Nếu giải mã thành công khi đó người dùng có nghĩa là file đó vẹn toàn
dữ liệu.
File PDF
Mã hóa RSA
File PDF đã được mã hóa Lấy khóa công khai
để mã hóa File JPEG File PDF đã được mã hóa Giải mã RSA Khóa bí mật Để giải mã File DPF không mã hóa
3.3.4. Quá trình xác thực
Xác thực chữ ký, khi xác thực chữ ký sẽ sử dụng lấy khóa công khai, từ đó xác định chữ ký đúng hay sai, dữ liệu cũng được băm trước bằng cùng một thuật toán với lúc ký.
Bảng 3.2: Mô hình xác thực
- Từ file PDF người dùng khóa công khai của người gửi, sử dụng thuật toán băm SHA 1 và thuật toán RSA để xác thực.
- Kiểm tra Bản tóm lược 1 và Bản tóm lược 2 có giống nhau hay không? Nếu giống nhau thì file nhận được là vẹn toàn (không bị thay đổi hay tác động), nếu không giống nhau là file đã bị thay đổi.
3.3.5. Yêu cầu của ứng dụng xây dựng
- Chức năng chuyển đổi toàn bộ file tài liệu đinh dạng JPEG sang file tài liệu định dạng PDF trong thư mục đã được chọn;
- Chức năng tự động ký số toàn bộ tài liệu trong thư mục đã được chọn;
- Có thể đưa hình ảnh chữ ký số vào trang PDF;
- Chức năng mã hóa dữ liệu;
- Chức năng xác thực tài liệu.
Phần mềm này có sử dụng 2 thư viện mã nguồn mở ItextSharp và
PdfSharp
Không Bản tóm lược 1
Bản tóm lược 1
File dữ liệu toàn vẹn File dữ liệu bị thay đổi Có giống File PDF đã ký Giải mã RSA Khóa công khai
để Giải mã
Lấy chữ ký số trong File
Trich rút dữ 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 này có chức năng tìm kiếm tất cả các file JPEG trong thư mục đã chọn sau đó sẽ tự động tạo một file PDF và đưa file JPEG trong cùng thư mục vào file PDF, Thư mục mới có tên của thư mục cũ và thêm từ “_PDF” và lưu vào đó. Các bước thực hiện
- 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 khi đó ứng dụng sẽ đọc tất cả các file JPEG trong cùng thư mục và chuyển thành 1 file pdf và lưu vào thu mục mới có tên giông thư mục cũ và thêm từ “_PDF” vào đằng sau.
3.3.5.2. Module Module mã hóa và ký số vào file PDF;
- Module này có chức năng tìm kiếm tất cả các file PDF trong thư mục đã chọn sau đó sẽ tự động tạo một file PDF và đưa file JPEG trong cùng thư mục vào file PDF. thư mục mới có tên của thư mục cũ và thêm từ “_Signed” và 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ý;
Ứ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 dữ liệu
- Bước 4: Nếu muốn mã hóa dữ liệu tích và nút mã hóa( nếu 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 bộ tài liệu đã được chọn; 3.3.5.3. Module xác thực file PDF
Module này có chức năng kiểm tra tính vẹn toàn của 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 quả cùa file dữ liệu đó có ven toàn hay đã thay đổi.
3.3.6. Một số hình ảnh của ứng dụng ký số
Bảng 3.4: Chức năng chuyển đổi file JPEG sang PDF và ký số tài liệu
Bảng 3.5: Giao diện chọn chứng thư số và tùy chọn hình ảnh đại diện
ChuChuyển đổi JPEG sang PDF
ChuKý số PDF
Bảng 3.6: Lựa chọn hình ảnh đại diện
M
4. Kết luận
Với mục tiêu là nghiên cứu chữ ký số và ứng dụng chữ ký số trong quản lý tài liệu quốc gia, xét về mặt kết quả tổng quan, Luận văn đã đạt được các yêu cầu sau
Nội dung đạt đƣợc
- Nghiên cứu tổng quan về bảo mật an toàn thông tin, an toàn thông tin trong tài liệu lưu trữ.
- Khảo sát thực trạng tài liệu đang được lưu trữ tại câc trung tâm Lưu trữ quốc gia, đưa ra được số liệu cụ thể tài liệu số đang được lưu trữ tại các Trung tâm Lưu trữ quốc gia.
- Nghiên cứu tổng quan về 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 mới chỉ ký số cho tài liệu định dạng JPEG, chưa ký số cho các định dạng khác
Hƣớng phát triển
Trong thời gian tới ứng dụng sẽ bổ sung thêm tính năng ký các file ghi âm, và các định dạng video khác. Ngoài ra ứng dụng cũng cần hoàn tiện thêm khi triển khai thực tế tại các Trung tâm Lưu trữ quốc gia giúp đảm bảo tính toàn vẹn và xác thực của tài liệu cũng như tính bảo mật của tài liệu./.
5. Tài liệu tham khảo Tiếng Việt Tiếng Việt
1. Trịnh Nhật Tiến, Giáo trình An toàn dữ liệu;
2. 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 một lần, Tạp chí An toàn thông tin, số 1 (025) 2013.
3. TS. Hồ Văn Hương, KS. Hoàng Chiến Thắng, Ký số và xác thực trên nền tảng web, Tạp chí An toàn thông tin, số 2 (026) năm 2013;
4. 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 và xác thực thư điện tử, Tạp chí An toàn thông tin số 04 (028), 2013;
5. Vnisa, Báo cáo hiện trạng ATTT tại Việt Nam 2010.
6. Báo cáo tổng hợp tình hình lưu trữ và sử dụng cơ sở dữ liệu tài liệu lưu trữ tại các Trung tâm Lưu trữ quốc gia năm 2014 của Cục văn thư và Lưu trữ nhà nước.
Tiếng Anh
7. William Stallings, Cryptography and Network Security Principles and Practices, Fourth Edition, November 16, 2005;
8. Whitfield Diffie and Martin E. Hellman, New Directions in Cryptography, 1976;
9. 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 Public- Key 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
6. 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 nguồn"); return;
}
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 được 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);
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)
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 Org.BouncyCastle.Crypto; using Org.BouncyCastle.X509; using System.Collections; using Org.BouncyCastle.Pkcs;
using iTextSharp.text.pdf; using System.IO; using iTextSharp.text.xml.xmp; using 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); }
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);