Tải bản đầy đủ (.docx) (22 trang)

Xây dựng demo chứng thực điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (342.11 KB, 22 trang )

MỤC LỤC
1
DANH MỤC HÌNH VẼ
LỜI MỞ ĐẦU
Ngày nay trên thế giới công nghệ thông tin đã trở nên phổ biến và hầu như
mọi lĩnh vực đều có sự góp mặt của nền công nghệ mới này. Bên cạnh những
thông tin có giá trị thông thường thì còn có những thông tin quan trọng, đòi hỏi
tính bảo vệ cao. Chính vì thế, chứng thư số là lựa chọn khá phù hợp cho việc
bảo vệ cũng như xác thực tính tin cậy của thông tin.
2
Để 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ố.
Báo cáo gồm 3 chương :
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: SỬ DỤNG CHỮ KÝ SỐ KÝ LÊN TÀI LIỆU : Tìm hiểu cách
thức đăng kí chứng thư số và mô hình chữ kí số khóa công khai.
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, DES để mã hóa chuỗi mật khẩu và giải mã file.
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 cô Nguyễn Thị
Hồng Hà đã nhiệt tình hướng dẫn chúng em hoàn thành bài báo cáo này. Chúng
em xin chân thành cám ơn!
3
CHƯƠNG 1: TỔNG QUAN VỀ CHỨNG THƯ SỐ
1.1. Chứng thư số


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). Giống như bằng lái xe,
hộ chiếu, chứng minh thư hay những giấy tờ nhận diện cá nhân thông thường
khác, Chứng thư số cung cấp bằng chứng cho sự nhận diện của một đối tượng.
Hệ mã khoá công khai sử dụng Chứng thư số để giải quyết vấn đề mạo danh.
Để 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ố.
4
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)
Thành phần chính gồm có:
- Serial Number -> Mã số duy nhất được cấp bởi CA
- Thông tin về người sở hữu
- Khóa công khai
- Thời hạn sử dụng
- Chữ ký của CA
- Các thông tin mở rộng khác
Hình 1: Một văn bản được kí số.
5
1.2. Vì sao phải sử dụng chứng thư số?
Việc kết nối qua mạng Internet hiện nay chủ yếu sử dụng giao thức TCP/IP.
TCP/IP cho phép các thông tin được gửi từ một máy tính này tới một máy tính
khác thông qua một loạt các máy trung gian hoặc các mạng riêng biệt trước khi
nó có thể đi tới được đích. Tuy nhiên, chính vì tính linh hoạt này của giao thức
TCP/IP đã tạo cơ hội cho "bên thứ ba" có thể thực hiện các hành động bất hợp
pháp, cụ thể là:
- 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 đ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.
1.3. Chứng thư số làm việc như thế nào?
Một Chứng thư số gắn một public key với một cá nhân hay một tổ chức, sự kết
hợp này là duy nhất và tính xác thực của nó được đảm bảo bởi nhà cung cấp
Chứng thư số.
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ố
7
đã 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.
1.4. Nhiệm vụ của các cơ quan chứng thực
Nhiệm vụ của các cơ quan chứng thực (Certification Authority - CA) là bảo đảm
tính toàn vẹn của chữ ký số do tổ chức hợp pháp cấp. Trong suốt tiến trình đăng
ký CTS, CA sẽ tập hợp thông tin về nhà xuất bản ứng dụng di động để kiểm tra
tính xác thực. Tiến trình xác thực có thể mất vài giờ hay vài ngày phụ thuộc vào
thông tin cung cấp và tùy vào mức độ kiểm tra thông tin ở mức khó hay dễ. Các
hãng thứ 3 còn được 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ò.
8
Hình 2: mô hình CA của VNPT-CA
9
CHƯƠNG 2: SỬ DỤNG CHỮ KÝ SỐ KÝ LÊN TÀI LIỆU
2.1. Đăng ký chứng thư số
Để có thể kí được lên văn bản một chữ ký hợp lệ ta cần phải có chữ kí số. Hầu
hết là ta không thể tự sinh ra chữ kí cho mình nên phải có một cơ quan tin tưởng
chịu trách nhiệm cấp cho ta chữ kí số.
Các bước để xin CA cấp chứng thư số đơn giản
(1) User gửi thông tin về bản thân RA (Registration Authority) để đăng ký
(2) RA gửi thông tin về user và ký yêu cầu được chấp thuận đến trung tâm
CA
(3) CA tạo chứng thư trên khóa công khai, ký bằng khóa bí mật của CA và
cập nhật chứng thư trên thư mục LDAP
(4) CA gửi chứng thư trở lại RA
(5) RA cấp chứng thư cho người sử dụng
Hình 3: Thủ tục cấp chứng thư số
10
2.2. Mô hình chữ kí số khóa công khai
Chữ ký số khóa công khai dựa trên nền tảng mật mã hóa khóa công khai. Để có
thể trao đổi thông tin trong môi trường này, mỗi người sử dụng có một cặp khóa:
một công khai và một bí mật. Khóa công khai được công bố rộng rãi còn khóa bí
mật phải được giữ kín và không thể tìm được khóa bí mật nếu chỉ biết khóa công
khai.
Hình 4: Sơ đồ tạo và kiểm tra chữ ký số sử dụng khóa công khai
Toàn bộ quá trình gồm 3 thuật toán:

- Thuật toán tạo khóa
- Thuật toán tạo chữ ký số
- Thuật toán kiểm tra chữ ký số
Xét ví dụ sau: Bob muốn gửi thông tin cho Alice và muốn Alice biết thông
tin đó thực sự do chính Bob gửi. Bob gửi cho Alice bản tin kèm với chữ ký số.
Chữ ký này được tạo ra với khóa bí mật của Bob. Khi nhận được bản tin, Alice
kiểm tra sự thống nhất giữa bản tin và chữ ký bằng thuật toán kiểm tra sử dụng
11
khóa công cộng của Bob. Bản chất của thuật toán tạo chữ ký đảm bảo nếu chỉ
cho trước bản tin, rất khó (gần như không thể) tạo ra được chữ ký của Bob nếu
không biết khóa bí mật của Bob. Nếu phép thử cho kết quả đúng thì Alice có thể
tin tưởng rằng bản tin thực sự do Bob gửi.
Thông thường, Bob không mật mã hóa toàn bộ bản tin với khóa bí mật mà chỉ
thực hiện với giá trị băm của bản tin đó. Điều này khiến việc ký trở nên đơn giản
hơn và chữ ký ngắn hơn. Tuy nhiên nó cũng làm nảy sinh vấn đề khi 2 bản tin
khác nhau lại cho ra cùng một giá trị băm. Đây là điều có thể xảy ra mặc dù xác
suất rất thấp.
12
CHƯƠNG 3: 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Ố
3.1. Mô hình tổng quan.
Hình 5: Kết hợp khóa công khai và khóa bí mật trong mã hóa file

Chương trình sử dụng hệ mã hóa công khai RSA để mã hóa khóa bí mật –
có tác dụng bảo mật khóa cho quá trình mã hóa file (sử dụng mã hóa đối xứng).
Quá trình mã hóa với khóa đối xứng dùng hệ mã hóa DES
2, Giới thiệu các module trong ứng dụng.
Ứng dụng sử dụng ngôn ngữ Java.
3.2. Sử dụng hệ mã hóa RSA để mã hóa chuỗi mật khẩu lưu trong file
Text

- Chương trình tự động tạo cặp khóa công khai và khóa bí mật, lưu trữ
vào 2 file: private.key và public.key
- Mã hóa file matkhau.txt bằng khóa công khai, tạo ra file mã hóa là
matkhau.enc
- Giải mã bằng khóa bí mật và tạo ra file matkhau2.txt với nội dung
trùng với file gốc.
13
Tạo file main class với tên: EncryptionUtil.java có nội dung như sau:
package javaapplication5;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
/**
* @author JavaDigest
*
*/
public class EncryptionUtil {
public static final String ALGORITHM = "RSA";
public static final String PRIVATE_KEY_FILE =
"C:/keys/private.key";
public static final String PUBLIC_KEY_FILE =
"C:/keys/public.key";


public static void main(String[] args) {
try {
// Check if the pair of keys are present
else generate those.
if (!areKeysPresent()) {
// Method generates a pair of keys
using the RSA algorithm and stores it
// in their respective files
generateKey();
}
//final String originalText = "fgdfg
tretrfgg";
ObjectInputStream inputStream = null;
14
// Encrypt the string using the public key
inputStream = new ObjectInputStream(new
FileInputStream(PUBLIC_KEY_FILE));
final PublicKey publicKey = (PublicKey)
inputStream.readObject();
//final byte[] cipherText =
encrypt(originalText, publicKey);
encryptFile("E:\\tuong.txt",
"E:\\tuong.enc", publicKey);
// Decrypt the cipher text using the
private key.
inputStream = new ObjectInputStream(new
FileInputStream(PRIVATE_KEY_FILE));
final PrivateKey privateKey = (PrivateKey)
inputStream.readObject();

decryptFile("E:\\tuong.enc",
"E:\\tuong2.txt", privateKey);
// Printing the Original, Encrypted and
Decrypted Text
// System.out.println("Original Text: " +
originalText);
// System.out.println("Encrypted Text: " +
cipherText.toString());
// System.out.println("Decrypted Text: " +
plainText);
} catch (Exception e) {
e.printStackTrace();
}
}
//Encrypt and save file
//Phuong thuc ma hoa file txt dung khoa cong khai
public static void encryptFile(String patchSrc,
String patchDes, PublicKey key) {
try {
File fileIn = new File(patchSrc);
15
FileInputStream input = new
FileInputStream(fileIn);
File fileOut = new File(patchDes);
FileOutputStream output = new
FileOutputStream(fileOut);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
CipherOutputStream cos = new
CipherOutputStream(output, cipher);

byte[] block = new byte[1];
int i;
while ((i = input.read(block)) != -1) {
cos.write(block, 0, i);
}
cos.close();
} catch (Exception ex) {
System.out.println("" + ex);
}
}
//Phuong thuc giai ma file dung khoa bi mat
public static void decryptFile(String patchSrc,
String patchDes, PrivateKey key) {
try {
File fileIn = new File(patchSrc);
FileInputStream input = new
FileInputStream(fileIn);
File fileOut = new File(patchDes);
FileOutputStream output = new
FileOutputStream(fileOut);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, key);
CipherOutputStream cos = new
CipherOutputStream(output, cipher);
byte[] block = new byte[1];
int i;
16
while ((i = input.read(block)) != -1) {
cos.write(block, 0, i);
}

cos.close();
} catch (Exception ex) {
System.out.println("" + ex);
}
}
//Phuong thuc tao khoa cong khai va khoa bi mat
public static void generateKey() {
try {
final KeyPairGenerator keyGen =
KeyPairGenerator.getInstance(ALGORITHM);
keyGen.initialize(1024);
final KeyPair key =
keyGen.generateKeyPair();
File privateKeyFile = new
File(PRIVATE_KEY_FILE);
File publicKeyFile = new
File(PUBLIC_KEY_FILE);
// Create files to store public and private
key
if (privateKeyFile.getParentFile() != null)
{

privateKeyFile.getParentFile().mkdirs();
}
privateKeyFile.createNewFile();
if (publicKeyFile.getParentFile() != null)
{
publicKeyFile.getParentFile().mkdirs();
}
publicKeyFile.createNewFile();

// Saving the Public key in a file
17
ObjectOutputStream publicKeyOS = new
ObjectOutputStream(
new
FileOutputStream(publicKeyFile));
publicKeyOS.writeObject(key.getPublic());
publicKeyOS.close();
// Saving the Private key in a file
ObjectOutputStream privateKeyOS = new
ObjectOutputStream(
new
FileOutputStream(privateKeyFile));
privateKeyOS.writeObject(key.getPrivate());
privateKeyOS.close();
} catch (Exception e) {
e.printStackTrace();
}
}

//Kiem tra khoa co ton tai hay chua?
public static boolean areKeysPresent() {
File privateKey = new File(PRIVATE_KEY_FILE);
File publicKey = new File(PUBLIC_KEY_FILE);
if (privateKey.exists() && publicKey.exists())
{
return true;
}
return false;
}


}
3.3. Sử dụng hệ mã hóa đối xứng DES để mã hóa file.
18
(Chương trình có nội dung code lớn, được giải thích chi tiết trong project
netbeans – bản mềm đi kèm tài liệu)
Giao diện chương trình:
Hình 6: Giao diện chương trình mã hóa đối xứng.
Chương trình có tính năng chính là mã hóa file bất kỳ sử sụng hệ mã hóa DES.
Ngoài ra còn được bổ sung nhiều tính năng khác liên quan bảo mật các file dữ
liệu.
19
KẾT LUẬN
Qua quá trình tìm hiểu, nhóm đã tìm hiểu cấu tạo và cơ chế hoạt động của chứng
thư số, xây dựng được chương trình mô phỏng thuật toán ký số lên tệp tin.
Trong thời gian tới, nhóm sẽ tập trung tìm hiểu các phương thức mã hóa, giải mã
mới. Trong quá trình tìm hiểu, do kiến thức còn hạn chế, nguồn tài liệu chưa
nhiều, nên nhóm không tránh khỏi những thiếu sót sai lầm. Rất mong nhận được
sự đóng góp của thầy cô và các bạn.
20
TÀI LIỆU THAM KHẢO
[1] />[2] />[3] />%87n_t%E1%BB%AD
[4] />21

×