1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

16 1,2K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 758,36 KB

Nội dung

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ứngnhư RSA

Trang 1

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

Trang 2

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ế

Trang 3

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)

Trang 4

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)

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

me.d ≡ 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) = m e mod n = m 17 mod 3233 ( với m là bản rõ) Hàm giải mã là: decrypt(c) = c d mod n = c 2753 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) = 123 17 mod 3233 = 855

Trang 5

Để giải mã văn bản có giá trị 855, ta thực hiện phép tính:

decrypt(855) = 855 2753 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)

Khóa công khai Khóa bí mật

C = Pebmod n p= Cdbmod 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

Nguồn cặp khóa của B

Bên gửi

A

Bên nhận

Trang 6

- 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

1.5 Độ 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:

- 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ố

1.6 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

Trang 7

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

Trang 8

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

Trang 9

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

Trang 10

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( pubkey ); streamWriter->Write(publicKey);

streamWriter->Close();

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);

Ngày đăng: 30/12/2015, 18:49

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w