Tải bản đầy đủ (.pdf) (16 trang)

Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

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 (758.36 KB, 16 trang )

Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

MỤC LỤC
MỞ ĐẦU ..................................................................................................................2
CHƯƠNG 1. TỔNG QUAN VỀ CÁC HỆ MẬT MÃ..........................................3
1.1.

Lịch sử. ............................................................................................................................3

1.2.

Mô tả hoạt động. .............................................................................................................3

1.2.1.

Tạo khóa. .................................................................................................................3

1.2.2.

Mã hóa. ....................................................................................................................4

1.2.3.

Giải mã. ...................................................................................................................4

1.3.

Ví dụ.................................................................................................................................4

1.4.


Đặc trưng của hệ mật RSA. ...........................................................................................5

1.5.

Độ an toàn của hệ mật RSA. ..........................................................................................6

1.6.

Quản lý khóa công của hệ mật RSA. ............................................................................6

1.6.1.

Phân phối khóa công khai. .....................................................................................6

1.6.2.

Trung tâm quản lý khóa công khai. ......................................................................7

1.6.3.

Phương pháp sử dụng chứng chỉ khóa công khai. ...............................................7

1.6.4.

Sử dụng mã hóa công khai để phân phối khóa mật.............................................8

CHƯƠNG 2. LẬP TRÌNH MÃ HÓA VÀ GIẢI MÃ DỮ LIỆU BẰNG RSA
KẾT HỢP MỘT HỆ MẬT ĐỐI XỨNG BẰNG .NET FRAMEWORK. ..........9
2.1.


Yêu cầu bài toán. ............................................................................................................9

2.2.

Ý tưởng. ...........................................................................................................................9

2.3.

Mô tả hoạt động. .......................................................................................................... 10

2.3.1.

Chương trình sinh cặp khóa công khai.............................................................. 10

2.3.2.

Chương trình mã hóa. ......................................................................................... 10

2.3.3.

Chương trình giải mã. ......................................................................................... 11

2.4.

Hướng dẫn sử dụng chương trình. ............................................................................. 12

2.4.1.

Sinh cặp Public Key và Private Key sử dụng RSA. .......................................... 12


2.4.2.

Mã hóa. ................................................................................................................. 13

2.4.3.

Giải mã. ................................................................................................................ 14

KẾT LUẬN. ...........................................................................................................15
TÀI LIỆU THAM KHẢO ....................................................................................16

Học viện Kỹ thuật Mật Mã

Page 1


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

MỞ ĐẦU
Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin, mạng máy
tính đã trở thành phương tiện hữu dụng phục vụ công tác điều hành, trao đổi thông
tin trong mọi lĩnh vực của xã hội. Song song với việc ứng dụng công nghệ thông tin
trong cuộc sống, đặc biệt là việc sử dụng mạng internet như một môi trường giao
tiếp thì vấn đề an toàn thông tin/dữ liệu trong quá trình gửi và nhận thông qua mạng
có một vai trò hết sức quan trọng.
Trên thế giới đã có rất nhiều hội nghị thường niên của Hiệp hội quốc tế về
mã mật liên tục được tổ chức; các hội nghị Euro Crypt tại Châu Âu và Crypto tại
Mỹ luôn thu hút sự quan tâm trên toàn thế giới của các chuyên gia an ninh thông
tin. Các công nghệ mã hoá (mã mật) hiện đại đều không bảo mật công nghệ mã hoá
(thuật toán mã hoá công khai), mà chỉ dựa vào bí mật chìa khoá giải mã (giải mã

mật). Một hệ như vậy đáp ứng đầy đủ các yêu cầu bảo mật thông tin, phù hợp với
xu hướng trao đổi thông tin qua mạng máy tính.
Năm 1976, ý tưởng về hệ mật khoá công khai đã được Diffie và Hellman
đưa ra, sau đó Rivest, Shamir và Adleman đưa ra hệ mật nổi tiếng RSA vào 1977.
Tiếp đó đã ra đời một số hệ mật dựa trên các thuật toán khác nhau như: hệ mật xếp
ba lô Markle-Hellman, hệ mật McElice, hệ mật Elgamal, hệ mật Chor-Rivest; hệ
mật đường cong Elliptic,…
Trong các hệ mật khoá công khai trên, có hệ mật RSA là hệ mật mã được
xây dựng đầu tiên (ra đời năm 1977 tại MIT). RSA được liệt vào một trong các giải
thuật mã hóa bất đối xứng được dùng thông dụng nhất cho đến ngày hôm nay, RSA
được đặt tên từ ba nhà khoa học phát minh ra nó: Ron Rivest, Adi Shamir, và
Leonard Adleman. Hệ mật RSA được ứng dụng rộng rãi trong mã hóa và lập trình
mật mã.
Trong thực tế, một kịch bản phổ biến trong trường hợp cần mã hóa thông tin
khối lượng lớn là mã hóa thông tin này bằng một giải thuật đối xứng, và sử dụng
giải thuật bất đối xứng(như RSA) để mã hóa khóa của giải thuật đối xứng đó (khi
mã hóa đối xứng, khóa mã cần được gửi đi kèm với thông tin đã mã hóa để bên nhận
có thể giải mã. Việc mã hóa khóa này giúp đảm bảo an toàn. Khi đó bên nhận sẽ sử
dụng private key của mình để giải mã khóa mã, rồi dùng khóa mã này giải mã thông
tin cần nhận)
Vì vậy, nhóm nghiên cứu chọn đề tài “Trình bày hệ mật RSA. Viết chương
trình mã hóa, giải mã dữ liệu (file) bằng RSA kết hợp một hệ mật đối xứng sử dụng
.NET Framework.” Nhằm hiểu rõ hơn về hệ RSA cũng như cách mà các thông điệp
được mã hóa để gửi đi trong thực tế.

Học viện Kỹ thuật Mật Mã

Page 2



Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

CHƯƠNG 1. TỔNG QUAN VỀ CÁC HỆ MẬT MÃ.
1.1.

Lịch sử.

Do 3 tác giả Ron Rivest (R), Adi Shamir(S) và Len Adleman(A) của Học
viện Công nghệ Massachusetts (MIT) đưa ra năm 1977.
Được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983 (Số đăng ký
4,405,829).
1.2.

Mô tả hoạt động.
Thuật toán RSA có hai khóa:
-

khóa công khai (Public Key): Khóa công khai được công bố rộng rãi
cho mọi người và được dùng để mã hóa.
khóa bí mật ( Private Key): Khóa bí mật được cá nhân giữ kín và dùng
để giải mã.

Ví dụ: Bob muốn gửi cho Alice một thông tin mật “m” mà Bob muốn duy
nhất Alice có thể đọc được. Bob sẽ mã hóa “m” bằng Public Key của Alice thu được
bản mã “c” và gửi cho Alice. Còn Alice sẽ giải mã “c” bằng Private Key của mình
để được bản ro “m”.
1.2.1. Tạo khóa.
Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không
an toàn (ví dụ như Internet). Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình
cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:

Các bước tạo khóa:
1. Chọn 2 số nguyên tố lớn p và q , với p≠ q, lựa chọn ngẫu nhiên và độc lập.
2. Tính: n = p.q.
3. Tính: giá trị hàm số Ơle ф(n) = (p-1)(q-1) .
4. Chọn một số tự nhiên e sao cho 1 < e < ф(n), và là số nguyên tố cùng nhau
với ф(n) .
5. Tính: d sao cho d.e ≡ 1 (mod ф(n).)
Bộ ba (n; e; d) là chìa khóa của hệ mã.
Khóa công khai: (e, n).
Khóa bí mật: (d, n).
Học viện Kỹ thuật Mật Mã

Page 3


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

1.2.2. Mã hóa.
Giả sử Bob muốn gửi đoạn thông tin “M” cho Alice. Đầu tiên Bob chuyển
“M” thành một số m < n theo một hàm có thể đảo ngược(từ m có thể xác định lại
M) được thỏa thuận trước.
Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã
hóa của m theo công thức: c = me mod n
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (môđun)
bằng phương pháp bình phương (exponentiation by squaring).
Cuối cùng Bob gửi c cho Alice
1.2.3. Giải mã.
Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìm được m từ c theo
công thức sau: m = cd mod n
Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải

mã hoạt động vì ta có: cd ≡ (me)d ≡ me.d (mod n).
e.d

m

Do e.d ≡ 1 (mod p-1) và e.d ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:
≡ m (mod p) và me.d ≡ m (mod q)

Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung Hoa,
ta có: me.d ≡ m (mod p.q) hay: cd ≡ m (mod n).
1.3.

Ví dụ.
Lấy: p = 61 - số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi tạo khóa)
q = 53 - số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo khóa)
n = p.q = 61.53 = 3233 - môđun (công bố công khai)
e = 17 - số mũ công khai
d = 2753 - số mũ bí mật
Khóa công khai là (e, n).
Khóa bí mật là (d,n)
Hàm mã hóa là: encrypt(m) = me mod n = m17 mod 3233 ( với m là bản rõ).
Hàm giải mã là: decrypt(c) = cd mod n = c2753 mod 3233 (với c là bản mã).
Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính:
encrypt(123) = 12317 mod 3233 = 855.

Học viện Kỹ thuật Mật Mã

Page 4



Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

Để giải mã văn bản có giá trị 855, ta thực hiện phép tính:
decrypt(855) = 8552753 mod 3233 = 123.
Cả hai phép tính trên đều có thể được thực hiện hiệu quả nhờ giải thuật bình
phương và nhân.
1.4.

Đặc trưng của hệ mật RSA.
Hệ mật RSA có các đặc trưng sau:
-

-

Không cần phải thiết lập một kênh bảo vệ phức tạp để truyền khóa
như trong hệ mật khóa bí mật.
Cặp khóa công khai được tạo ra theo một phương pháp đặc biệt có
quan hệ với nhau và được chọn trong nhiều khóa có thể ( trong đó nếu
khóa này dùng để mã hóa thì khóa kia dùng để giải mã)
Ứng với một cặp p, q có thể chọn được nhiều bộ khóa công khai (n;e;d)
Mọi người trong hệ thống nếu nhận được bản mật C thì cũng không
thể biết được bản rõ P. Với việc chỉ biết khóa mã hóa ke và căn cứ vào
các thông tin về thuật toán thì không thể tìm ra khóa giải mã kd trong
thời gian chấp nhận được (kể cả dùng hệ thống hiện đại nhất để tính
toán).

Nguồn cặp khóa của B
Khóa công khai

Khóa bí mật


Bên gửi
A

db

eb

C = Pebmod n

Mã hóa

Giải mã

p= Cdbmod n
Bên nhận

Hình 2.1 Quá trình mã hóa công khai RSA.
Quá trình gửi và nhận thông điệp (bản tin) được thực hiện như sau:
-

Mỗi thành viên sinh một cặp khóa (n; e) và (n; d).
Công khai khóa (n; e); giữ bí mật khóa (n; d).
A gửi thông điệp cho B thì A mã hóa thông điệp bằng khóa công khai
(n; eb) của B.

Học viện Kỹ thuật Mật Mã

Page 5



Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

-

1.5.

B giải mã thông điệp bằng khóa riêng (n; db). Không một người nào
khác có thể giải mã thông điệp ngoài B, vì chỉ có B mới biết khóa
riêng của mình.

Độ an toàn của hệ mật RSA.
Độ an toàn của hệ mật RSA thể hiện qua hai yếu tố:
-

Tính mật của hệ RSA, chủ yếu dựa vào việc bảo vệ khóa riêng d và
giữ bí mật các số nguyên tố p và q.
Tính an toàn của hệ RSA dựa vào độ khó của bài toán RSA và độ phức
tạp của bài toán phân tích một số thành các thừa số nguyên tố.

Với người thám mã có thể tấn công vào hệ mã RSA theo các hình thức:
1.6.

Vét cạn: không gian khóa của RSA là rất lớn vì vậy tấn công theo
hướng này là không thể thực hiện được.
Dựa trên cơ sở toán học để tìm cách phân tích modulo n thành các
thừa số nguyên tố.

Quản lý khóa công của hệ mật RSA.


1.6.1. Phân phối khóa công khai.
Phương pháp khai báo công khai: Bất kỳ thành viên nào cũng có thể thông
báo khóa công khai của mình để cho các thành viên khác được biết. Giải pháp này
có nhược điểm là bất kỳ ai cũng có thể giả mạo một khóa công khai.
Phương pháp sử dụng thư mục công khai: Việc duy trì và tổ chức một thư
mục công khai thuộc về một tổ chức được tin cậy nào đó. Một lược đồ như vậy bao
gồm các yếu tố sau:
-

Tổ chức có nhiệm vụ duy trì thư mục, mỗi thành viên có một
entry(định danh, khóa) trong thư mục.
Mỗi thành viên đăng ký một khóa công khai với tổ chức quản lý thư
mục.
Mỗi thành viên có thể thay thế một khóa công khai bất cứ lúc nào khi
cảm thấy khóa riêng bị lộ.
Cơ quan quản lý công bố toàn bộ thư mụ và có nhiệm vụ cập nhật thư
mục một cách định kỳ.
Mọi thành viên đều có thể truy nhập vào thư mục bất cứ lúc nào, vì
thế việc truyền thông xác thực an toàn (từ cơ quan quản lý đến các
thành viên) phải mang tính chất bắt buộc.

Học viện Kỹ thuật Mật Mã

Page 6


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

1.6.2. Trung tâm quản lý khóa công khai.
Một cơ quan trung tâm duy trì một thư mục khóa công khai. Mỗi thành viên

đều biết khóa công khai của trung tâm quản lý khóa công khai, nhưng chỉ trung tâm
này biết khóa riêng cùng cặp.
Quá trình trao đổi thông tin bí mật diễn ra như sau:
-

A gửi một thông điệp có gán nhãn thời gian cho cơ quan quản lý khóa
công khai, yêu cầu khóa công khai hiện thời của B.
Cơ quan quản lý trả lời bằng một thông điệp. Thông điệp này được
mã hóa bằng khóa riêng dauth của cơ quan quản lý bao gồm:
 Khóa công khai eb của B (A có thể dùng nó để mã hóa các thông
điệp gửi cho B).
 Yêu cầu gốc (request)- A so khớp yêu cầu này với yêu cầu A
đã gửi đi trước đó, nhờ đó A có thể biết yêu cầu gốc có bị sửa
đổi trước khi cơ quan quản lý nhận được hay không.
 Nhãn thời gian gốc- cho phép A xác định được rằng đây không
phải là một thông điệp cũ mà là thông điệp có chứa khóa công
khai hiện thời của B.

-

-

A lưu giữ khóa công khai của B và sử dụng nó để mã hóa một thông
điệp gửi cho B, thông điệp này chứa tên của A(IDA) và một giá trị
(gọi là nonce) để nhận dạng giao dịch này.
B lấy khóa công khai của A từ cơ quan quản lý khóa (tương tự như A
đã lấy khóa công khai của B).
Như thế là A và B đã chuyển giao khóa công khai cho nhau một cách
an toàn, và họ có thể gửi và nhận tin của nhau.


1.6.3. Phương pháp sử dụng chứng chỉ khóa công khai.
Các thành viên sử dụng chứng chỉ để trao đổi khóa mà không cần liên lạc với
cơ quan quản lý khóa công khai. Mỗi chứng chỉ chứa một khóa công khai và các
thông tin khác. Nó được một cơ quan quản lý chứng chỉ tạo ra và phát hành cho các
thành viên. Mỗi thành viên thông báo khóa công khai của mình cho các thành viên
khác thông qua chứng chỉ.
Đặc trưng quan trọng của chứng chỉ là: “Các chứng chỉ có thể được phát hành
mà không cần bảo vệ thông tin qua các dịch vụ an toàn truyền thông để đảm bảo
tính bí mật, xác thực và toàn vẹn”. Bởi vì các chứng chỉ có khả năng tự bảo vệ bằng
chữ ký số của CA.

Học viện Kỹ thuật Mật Mã

Page 7


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

Lợi ích của chứng chỉ khóa công khai là một người sử dụng có thể có được
một số lượng lớn các khóa công khai của các thành viên khác một cách tin cậy chỉ
cần thông qua khóa công khai CA.
1.6.4. Sử dụng mã hóa công khai để phân phối khóa mật.
Lược đồ Merkle: thủ tục A trao đổi thông tin mật với B:
-

A tạo ra một cặp khóa (ea, da) và truyền cho B khóa công khai ea và tên
của A (IDA).
B tạo ra một khóa bí mật Ks và gửi cho A: E ea (Ks).
A tính toán để biết khóa bí mật Ks : Dda (Eea (K)) = Ks.
A hủy bỏ ea, da và B hủy bỏ ea.


Bây giờ A và B có thể trao đổi với nhau bằng khóa phiên Ks. Sau khi trao đổi
xong cả A và B cùng hủy bỏ Ks, như vậy theo cách này thì việc đảm bảo tính bí mật
là rất tốt vì trước và sau khi liên lạc không khóa nào tồn tại.

Học viện Kỹ thuật Mật Mã

Page 8


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

CHƯƠNG 2. LẬP TRÌNH MÃ HÓA VÀ GIẢI MÃ DỮ LIỆU BẰNG RSA
KẾT HỢP MỘT HỆ MẬT ĐỐI XỨNG BẰNG .NET FRAMEWORK.
2.1.

Yêu cầu bài toán.

Viết chương trình mã hóa, giải mã dữ liệu (file) bằng RSA kết hợp một hệ
mật đối xứng sử dụng .NET Framework.
Yêu cầu:
- Sinh viên được chọn hệ mật đối xứng
- Chương trình có chức năng sinh cặp khóa RSA với kích thước khóa
do người dùng chọn, xuất khóa công khai ra file XML, xuất cặp khóa
ra file XML;
- Khóa mã hóa (đối xứng) được sinh ngẫu nhiên, được mã hóa bằng
khóa công khai lưu trong file XML do người dùng chỉ định.
- Tất cả thông tin cần thiết để giải mã (ngoại trừ khóa bí mật) được lưu
trong cùng một file với bản mã.
2.2. Ý tưởng.

Bài toán là mô tả cách mà người dùng mã hóa dữ liệu và gửi đi trong thực tế.
Trong thực tế, người ta sẽ sử dụng RSA kết hợp một hệ mật đối xứng để mã hóa và
giải mã dữ liệu với khối lượng lớn. Người dùng sẽ dùng khóa mã hóa(đối xứng) để
mã hóa dữ liệu cần gửi đi. Sau đó, dùng hệ mật RSA để mã khóa khóa đối xứng đó
bằng khóa công khai(Plublic Key) của người nhận và đính kèm vào bản và gửi đi.
Người nhận sử dụng khóa riêng(Private Key)của mình để giải mã ra khóa đối xứng.
Tiếp đó dùng khóa đối xứng này để giải bản mã.
Đầu tiên, sinh cặp khóa RSA với kích thước khóa do người dùng chọn. Dùng
lệnh gcnew để sinh ra một cặp khóa. Để có thể cho người dùng chọn độ dài khóa ta
sử dụng Constructor:
RSACryptoServiceProvider(
int dwKeySize)
Sau khi sinh cặp khóa công khai thành công, xuất cặp khóa ra file xml.
Chức năng thứ hai, mã hóa dữ liệu bằng một thuật toán đối xứng(ở đây nhóm
chọn DES) để mã hóa dữ liệu và mã hóa khóa đối xứng bằng khóa công khai(Public
Key) vừa sinh ra ở trên. Thuật toán đối xứng sinh khóa sử dụng lớp
DESCryptoServiceProvider bằng các phương thức:
void GenerateIV()
void GenerateKey()
Tiếp theo, sau khi sinh khóa đối xứng xong, ta mã hóa key, iv của DES bằng khóa
công khai(Public Key) dùng RSACryptoServiceProvider() và mã hóa dữ liệu bằng
thuật toán DES sử dụng key, iv vừa sinh ra.
Chức năng thứ ba, thực hiện giải mã sử dụng khóa riêng(Private Key) của
người nhận.

Học viện Kỹ thuật Mật Mã

Page 9



Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

2.3. Mô tả hoạt động.
2.3.1. Chương trình sinh cặp khóa công khai.
a. Sinh khóa
String^ pubkey=txtPublicKey->Text;
String^ prikey=txtPrivateKey->Text;
keysize= trbKeySize->Value * 8;
rsa = gcnew RSACryptoServiceProvider(keysize);

b. Xuất publicKey ra file XML
String^ publicKey = rsa->ToXmlString(false);
TextWriter^ streamWriter = gcnew StreamWriter(
streamWriter->Write(publicKey);
streamWriter->Close();

pubkey );

c. Xuất PrivateKey ra file XML
String^ privateKey = rsa->ToXmlString(true);
streamWriter = gcnew StreamWriter(prikey);
streamWriter->Write(privateKey);
streamWriter->Close();

2.3.2. Chương trình mã hóa.
a. Tạo khóa đối xứng.
algSym->GenerateKey();

tạo IV
algSym->GenerateIV();


b. Tạo Stream đọc file nguồn, nghi file mã hóa
FileStream^ fsOriginal= gcnew
FileStream(stOriginalFile,FileMode::Open, FileAccess::Read);
fsEncrypted= gcnew FileStream(stEncrypted,FileMode::Create);

c. Mã hóa key, iv của DES
rsa = gcnew RSACryptoServiceProvider();
TextReader^ streamReader = gcnew StreamReader(pubkeyfile);
String^ publicKey = streamReader->ReadToEnd();
streamReader->Close();
rsa->FromXmlString(publicKey);
EncryptedSymmetricKey = rsa->Encrypt( algSym->Key, false );
fsEncrypted->Write(EncryptedSymmetricKey,0,EncryptedSymmetricKey>Length);
EncryptedSymmetricIV = rsa->Encrypt( algSym->IV, false );
fsEncrypted->Write(EncryptedSymmetricIV,0,EncryptedSymmetricIV>Length);

Học viện Kỹ thuật Mật Mã

Page 10


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

d. Hàm mã hóa file nguồn bằng DES
CryptoStream^
cs=
gcnew
CryptoStream(fsOriginal,algSym>CreateEncryptor(),CryptoStreamMode::Read);
unsigned int buf_size= 2048;

array
char>^
buf=
gcnew
arraychar>(buf_size);
int read_count;
do
{
read_count= cs-> Read(buf,0,buf_size);
fsEncrypted->Write(buf,0,read_count);
}
while(read_count!=0);
fsEncrypted->Close();
fsOriginal->Close();

2.3.3. Chương trình giải mã.
a. Get Key từ file XML
rsa = gcnew RSACryptoServiceProvider();
TextReader^
streamReader
=
gcnew
StreamReader(privatekeyfile);
String^ privateKey = streamReader->ReadToEnd();
streamReader->Close();
rsa->FromXmlString(privateKey);

b. Giải mã bằng hàm DES

SymmetricAlgorithm^ algSym2;
algSym2= gcnew DESCryptoServiceProvider;
algSym2->GenerateKey();
algSym2->GenerateIV();
EncryptedSymmetricKey=rsa->Encrypt(algSym2->Key,false);
EncryptedSymmetricIV=rsa->Encrypt(algSym2->IV,false);
array< unsigned char>^ key;
key= gcnew array< unsigned char>(EncryptedSymmetricKey>Length);
fsEncrypted-> Read(key,0,EncryptedSymmetricKey->Length);
EncryptedSymmetricKey=rsa->Decrypt(key,false);
array< unsigned char>^ iv;
iv=
gcnew
arraychar>(EncryptedSymmetricIV>Length);
fsEncrypted-> Read(iv,0,EncryptedSymmetricIV->Length);
EncryptedSymmetricIV= rsa->Decrypt(iv,false);
algSym2->Key=EncryptedSymmetricKey;
algSym2->IV=EncryptedSymmetricIV;
CryptoStream^
csDecryptor=
CryptoStream(fsDecrypted,algSym2>CreateDecryptor(),CryptoStreamMode::Write);
Học viện Kỹ thuật Mật Mã

gcnew

Page 11


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

unsigned int buf_size= 2048;
array
char>^
buf=
gcnew
arraychar>(buf_size);
int read_count;
do
{
read_count=fsEncrypted->Read(buf,0,buf_size);
csDecryptor->Write(buf,0,read_count);
}
while (read_count!=0);
csDecryptor-> Close();
fsDecrypted-> Close();
fsEncrypted-> Close();

2.4. Hướng dẫn sử dụng chương trình.
2.4.1. Sinh cặp Public Key và Private Key sử dụng RSA.

Bước 1: chọn tab SINH KHÓA.
Bước 2: chọn button KEY SIZE để chọn độ dài khóa.
Bước 3: chọn nơi lưu Public Key.
Bước 4: chọn nơi lưu Private Key.
Bước 5: Sinh khóa.

Học viện Kỹ thuật Mật Mã


Page 12


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

2.4.2. Mã hóa.

Bước 1: chọn tab MÃ HÓA.
Bước 2: Nạp Public Key.
Bước 3: chọn bản rõ để mã hóa.
Bước 4: chọn nơi lưu bản mã.
Bước 5: mã hóa.

Học viện Kỹ thuật Mật Mã

Page 13


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

2.4.3. Giải mã.

Bước 1: chọn tab GIẢI MÃ.
Bước 2: Nạp Private Key.
Bước 3: Chọn bản mã.
Bước 4: chọn nơi lưu bản giải mã.
Bước 5: chọn giải mã.

Học viện Kỹ thuật Mật Mã


Page 14


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

KẾT LUẬN.

Thông qua đề tài, chúng em đã biết được về cơ chế và cách sử dụng thuật
toán RSA kết hợp một thuật toán đối xứng để mã hóa và giải mã dữ liệu nhằm mục
đích bảo vệ thông tin người dùng bằng cách viết một chương trình mã hóa, giải mã
dữ liệu với .NET FrameWork, với công cụ lập trình Microsoft Visual Studio.
Nắm rõ được các hàm sử dụng trong .NET FrameWork để mã hóa, giải mã
dữ liệu, các bước tiến hành cơ bản để tạo được một chương trình đơn giản cho phép
người sử dụng sinh khóa, mã hóa, giải mã dữ liệu, thông tin của mình khi cần thiết.
Bên cạnh những kết quả đạt được, vẫn còn một số hạn chế trong chương trình
như chưa xây dựng được giao diện sử dụng hợp lý, phù hợp thực tế.

Học viện Kỹ thuật Mật Mã

Page 15


Mật Mã Nâng Cao – Viết chương trình mã hóa, giải mã dữ liệu (file) với .NET FrameWork

TÀI LIỆU THAM KHẢO.

A. Tài liệu tiếng anh :
[1] Ứng dụng MSDN của Microsoft.
B. Tài liệu tiếng việt :
[2] Slide bài giảng Mật mã nâng cao, giảng viên Nguyễn Tuấn Anh, khoa An toàn

thông tin – Học viện Kỹ Thuật Mật Mã.
[3] Hệ mật RSA và ứng dụng lược đồ chữ ký số trong xác thực thông tin : Luận văn
ThS. Công nghệ thông tin : 604810 / Đỗ Thanh Bình

Học viện Kỹ thuật Mật Mã

Page 16



×