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

Tìm hiểu System.Security.Crytography namespace trên Microsoft.net. Sử dụng lớp Digital signature và Digital certificate hiện thực mô hình tạo và kiểm tra chữ ký số dùng RSA và SHA1

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 (1.18 MB, 23 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC MỞ TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN


AN TOÀN
BẢO MẬT THÔNG TIN
Đề tài:
Tìm hiểu System.Security.Crytography
namespace trên Microsoft.net. Sử dụng lớp
Digital signature và Digital certificate hiện
thực mô hình tạo và kiểm tra chữ ký số
dùng RSA và SHA1
Giảng viên: Đào Thế Long
Nhóm thực hiện: Nhóm 4
TP.HCM ngày 23 tháng 4 năm 2016

Năm học: 2016-2017

1


Lời mở đầu
Mật mã (Cryptography) là một ngành nghiên cứu các kỹ thuật toán học nhằm cung
cấp các dịch vụ bảo vệ thông tin. Đây là ngành khoa học quan trọng, có nhiều ứng dụng
trong đời sống – xã hội.
Cùng với sưu phát triển của khoa học máy tính và Internet, các nghiên cứu và ứng
dụng của mật mã học ngày càng trở nên đa dạng hơn, mở ra nhiều hướng nghiên cứu
chuyên sâu vào từng lĩnh vực ứng dụng đặc thù với những đặ trưng riêng. Ứng dụng của
khoa học mật mã không chỉ đơn thuần là mã hóa và giải mã thông tin mà còn bao gồm
nhiều vấn đề khác nhau cần được nghiên cứu và giải quyết, ví dụ như chứng thực nguồn


gốc nội dung thông tin (kỹ thuật chữ ký điện tử), chứng nhận tính xác thực về người sở
hữu mã khóa (chứng nhận khóa công cộng), các quy trình giúp trao đổi thông tin và thực
hiện giao dịch điện tử an toàn trên mạng…
Những kết quả nghiên cứu về mật mã cũng đã được đưa vào trong các hệ thống phức
tạp hơn, kết hợp với những kỹ thuật khác để đáp ứng yêu cầu đa dạng của các hệ thống
ứng dụng khác nhau trong thực tế, ví dụ như hệ thống bỏ phiếu bầu cử qua mạng, hệ
thống đào tạo từ xa, hệ thống quản lý an ninh của các đơn vị với hướng tiếp cận sinh trắc
học…
Trong bài báo cáo của nhóm chúng em sẽ tìm hiểu về System.Security.Cryptography
namespace trên .NET trong việc bảo vệ thông tin.
Mặc dù nhóm em đã cố gắng biên soạn, chọn lọc tài liệu, cách trình bày hợp lý nhất
nhưng trong thời gian ngắn không tránh khỏi thiếu sót. Mong thầy đọc và cho nhận xét về
bài báo cáo của nhóm em.
Cảm ơn thầy!
Nhóm 02


DANH SÁCH NHÓM 02
STT

HỌ VÀ TÊN

MSSV

GHI CHÚ

1*

Lê Thị Tú Hoan


1354050029

DH13TK02

2

Trần Thị Kim Loan 1354052153

DH13TK01


MỤC LỤC
--------------

CHƯƠNG 1: TỔNG QUAN LỚP CRYPTOGRAPHY .......................................1
1.

Giới thiệu về lớp Cryptography. ................................................................1

2.

Một số lớp chính trong lớp System.Security.Cryptography ...................1

3.

Ví dụ thuật giải ............................................................................................3

CHƯƠNG 2: THỰC HIỆN THUẬT GIẢI RSA ..................................................5
1.


Tổng quan về RSA.......................................................................................5

2.

Hướng dẫn sử dụng phần mềm chuyển mã RSA .....................................6

CHƯƠNG 3: KIỂM TRA CHỮ KÝ BẰNG SHA1 ............................................10
1.

Tổng quan SHA1 .......................................................................................10

2.

Giải thuật SHA1 ........................................................................................10
Bước 1: Nhồi thêm dữ liệu ..............................................................................10
Bước 2: Thêm vào độ dài ................................................................................11
Bước 3: Khởi tạo bộ đệm MD (MD buffer) ....................................................11
Bước 4: Xử lý các khối dữ liệu 512 bit ...........................................................11
Bước 5: Xuất kết quả .......................................................................................12

3.

Hướng dẫn sử dụng phần mềm SHA1 ....................................................14

TÀI LIỆU THAM KHẢO .....................................................................................19


CHƯƠNG 1: TỔNG QUAN LỚP CRYPTOGRAPHY
1. Giới thiệu về lớp Cryptography.
Microsoft đăng ký quyền sỡ hữu Win 32 Cryptography API (CrytoAPI) vào năm

1996 tích hợp trong Win NT. Mặc dù CryptoAPI cung cấp đầy đủ hỗ trợ cho ngành lập
trình mật mã, nhưng nó rất khó sử dụng. Bạn phải hiểu thật rõ về mật mã học và phải làm
việc với rất nhiều các thành phần cũng như những con số lớn trong API. Nó cũng không
phải là một đối tượng được định hướng cho đến khi nó xuất hiện trong ngôn ngữ lập trình
C, và bạn có thể gọi hàm để sử dụng nó một cách đơn giản. Thật may mắn, .NET
Framework làm đơn giản hóa việc sử dụng API của chúng ta bằng cách cung cấp một lớp
rất thân thiện với tên gọi là System.Security.Cryptography.

Hình 1.1: Sơ đồ mã hõa và giải mã
2. Một số lớp chính trong lớp System.Security.Cryptography
 SymmetricAlgorithm: Lớp mã hóa đối xứng. Nó sẽ mã hóa theo các thuật
toán mã hóa đối xứng như: DES, Rijndael.
 AsymmetricAlgorithm: Lớp mã hóa bất đối xứng, nó sẽ mã hóa theo các
thuật toán RSA, DSA.
 CryptoStream: Kết nối dòng dữ liệu nguồn với các thuật toán mã hóa.
 CrpParameters: Chứa thông tin của các tham số trong những thuật toán đặc
biệt để có thể lưu trữ và lấy lại thông qua Cryptographic Service Provider
(CSP).
 HashAlgorithm: Lớp cơ sở hỗ trợ các thuật toán băm.
 RandomNumberGenerator: Lớp cơ sở sinh ra số ngẫu nhiên.

1


 ToBase64Transform và FromBase64Transform: Dùng để chuyển đổi các
dãy Byte và Base-64.
 CryptographicException: Chứa thông tin về lỗi của các loại mã hóa khác
nhau.
 Các bạn có thể nhớ và tùy ý sử dụng các lớp này trong chương trình của mình
vì nó đã có sẵn trong lớp System.Security.Cryptography


2


Hình 1.2: Các thuật toán mã hóa hỗ trợ trong lớp Cryptography

3. Ví dụ thuật giải
using System;
using System.Text;
using System.Security.Cryptography;
namespace Crypto
{
public class KeyCreator
{
public static void Main(String[] args)
{
String[] commandLineArgs = System.Environment.GetCommandLineArgs();
string decryptionKey =
CreateKey(System.Convert.ToInt32(commandLineArgs[1]));
string validationKey =
CreateKey(System.Convert.ToInt32(commandLineArgs[2]));
Console.WriteLine("validation=\"SHA1\"/>", validationKey, decryptionKey);
}
static String CreateKey(int numBytes)
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buff = new byte[numBytes];
rng.GetBytes(buff);
return BytesToHexString(buff);


3


}
static String BytesToHexString(byte[] bytes)
{
StringBuilder hexString = new StringBuilder(64);
for (int counter = 0; counter < bytes.Length; counter++)
{
hexString.Append(String.Format("{0:X2}", bytes[counter]));
}
return hexString.ToString();
}
}
}

4


CHƯƠNG 2: THỰC HIỆN THUẬT GIẢI RSA
1. Tổng quan về RSA
Trong mật mã học, RSA là một thuật toán mật mã hóa khóa công khai. Đây là thuật
toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh
dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng.
RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an
toàn với điều kiện độ dài khóa đủ lớn.
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào
năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán lấy từ 3 chữ
cái đầu của tên 3 tác giả.

Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh làm việc
tại GCHQ, đã mô tả một thuật toán tương tự. Với khả năng tính toán tại thời điểm đó thì
thuật toán này không khả thi và chưa bao giờ được thực nghiệm. Tuy nhiên, phát minh
này chỉ được công bố vào năm 1997 vì được xếp vào loại tuyệt mật.
Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983 (Số
đăng ký 4.405.829). Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy
nhiên, do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như
không có giá trị bên ngoài Hoa Kỳ. Ngoài ra, nếu như công trình của Clifford Cocks đã
được công bố trước đó thì bằng sáng chế RSA đã không thể được đăng ký.

5


Hình 2.1: Sơ đồ mã hóa RSA
2. Hướng dẫn sử dụng phần mềm chuyển mã RSA
Bước 1: Nhập vào N số nguyên tố muốn hiển thị, sau đó nhấn nút khởi tạo để xem N
số nguyên tố đầu tiên

6


Bước 2: Nhấn chọn giá trị cho p, q và e

Bước 3: Nhấn vào nút Tính để ra được các giá trị N, Fi, d, khóa Kp, khóa Ks

7


Bước 4: Sau khi đã có được những giá trị ở trên ta tiến hành mã hóa một chuỗi ký tự


Bước 5: Muốn nhập dữ liệu khác chọn nút Reset All để xóa tất cả dữ liệu hiện có

8


Bước 6: Sau khi hoàn thành tắt chương trình bằng nút X màu đỏ phía trên bên phải của
chương trình hoặc nút Thoát, sẽ hiển thị một hộp thoại như sau:

**Bản demo đi kèm trong bài

9


CHƯƠNG 3: KIỂM TRA CHỮ KÝ BẰNG SHA1
1. Tổng quan SHA1
SHA1 là thuật toán “băm” một chiều (hash) dùng trong rất nhiều hệ thống như SSH,
SSL, S/MIME, PGP, IPSec, VPNs…Nó được Cơ quan an ninh quốc gia Mỹ phát minh năm
1995 và trở thành chuẩn bảo mật cơ sở phổ biến nhất trên Internet và là thuật toán chữ ký
điện tử duy nhất được Cơ quan Chuẩn Chữ ký Số của chính phủ Mỹ phê chuẩn.
SHA là viết tắt của Secure Hash Algorithm. Ba thuật toán SHA co cấu trúc khác nhau
và được phân biệt là: SHA-0, SHA-1 và SHA2. SHA-1 gần tương tự như SHA-0, nhưng sửa
chữa một lỗi trong các đặc tả kỷ thuật gốc của hàm băm SHA dẫn đến những điểm yếu quan
trọng. Các thuật toán SHA-0 đã không được sử dụng trong nhiều ứng dụng. SHA-2 mặt khác
có những điểm khác biệt quan trọng so với hàm băm SHA-1.

Hình 3.1: Các tính chất của các thuật toán băm an toàn
2. Giải thuật SHA1
Gồm 5 bước:
Đầu vào: chuỗi có độ dài tối đa 264 bits.
Đầu ra: giá trị băm có độ dài 160 bits.

Bước 1: Nhồi thêm dữ liệu

10


Thông điệp được nhồi thêm các bits sao cho độ dài I=448 mod 512 hay l = n*512 +
448(n, 1 nguyên).
Thông điệp luôn luôn được nhồi thêm dữ liệu.
Số bits nhồi thêm nằm trong khoảng 1 đến 512.
Phần dữ liệu nhồi thêm bao gồm một bit 1 và theo sau là các bit 0.
Bước 2: Thêm vào độ dài
Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64 bit và được thêm
vào cuối chuỗi nhị phân kết quả của bước 1.
Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu.
Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512. Khối dữ
liệu được biểu diễn:
Bằng một dãy L khối 512 bit Y0, Y1, Y2...., YL-1.
Bằng một dãy N từ (word) 32 bit M0, M1, MN-1. Vậy N= L x 16(32 x 16 = 512)
Bước 3: Khởi tạo bộ đệm MD (MD buffer)
Một bộ đệm 160 bit được dùng lưu trữ các giá trị băm trung gian và kết quả. Bộ đệm
được biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi tạo ở dạng bigiendian (byte có
trọng số lớn nhất trong tử nằm ở địa chỉ thấp nhất) như sau:
A = 01234567

D = 76543210

B = 89 AB CD EF

E = C3D2E1F0


C = FE DC BA 98
Các giá trị này tương đương với các từ 32 bit sau:
A = 01234567

D = 76543210

B = 89 AB CD EF

E = C3D2E1F0

C = FE DC BA 98
Bước 4: Xử lý các khối dữ liệu 512 bit
Trọng tâm của giải thuật bao gồm 4 vòng lặp thực hiện tất cả 80 bước. 4 vòng lặp có cấu
trúc như sau, chỉ khác nhau ở các hàm logic f1, f2, f3, f4.

11


Mỗi vòng có đầu vào gồm khối 512 bit hiện thời và một bộ đệm 160 bit ABCDE. Các
thao tác sẽ cập nhật giá trị bộ đệm.
 Mỗi bước sử dụng một hằng số Kt (0≤t ≤79)
Kt = 5A827999 (0 ≤ t ≤ 19))
Kt = 6ED9EBA1 (20≤t ≤39)

Kt = 8F1BBCDC (40≤t≤59)
Kt = CA62C1D6 (60≤t≤79)

Đầu ra của 4 vòng (bước 80 được cộng với đầu ra của bước CVq để tạo CVq+1

Bước 5: Xuất kết quả

Sau khi thao tác trên toàn bộ L blocks. Kết quả của khối thứ L là bảng băm 160 bit
Giải thuật được tóm tắt như sau:
CV0 = IV
CVq+1 = SUM32 (CVq, ABCDEq)

12


MD = CVL
Với
IV = giá trị khởi tạo của bộ đệm ABCCDE
ABCDEq = đầu ra của hàm nén trên khối thứ q
L = số khối 512 bit của thông điệp
SUM32 = phép cộng modulo 232 trên từng từ (32 bits) của đầu vào
MD = giá trị băm

Giải thích: Giải thuật thực hiện tất cả 80 bước, mỗi bước được mô tả như sau:
A ← E + f(t, B,C D) + S5(A)+ Wt + Kt
B←A
C←S30(B)
D←C
E←D
Trong đó

13


A, B, C, D, E = các từ trong bộ đệm
t = số thứ tự của bước
F(t, B,C, D) = làm logic tại bước t

Sk = dịch vòng trái k bits
Wt = từ thứ t của khối dữ liệu
Kt = hằng số
+= phép cộng modulo 232
Các hàm f:

Từ 16 từ 32 ibit từ khối dữ liệu đầu vào, mở rộng thành 80 từ Wt
Với 0 ≤ t ≤ 15, giá trị Wt lấy trực tiếp từ khối dữ liệu
t > 15, Wt = S1(Wt-16 xor W1-14 xor Wt-8 xor Wt-5)
3. Hướng dẫn sử dụng phần mềm SHA1
Demo tạo và kiểm tra chữ kí số bằng SHA1
Khi chạy file “Kiểm tra tính toàn vẹn dữ liệu.exe” sẽ hiển thị hộp thoại

14


Bước 1: Ta bấm vào nút tạo SNT và sau đó bấm vào nút Tính để tìm giá trị E và N và
Khóa Bí Mật

15


Bước 2: Chuyển qua tab ký văn bản, tab ký văn bản. Nhập nội dung Văn bản cần chữ,
rồi nhấn nút Ký

16


Bước 3: Sang trang Kiểm tra chữ ký, nhập nội dung vào Văn bản cần kiểm tra, copy
Chữ ký ở trang Ký văn bản và Khóa bí mật D, N. Nhấn nút Nhập khóa rồi tiếp đó t

nhấp nút Kiểm Tra VB

17


18


TÀI LIỆU THAM KHẢO

[1] Trang hỗ trợ của Microsoft
/>[2] Luận văn Ứng dụng DS1307 xây dựng hệ thống thời gian thực
/>[3] Hướng dẫn trình bày luận văn thạc sĩ
/>uy%20Quynh.pdf
[4] Đề tài tìm hiểu tổng quan về mã hoá và lớp Crytography trong NET trong
việc bảo vệ thông tin
/>[5] Demo kết quả băm các chuỗi theo thuật toán MD5, SHA1, SHA256
/>[6] Giới thiệu về RAS trong wiki
/>[7] Đề tài giới thiệu về mã hóa dữ liệu SHA1, MD5, và demo ứng dụng
/>
19



×