Professional Documents
Culture Documents
HÀ NỘI, 2016
Liên hệ: huyhung1994@gmail.com
MỤC LỤC
1
Liên hệ: huyhung1994@gmail.com
2
Liên hệ: huyhung1994@gmail.com
Để tìm hiểu về vấn đề bảo mật cho tài liệu sử dụng chứng thư số, nhóm chúng em
đi tìm hiểu đề tài “ Nghiên cứu xây dựng ứng dụng mã hóa, giải mã tài liệu bất kì sử
dụng chứng thư số”
Trong bài tập lớn này chúng em xin trình bày khái quát về chứng thư số và một số
cách thức hoạt động cũng như xây dựng ứng dụng sử dụng chứng thư số.
CHƯƠNG I: TỔNG QUAN VỀ CHỨNG THƯ SỐ : Tìm hiểu tổng quan về chứng
thư số, cách thức hoạt động, nhiệm vụ của nhà cung cấp chứng thư số.
CHƯƠNG II: ỨNG DỤNG CỦA CHỨNG THƯ SỐ : Tìm hiểu cách thức đăng kí
chứng thư số và các ứng dụng của nó.
CHƯƠNG III: XÂY DỰNG ỨNG DỤNG MÃ HÓA GIẢI MÃ TÀI LIỆU BẤT
KÌ SỬ DỤNG CHỨNG THƯ SỐ: Xây dựng ứng dụng sử dụng hệ mật RSA để mã
hóa và giải mã.
Trong quá trình tìm hiểu, do kiến thức còn hạn chế, kiến thức thực tế chưa có nhiều,
nên chúng em không tránh khỏi những thiếu sót sai lầm. Rất mong được sự góp ý của
thầy cô và các bạn. Chúng em xin cám ơn thầy Phạm Xuân Khang đã nhiệt tình hướng
dẫn chúng em hoàn thành bài báo cáo này.
3
Liên hệ: huyhung1994@gmail.com
Để lấy được bằng lái xe, bạn cần phải đăng ký với Phòng cảnh sát giao thông. Họ
sẽ cấp cho bạn bằng lái xe sau khi đã xác định các thông tin về bạn như: có khả năng lái
xe, họ và tên, địa chỉ, và những thông tin cần thiết khác. Để lấy được Chứng thư số bạn
cũng cần phải thực hiện các công việc đăng ký tương tự như vậy. Nơi có thể chứng
nhận những thông tin của bạn là chính xác được gọi là Nhà cấp Chứng thư số
(Certificate Authority viết tắt là CA), một tổ chức có thẩm quyền xác nhận chỉ danh và
cấp các Chứng thư số. Họ có thể là một thành phần thứ ba đứng độc lập hoặc các tổ
chức tự vận hành phần mềm cấp Chứng thư số của mình. Các phương pháp để xác định
chỉ danh phụ thuộc vào các chính sách mà CA đặt ra. Chính sách lập ra phải đảm bảo
việc cấp Chứng thư số phải đúng đắn, ai được cấp và mục đích dùng vào việc gì. Thông
thường, trước khi cấp một Chứng thư số, CA sẽ công bố các thủ tục cần phải thực hiện
cho các loại Chứng thư số.
Trong Chứng thư số chứa một khoá công khai được gắn với một tên duy nhất của
một đối tượng (như tên của một nhân viên hoặc server). Chứng thư số giúp ngăn chặn
việc sử dụng khoá công khai cho việc giả mạo. Chỉ có khoá công khai được chứng thực
bởi Chứng thư số mới làm việc với khoá riêng (private key) tương ứng được sở hữu bởi
đối tượng mà có chỉ danh đã được chứng thực nằm trong Chứng thư số.
Ngoài khoá công khai, một Chứng thư số còn chứa thêm tên của đối tượng mà nó
nhận diện, hạn dùng, tên của CA cấp Chứng thư số đó, mã số thứ tự, và những thông tin
khác. Điều quan trọng nhất là một Chứng thư số luôn luôn chứa chữ ký số của CA đã
cấp Chứng thư số đó. Nó cho phép Chứng thư số như đã được đóng dấu để cho người
sử dụng biết và tin cậy vào CA.
Chứng thư số là một tệp tin điện tử được sử dụng để nhận diện một cá nhân, một
máy chủ, một công ty, hoặc một vài đối tượng khác và gắn chỉ danh của đối tượng đó
với một khoá công khai (public key)
4
Liên hệ: huyhung1994@gmail.com
- Nghe trộm (Eavesdropping). Thông tin vẫn không hề bị thay đổi, nhưng sự bí
mật của nó thì không còn. Ví dụ, một ai đó có thể biết được số thẻ tín dụng, các thông
tin cần bảo mật của bạn.
- Giả mạo (Tampering). Các thông tin trong khi truyền đi bị thay đổi hoặc thay
thế trước khi đến người nhận. Ví dụ, một ai đó có thể sửa đổi một đơn đặt hàng hoặc
thay đổi lý lịch của một cá nhân.
- Mạo danh (Impersonation). Thông tin được gửi tới một cá nhân mạo nhận là
người nhận hợp pháp. Có hai hình thức mạo danh sau:
+ Bắt chước (Spoofing). Một cá nhân có thể giả vờ như một người khác. Ví dụ,
dùng địa chỉ mail của một người khác hoặc giả mạo một tên miền của một trang
web.
+ Xuyên tạc (Misrepresentation). Một cá nhân hay một tổ chức có thể đưa ra
những thông tin không đúng sự thật về họ. Ví dụ, có một trang web mạo nhận
chuyên về kinh doanh trang thiết bị nội thất, nhưng thực tế nó là một trang chuyên
ăn cắp mã thẻ tín dụng và không bao giờ gửi hàng cho khách.
Bình thường, mọi người vẫn sử dụng mạng Internet để có thể liên lạc với nhau,
nhưng thông tin phải đi qua một loạt các máy trung gian. Trong số đó có một số
người cần bảo mật các thông tin cá nhân và kinh doanh của họ. May mắn thay, có
một vài chuẩn chung hiện nay được biết như hệ mã khoá công khai (public key
cryptography) có thể giải quyết được vấn đề này. Hệ mã khoá công khai với Chứng
thư số và các công nghệ liên quan có thể thực hiện các nhiệm vụ sau:
- Mã hoá và giải mã: cho phép hai đối tác giao thiệp với nhau có thể che giấu 6
thông tin mà họ gửi cho nhau. Người gửi mã hoá các thông tin trước khi gửi chúng
5
Liên hệ: huyhung1994@gmail.com
đi, người nhận sẽ giải mã trước khi đọc. Trong khi truyền, các thông tin sẽ không bị
lộ.
- Chống lại sự giả mạo: cho phép người nhận có thể kiểm tra thông tin có bị
thay đổi hay không. Bất kỳ một sự thay đổi hay thay thế nội dụng của thông điệp gốc
đều sẽ bị phát hiện.
- Xác thực: cho phép người nhận có thể xác định chỉ danh của người gửi.
- Không thể chối cãi nguồn gốc: ngăn chặn người gửi chối cãi nguồn gốc tài
liệu mình đã gửi.
Chứng thư số được dựa trên thuật toán mã khoá công khai mà mô hình là việc
dùng cặp khoá public key và private key.
Private key được sở hữu riêng bởi người có chứng thư số và nó được dùng để tạo
nên chữ ký điện tử. Khoá này luôn luôn phải giữ bí mật và chỉ thuộc về người sở hữu
chứng thư số đó.
Public key thì được công khai, nó được dùng để chứng thực một chữ ký điện tử.
Sự chứng thực một chữ ký điện tử tức là bạn muốn biết đích danh là ai đã ký vào thông
tin mà bạn nhận được.
Cặp khoá public key và private key vốn không gắn với bất kỳ một chỉ danh nào,
nó đơn giản chỉ là một cặp khoá mà giá trị của nó là các con số. Chứng thư số là sự kết
hợp của một public key với một chỉ danh.
Căn cứ vào Chứng thư số của bạn hệ thống có thể kiểm tra xem bạn có đủ thẩm
quyền khi truy cập vào hệ thống hay không, tránh khỏi sự mạo danh bạn để truy cập các
hệ thống cũng như trao đổi thông tin. Với việc mã hoá thì chứng thư số đã cung cấp
cho bạn một giải pháp thực sự đảm bảo giúp bạn hoàn toàn yên tâm khi tham gia trao
đổi thông tin và giao dịch trên Internet.
6
Liên hệ: huyhung1994@gmail.com
gọi là CA, có nhiệm vụ cấp phép chứng thực số. CA sẽ kiểm tra tính xác thực của tất cả
chứng thực. Chứng thực sẽ không hợp lệ nếu như CA không chứng nhận nó là hợp lệ.
Để có một chứng thực số, đầu tiên người dùng phải tạo một cặp khóa công khai/riêng
tư, sau đó khóa công khai sẽ được đệ trình lên CA cùng với thông điệp. Một chứng thực
chỉ được tạo ra sau khi CA kiểm tra tất cả các chi tiết và trả về kết quả nguyên vẹn. Tiếp
theo, người dùng có thể cài đặt chứng thực trên máy tính của mình. Để có thể nhận biết
chữ ký số là thật, một số tùy chọn để kiểm tra tính xác thực là thông qua trình duyệt
web, email, máy chủ web hay các ứng dụng khác. Một số CA phổ biến là Verisign,
CommerceNet, COMODO, GlobalSign…
Trong trường hợp, các nhà phát triển muốn gửi các ứng dụng di động đến
Windows Marketplace, lúc này phần mềm phải được thông qua tiến trình chứng thư số.
Các nhà phát triển buộc ký số trên từng nội dung cập nhật trước khi các ứng dụng có
mặt trên danh mục kho ứng dụng. Sau đó, Microsoft sẽ giám sát các ứng dụng và có thể
gỡ những chứng thực số liên kết với malware nếu như phát hiện ra vấn đề trong lúc dò.
7
Liên hệ: huyhung1994@gmail.com
8
Liên hệ: huyhung1994@gmail.com
1. Dùng giải thuật băm để thay đổi thông điệp cần truyền đi. Kết quả ta được một
bản tóm lược.
2. Sử dụng khóa bí mật của người gửi để mã hóa bản tóm lược thu được ở bước 1.
Kết quả được gọi là chữ ký số.
3. Ghép chữ ký số vào văn bản gốc, mọi thay đổi trên văn bản gốc hoặc chữ ký sẽ
bị phát hiện trong giai đoạn kiểm tra. Ngoài ra, việc ký số này đảm bảo người
nhận tin tưởng văn bản này xuất phát từ người gửi chứ không phải là ai khác.
Chữ ký điện tử là mô hình đảm bảo an toàn dữ liệu khi truyền trên mạng và được
sử dụng để tạo chứng nhận điện tử trong các giao dịch điện tử qua mạng Internet.
Ví dụ A gửi đến tổ chức Certificate Authority yêu cầu cấp chứng nhận điện tử kèm
theo khóa công khai của họ. Tổ chức CA sẽ “ký nhận” vào đó và cấp digital certificate
9
Liên hệ: huyhung1994@gmail.com
cho A. Khách hàng này sẽ thông báo certificate của mình trên mạng. Giả sử có B muốn
gửi cho A một message thì công việc đầu tiên B sẽ lấy certificate của A và kiểm tra tính
hợp lệ của certificate. Nếu hợp lệ, B sẽ lấy public key trong digital certificate để mã hóa
dữ liệu và gửi cho A.
Giả sử Bob, Alice đều có chứng thư số của riêng mình. Khi Bob muốn gửi cho
Alice một thông điệp bí mật sử dụng mã hóa công khai. Bob sẽ lên kho lưu trữ chứng
thư số, lấy public key của Alice xuống, và mã hóa dữ liệu với public key của Alice sau
đó gửi thông điệp đã mã hóa cho Alice. Alice nhận được thông điệp, sẽ dùng private
key của mình để giải mã. Ngược lại nếu Alice muốn gửi thông điệp cho Bob thì Alice
phải mã hóa thông điệp bằng public key của Bob.
Nếu ai đó thực hiện tấn công chặn bắt, có được tệp tin mã hóa thì cũng không có
khả năng giải mã được tệp tin này, bởi vì chỉ duy nhất private key của Alice mới có thể
thực hiện giải mã.
10
Liên hệ: huyhung1994@gmail.com
Mô hình mã hóa
Public key
Hình 3. 1 Mô hình mã hóa dữ liệu
Mô hình giải mã
DBase64
M” M’ DRSA M
Private key
Trong đó :
11
Liên hệ: huyhung1994@gmail.com
secureUtil.invokeKeys();
PublicKey publicKey = secureUtil.getPublicKey();
PrivateKey privateKey = secureUtil.getPrivateKey();
String publicString =
secureUtil.getPublicKeyString(publicKey);
String privateString =
secureUtil.getPrivateKeyString(privateKey);
publicProp.put("key", publicString);
publicProp.store(pubOut, "Public Key Info");
privateProp.put("key", privateString);
privateProp.store(priOut, "Private Key Info");
} catch (Exception e) {
e.printStackTrace();
}
}
12
Liên hệ: huyhung1994@gmail.com
b. Mã hóa dữ liệu
public String getEncypted(byte[] datas, PublicKey key)
String encryptedData;
try {
Cipher cipher =
Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
int textBytesChunkLen = 100;
int encryptedChunkNum = (datas.length - 1) /
textBytesChunkLen + 1;
// RSA returns 128 bytes as output for 100 text bytes
int encryptedBytesChunkLen = 128;
int encryptedBytesLen = encryptedChunkNum *
encryptedBytesChunkLen;
// Define the Output array.
byte[] encryptedBytes = new byte[encryptedBytesLen];
int textBytesChunkIndex = 0;
int encryptedBytesChunkIndex = 0;
13
Liên hệ: huyhung1994@gmail.com
c. Giải mã dữ liệu
int decryptedIndex = 0;
int encryptedIndex = 0;
for (int i = 0; i < encryptedChunkNum; i++) {
if (i < encryptedChunkNum - 1) {
decryptedIndex = decryptedIndex
+ cipher.doFinal(datas, encryptedIndex,
encryptedByteChunkLen, decryptedBytes,
decryptedIndex);
encryptedIndex = encryptedIndex +
encryptedByteChunkLen;
} else {
decryptedIndex = decryptedIndex
+ cipher.doFinal(datas,
encryptedIndex, datas.length -
encryptedIndex, decryptedBytes,
decryptedIndex);
}
}
return decryptedBytes;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(),
"Decrypt Error", 0);
e.printStackTrace();
}
return result;
14
Liên hệ: huyhung1994@gmail.com
15
Liên hệ: huyhung1994@gmail.com
16
Liên hệ: huyhung1994@gmail.com
17