Seminar môn học

MÃ HÓA & ỨNG DỤNG
Microsfot .NET Cryptography Namespace
TS. Trần Minh Triết Ths. Lương Vĩ Minh Ths. Lê Thanh Tâm

Nội dung
1. 2. 3. 4. Mô hình mật mã của .NET Framework Các thuật toán mã hóa .NET Framework hỗ trợ .NET Framework Cryptography Namespace Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework 7. Chứng nhận điện tử X.509

Nội dung
1. 2. 3. 4. Mô hình mật mã của .NET Framework Các thuật toán mã hóa .NET Framework hỗ trợ .NET Framework Cryptography Namespace Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework
7. Chứng nhận điện tử X.509

Mô hình mật mã của

.NET Framework

Cung cấp nhiều cài đặt của các thuật toán mã hóa chuẩn.

Dễ sử dụng và an toàn

Dễ mở rộng thông qua :
Tính kế thừa (Object Inheritance) Tính thiết kế luồng (Stream Design) Tính cấu hình cho mật mã (Configuration)

Mô hình mật mã của
Tính kế thừa

.NET Framework

Hệ thống bảo mật của .NET Framework được cài đặt trên mô hình lớp thừa kế có phân cấp sau:

Lớp Loại thuật toán

Lớp Abstract. Gồm có các lớp :

SymmetricAlgorithm, HashAlgorithm, …

Lớp Thuật toán

Lớp Abstract. Gồm có các lớp :

RC2, SHA1, …

Lớp Thực thi

Gồm có các lớp: SHA1Managed ,

RC2CryptoServiceProvider, …

Mô hình mật mã của

Tính Thiết kế hướng luồng

.NET Framework

Được sử dụng cho các lớp thực thi của thuật toán đối xứng và băm. Lớp CryptoStream (kế thừa từ lớp Stream). Các đối tượng mật mã đều hỗ trợ CryptoStream interface để điều khiển phần truyền nhận dữ liệu.

Có thể liên kết nhiều đối tượng mật mã với nhau và thực thi nhiều thao tác trên dữ liệu mà không cần lưu trữ trung gian.

Mô hình mật mã của

Tính Cấu hình cho lớp mật mã

.NET Framework

Việc cấu hình mật mã cho phép chuyển hướng một thực thi cụ thể của một thuật toán sang một tên thuật toán. Bổ sung thực thi phần cứng hay phần mềm của một thuật toán và ánh xạ nó thay thế cho một thuật toán đã chọn của .NET Framework. Thiết lập mặc định sẽ được sử dụng cho thuật toán nếu nó không được chỉ định thay thế trong tập tin cấu hình.

Nội dung
1. 2. 3. 4. Mô hình mật mã của .NET Framework Các thuật toán mã hóa .NET Framework hỗ trợ .NET Framework Cryptography Namespace Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework
7. Chứng nhận điện tử X.509

Các thuật toán mã hóa .NET Framework 3.5 hỗ trợ
File : System.Core.dll, mscorlib.dll Namespace : System.Security.Cryptograph Các thao tác hỗ trợ:
Mã hóa / giải mã dữ liệu Tạo / xác thực chữ ký điện tử Đảm bảo tính toàn vẹn dữ liệu Mở rộng các lớp mã hóa của .NET Sử dụng DPAPI để mã hóa và giải mã dữ liệu Sử dụng tích hợp với phần cứng bảo mật

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll, mscorlib.dll Namespace : System.Security.Cryptograph

•1
Secret-Key Encryption (symmetric cryptography)

•2
Public-key encryption (asymmetric cryptography)

•3
Cryptographic signing

•4
Cryptographic hashes

•5
Random Number Generation

•6
ClickOnce Manifest

•7
Suite B Support

•8
Cryptography Next Generation (CNG) Classes

Nội dung
1. Mô hình mật mã của .NET Framework 2. Các thuật toán mã hóa .NET Framework hỗ trợ

3. .NET Framework Cryptography Namespace
4. Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework
7. Chứng nhận điện tử X.509

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : mscorlib.dll Namespace : System.Security.Cryptograph

•5
Random Number Generation

Phát sinh số ngẫu nhiên áp dụng cho các thuật toán mã hóa Abstract Class: RandomNumberGenerator Implement Class: RNGCryptoServiceProvider Support: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll Namespace : System.Security.Cryptograph

•6
ClickOnce Manifest

Hỗ trợ lấy và xác thực thông tin chữ ký của các ứng dụng được triển khai với kỹ thuật ClickOnce
Enum: ManifestKinds Implement Class:
ManifestSignatureInformation ManifestSignatureInformationCollection StrongNameSignatureInformation AuthenticodeSignatureInformation TimestampInformation TrustStatus

Support: 3.5

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll Namespace : System.Security.Cryptograph

•7
Suite B Support

Phát sinh số ngẫu nhiên áp dụng cho các thuật toán mã hóa của NSA AES (128, 192, 256 bits) SHA-1, SHA-256, SHA-384, SHA-512 ECDSA (256, 384, 521bit) ECDH (256, 384, 521bit)

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll Namespace : System.Security.Cryptograph

•8
Cryptography Next Generation (CNG) Classes

Wrapper các thuật toán mã hóa CryptoAPI (được thay thế bằng CNG) Implement Class:
CngKey CngAlgoritm CngProperty

Support: 3.5

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : mscorlib.dll Namespace : System.Security.Cryptograph Cung cấp các thuật toán mã hóa đối xứng Sử dụng duy nhất 1 khóa để mã & giải mã

•1
Secret-Key Encryption (symmetric cryptography)

Abstract Class:
DES RC2 Rijndael TripleDES Aes

Implement Class:
DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider AesManaged

Support: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll, mscorlib.dll Namespace : System.Security.Cryptograph

•2
Public-key encryption (asymmetric cryptography)

Cung cấp các thuật toán mã hóa bất đối xứng Sử dụng 1 cặp khóa (private key & public key) để mã hóa và giải mã
Enum: ECDiffieHellmanKeyDerivationFunction Abstract Class:
DSA RSA ECDiffieHellman ECDiffieHellmanPublicKey ECDiffieHellmanKeyDerivationFunction ECDsa

Implement Class:
DSACryptoServiceProvider RSACryptoServiceProvider ECDiffieHellmanCng ECDiffieHellmanCngPublicKey ECDsaCng

Support: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll, mscorlib.dll Namespace : System.Security.Cryptograph

•3

Cung cấp các thuật toán Tạo và xác nhận chữ ký điện tử thông qua Mã hóa Bất đối xứng Abstract Class:
DSA RSA ECDsa

Implement Class:
Cryptographic signing

DSACryptoServiceProvider RSACryptoServiceProvider ECDsaCng

Support: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Các thuật toán mã hóa -

.NET Framework 3.5 hỗ

trợ

File : System.Core.dll, mscorlib.dll Namespace : System.Security.Cryptograph

•4
Cryptographic hashes

Cung cấp các thuật toán về hàm băm mật mã (hash functions) Abstract Class:  Implement Class:

KeyHashAlgorith HMAC HMAC[MD5, RIPEMD160, SHA1, SHA256, SHA384, SHA512] MACTripleDES MD5  MD5[CryptoServiceProvicder, Cng ] RIPEMD160  RIPEMD160Managed SHA1  SHA1[CryptoServicePrivider, Managed, Cng] SHA256  SHA256[CryptoServicePrivider, Managed, Cng] SHA384  SHA384[CryptoServicePrivider, Managed, Cng] SHA512  SHA512[CryptoServicePrivider, Managed, Cng]

Support: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Nội dung
1. Mô hình mật mã của .NET Framework 2. Các thuật toán mã hóa .NET Framework hỗ trợ

3. .NET Framework Cryptography Namespace
4. Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework 7. Chứng nhận điện tử X.509

Mã hóa đối xứng
SymmetricAlgorithm DES RC2 Rijndael TripleDES

.NET Framework

DESCryptoServiceProvider RC2CryptoServiceProvider RijndaelManaged

TripleDESCryptoServiceProvider

Kích thước khóa của thuật toán Mã hóa đối xứng .NET Framework
Thuật toán Kích thước khóa hợp lệ Kích thước khóa mặc định

DES RC2 Triple-DES Rijndael Aes

64 bits Từ 40 đến 128 bits 128, 192 bits 128, 192, 256 bits 128, 192, 256 bits

64 bits = 8 bytes 128 bits = 16 bytes 192 bits = 24 bytes 256 bits = 32 bytes

Mã hóa đối xứng
Các hàm thông dụng Thuộc tính / hàm Giải thích :
Key KeySize LegalKeySizes IV CreateEncryptor() CreateDecryptor() GenerateKey() GenerateIV() ValidKeySize()

.NET Framework

Khóa bí mật sử dụng trong thuật toán mã hóa đối xứng Kích thước khóa bí mật (tính theo bit) Các giá trị kích thước khóa hợp lệ (tính theo byte) của thuật toán mã hóa đối xứng hiện tại Vector khởi tạo cho thuật toán mã hóa đối xứng. Hàm tạo một đối tượng mã hóa đối xứng sử dụng khóa và Vector khởi tạo được chỉ định. Hàm tạo một đối tượng giải mã mã hóa đối xứng sử dụng khóa và Vector khởi tạo được chỉ định. Hàm phát sinh khóa bí mật ngẫu nhiên. Hàm phát sinh Vecto khởi tạo ngẫu nhiên. Hàm kiểm tra xem kích thước khóa bí mật được chỉ định có phù hợp với thuật toán mã hóa đối xứng hiện tại không.

Mã hóa đối xứng
Mã hóa dữ liệu:

.NET Framework

SecureKey

Implementation Of SymantricAlg

Encryptor

CryptoStream

Output Stream

Input Stream

Mã hóa đối xứng
Giải mã dữ liệu:

.NET Framework

SecureKey

Implementation Of SymantricAlg

Encryptor Decryptor

CryptoStream

Output Stream

Input Stream

Mã hóa đối xứng

.NET Framework

static string GenerateKey() { DESCryptoServiceProvider myDES ; myDES = new DESCryptoServiceProvider(); //myDES.GenerateKey();
return ASCIIEncoding.ASCII.GetString(myDES.Key); }

Mã hóa đối xứng

.NET Framework

void EcryptFile(string inputFile, string outputFile, string szSecureKey) { FileStream inStream, outStream; inStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read); outStream = new FileStream(outputFile,FileMode.Create, FileAccess.Write); DESCryptoServiceProvider myDES = new DESCryptoServiceProvider(); myDES.Key = ASCIIEncoding.ASCII.GetBytes(szSecureKey); myDES.IV = ASCIIEncoding.ASCII.GetBytes(szSecureKey); ICryptoTransform myDES_Ecryptor = myDES.CreateEncryptor(); CryptoStream myEncryptStream; myEncryptStream = new CryptoStream(outStream, myDES_Ecryptor, CryptoStreamMode.Write); byte[] byteBuffer = new byte[100]; long nTotalByteInput = inStream.Length, nTotalByteWritten = 0; int nCurReadLen = 0; while (nTotalByteWritten < nTotalByteInput) { nCurReadLen = inStream.Read(byteBuffer, 0, byteBuffer.Length); myEncryptStream.Write(byteBuffer, 0, nCurReadLen); nTotalByteWritten += nCurReadLen; } }

Mã hóa đối xứng

.NET Framework

Khóa bí mật : hello123

Nội dung
1. Mô hình mật mã của .NET Framework 2. Các thuật toán mã hóa .NET Framework hỗ trợ

3. .NET Framework Cryptography Namespace
4. Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework
7. Chứng nhận điện tử X.509

Thuật toán Băm
HashAlgorithm MD5 SHA1

.NET Framework

MD5CryptoServiceProvider
SHA1CryptoServiceProvider SHA1Managed

SHA256

SHA256Managed SHA384Managed SHA512Managed HMACSHA1 MACTripleDES

SHA384
SHA512 KeyHashAlgorithm

Thuật toán Băm
Thuật toán MD5
SHA1 SHA256

.NET Framework

Kích thước mảng Băm của các thuật toán
Kích thước mảng băm (bit)

SHA384
SHA512 HMACSHA1 MACTripleDES

128 160 256 384 512 160 64

Thuật toán Băm

.NET Framework

Kích thước mảng Băm của các thuật toán
Thuộc tính / Hàm Giải thích
Hash HashSize ComputeHash() Create() Trả về 1 mảng byte giá trị băm Trả về kích thước băm (tính theo bit) Hàm ước tính giá trị băm cho một mảng byte nhập vào hay từ 1 luồng Hàm tạo ra một đối tượng cho thuật toán băm đang sử dụng.

Nội dung
1. Mô hình mật mã của .NET Framework 2. Các thuật toán mã hóa .NET Framework hỗ trợ

3. .NET Framework Cryptography Namespace
4. Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework
7. Chứng nhận điện tử X.509

Mã hóa bất đối xứng

.NET Framework

AsymmetricAlgorithm DSA RSA DSACryptoServiceProvider

RSACryptoServiceProvider

Mã hóa bất đối xứng

.NET Framework

Kích thước khóa cho các thuật toán
Thuật toán RSA Kích t hước khóa hợp lệ 384 bits – 16384 bits (skip=8bit) 512 bits – 1024 bits (skip=64bit) Kích thước khóa mặc định 1024 bits = 128 bytes

DSA

1024 bits = 128 bytes

Thuật toán RSA hỗ trợ Encrypt/Decrypt Data + Sign/Verify Data. Thuật toán DSA hỗ trợ Sign/Verify Data.

Mã hóa bất đối xứng
Các hàm thông dụng :
Thuộc tính / Hàm
KeySize LegalKeySizes KeyExchangeAlgorithm

.NET Framework

Giải thích
Kích thước của modules khóa (tính theo bit) Các giá trị kích thước khóa hợp lệ (tính theo byte) của thuật toán mã hóa bất đối xứng hiện tại Chỉ định thuật toán trao đổi khóa được sử dụng và cách thức trao đổi khóa công khai và khóa bí mật

SignatureAlgorithm
FromXmlString()

Chỉ định tên thuật toán được sử dụng để ký trên đối tượng hiện thời.
Tái tạo lại đối tượng thuật toán mã hóa bất đối xứng từ 1 file XML. Trả về một thể hiện XML cho đối tượng bất đối xứng đang sử dụng.

ToXmlString()

Mã hóa bất đối xứng .NET Framework
Phát sinh cặp khóa
ToXmlString() Public key

Key Size (bits)

Implementation Of AsymantricAlg ToXmlString() Private key

Mã hóa bất đối xứng .NET Framework
static void Generatakey(string szKeyName, int nKeySize) { try { RSACryptoServiceProvider myRSA = new RSACryptoServiceProvider(nKeySize); myRSA.PersistKeyInCsp = false; string szPrivkey, szPubkey; szPrivkey = myRSA.ToXmlString(true); szPubkey = myRSA.ToXmlString(false); FileStream fsPub = new FileStream(szKeyName+"Pub.key", FileMode.Create,FileAccess.Write); byte[] bytePubkey = ASCIIEncoding.ASCII.GetBytes(szPubkey); fsPub.Write(bytePubkey, 0, bytePubkey.Length); fsPub.Close(); FileStream fsPriv = new FileStream(szKeyName+"Priv.key",FileMode.Create, FileAccess.Write); byte[] bytePrivkey = ASCIIEncoding.ASCII.GetBytes(szPrivkey); fsPriv.Write(bytePrivkey, 0, bytePrivkey.Length); fsPriv.Close();

} catch
}

{ }

Mã hóa bất đối xứng .NET Framework
Mã hóa / Ký dữ liệu với khóa công khai

FromXmlString()

Publickey

Implementation Of AsymantricAlg

Encrypt(..)

Encrypted Data

Data

Mã hóa bất đối xứng .NET Framework
static void EncryptFile(string szFileInput, string szFileEnc, string szPubKey) { try { FileStream fsPubkey = new FileStream(szPubKey, FileMode.Open, FileAccess.Read); FileStream fsInput = new FileStream(szFileInput, FileMode.Open, FileAccess.Read); FileStream fsOutput = new FileStream(szFileEnc, FileMode.Create, FileAccess.Write); RSACryptoServiceProvider myRSA = new RSACryptoServiceProvider(); byte[] bytePubkey = new byte[fsPubkey.Length]; fsPubkey.Read(bytePubkey, 0, bytePubkey.Length); myRSA.FromXmlString(ASCIIEncoding.ASCII.GetString(bytePubkey, 0, bytePubkey.Length)); byte[] byteInput = new byte[fsInput.Length]; fsInput.Read(byteInput, 0, byteInput.Length); byte[] byteEnc; byteEnc = myRSA.Encrypt(byteInput, false); fsOutput.Write(byteEnc, 0, byteEnc.Length); fsInput.Close(); fsPubkey.Close(); fsOutput.Close(); } catch (CryptographicException ex) {Console.WriteLine(ex.Message);} }

Mã hóa bất đối xứng .NET Framework
Giải mã / xác thực dữ liệu với khóa bí mật

FromXmlString()

PrivateKey

Implementation Of AsymantricAlg

Decrypt(..)

Data

Encrypted Data

Mã hóa bất đối xứng .NET Framework
static void DecryptFile(string szFileInput, string szFileEnc, string szPrivKey) { try { FileStream fsPrivkey = new FileStream(szPrivKey, FileMode.Open, FileAccess.Read); FileStream fsInput = new FileStream(szFileInput, FileMode.Open, FileAccess.Read); FileStream fsOutput = new FileStream(szFileEnc, FileMode.Create, FileAccess.Write); RSACryptoServiceProvider myRSA = new RSACryptoServiceProvider(); byte[] bytePrivkey = new byte[fsPrivkey.Length]; fsPrivkey.Read(bytePrivkey, 0, bytePrivkey.Length); myRSA.FromXmlString(ASCIIEncoding.ASCII.GetString(bytePrivkey, 0, bytePrivkey.Length)); byte[] byteInput = new byte[fsInput.Length]; fsInput.Read(byteInput, 0, byteInput.Length); byte[] byteDec; byteDec = myRSA.Decrypt(byteInput, false); fsOutput.Write(byteDec, 0, byteDec.Length); fsInput.Close(); fsPrivkey.Close(); fsOutput.Close(); } catch (CryptographicException ex) { Console.WriteLine(ex.Message);} }

Mã hóa bất đối xứng .NET Framework

Mã hóa bất đối xứng .NET Framework

Nội dung
1. Mô hình mật mã của .NET Framework 2. Các thuật toán mã hóa .NET Framework hỗ trợ

3. .NET Framework Cryptography Namespace
4. Thuật toán mã hóa đối xứng trong .NET Framework 5. Thuật toán băm trong .NET Framework 6. Thuật toán mã hóa bất đối xứng trong .NET Framework
7. Chứng nhận điện tử X.509

Chứng nhận điện tử
System.Security.Cryptography.X509Certificates

Quản lý và hiển thị thông tin của các chứng nhận điện tử (*.cer) Một số lớp cơ bản :
PublicKey X509Certificate2 X509Certificate2Collection X509Extention X509Store …

Chứng nhận điện tử

Chứng nhận điện tử

Chứng nhận điện tử

CÁM ƠN ĐÃ THAM DỰ BUỔI SEMINAR

Sign up to vote on this title
UsefulNot useful