1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu Hệ mật AES và ứng dụng mã hóa và giải mã dữ liệu bằng AES với CRYTOPAPI

15 2,5K 23

Đ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 15
Dung lượng 146,95 KB

Nội dung

Cùng với sự phát triển của khoa học kỹ thuật và ứng dụng tin học trong mọi lĩnh vực của đời sống như an ninh quân sự quốc phòng và trong các giao dịch thương mại điện tử… Song hành cùng với sự phát triển như vũ bão của internet và các giao dịch điện tử thì nhu cầu bảo vệ thông tin trong các hệ thống và ứng dụng ngày càng được chú trọng vì vậy mà khoa học mật mã được ứng dụng rộng rãi với mong muốn bảo vệ được những thông tin cơ sở dữ liệu quan trọng. Mật mã mở ra nhiều hướng phát triển với những đặc 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 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. Trong chương trình học tập về an toàn thông tin của sinh viên hiện nay thì việc tự mã và giải mã dữ liệu là khá quan trọng. Nó sẽ giúp sinh viên tìm hiểu sâu hơn về các thuật toán mã và giải mã cung như cách cung cấp các thuật toán mã và giải mã trên của các hệ điều hành. Với những lý do như trên nhóm sinh viên chọn đề tài tìm hiểu và viết chương trình mã hóa dựa trên thuật toán AES. AES là một trong những thuật toán mã đối xứng đã được công nhận rộng rãi về mức độ an toàn.

Trang 1

M c l c ục lục ục lục

Mục lục 1

Lời mở đầu 2

1 Tổng quan về AES 3

1.1 Quá trình phát triển 3

1 2 Tổng quan về AES 3

2 Mô tả thuật toán 3

2.1 Quá trình mã hóa 4

2.1.1 Bước SubBytes 5

2.1.2 Bước ShiftRows 5

2.1.3 Bước MixColumns 6

2.1.4 Bước AddRoundKey 7

3 An toàn 7

4 Thực hành viết chương trình mã hóa và giải mã với AES trên CryptoAPI 9

4.1 Phân tích các yêu cầu – ý tưởng ban đầu 10

4.2 Thực hiện 11

Kết luận 15

Trang 2

Lời mở đầu

Cùng với sự phát triển của khoa học kỹ thuật và ứng dụng tin học trong mọi lĩnh vực của đời sống như an ninh quân sự quốc phòng và trong các giao dịch thương mại điện tử…

Song hành cùng với sự phát triển như vũ bão của internet và các giao dịch điện tử thì nhu cầu bảo vệ thông tin trong các hệ thống và ứng dụng ngày càng được chú trọng vì vậy mà khoa học mật mã được ứng dụng rộng rãi với mong muốn bảo vệ được những thông tin cơ sở dữ liệu quan trọng Mật mã mở ra nhiều hướng phát triển với những đặc 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 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

Trong chương trình học tập về an toàn thông tin của sinh viên hiện nay thì việc tự mã và giải mã dữ liệu là khá quan trọng Nó sẽ giúp sinh viên tìm hiểu sâu hơn về các thuật toán mã và giải mã cung như cách cung cấp các thuật toán mã và giải mã trên của các hệ điều hành Với những lý do như trên nhóm sinh viên chọn đề tài tìm hiểu và viết chương trình mã hóa dựa trên thuật toán AES AES là một trong những thuật toán mã đối xứng đã được công nhận rộng rãi về mức độ an toàn

Trang 3

1 Tổng quan về AES

1.1 Quá trình phát triển

Thuật toán được dựa trên bản thiết kế Square có trước đó của Daemen

và Rijmen còn Square lại được thiết kế dựa trên Shark

Khác với với DES sử dụng mạng Feistel, Rijndael sử dụng mạng thay thế-hoán vị AES có thể dễ dàng thực hiện với tốc độ cao bằng phần mềm hoặc phần cứng và không đòi hỏi nhiều bộ nhớ Do AES là một tiêu chuẩn

mã hóa mới, nó đang được triển khai sử dụng rộng rãi

1 2 Tổng quan về AES

AES (viết tắt của từ tiếng Anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa tiên tiến) là một thuật toán mã hóa khối được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa Giống như tiêu chuẩn tiền nhiệm DES, AES được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng AES được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm

Thuật toán được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES

2 Mô tả thuật toán

Mặc dù 2 tên AES và Rijndael vẫn thường được gọi thay thế cho nhau

nhưng trên thực tế thì 2 thuật toán không hoàn toàn giống nhau AES chỉ làm việc với các khối dữ liệu (đầu vào và đầu ra) 128 bít và khóa có độ dài

128, 192 hoặc 256 bít trong khi Rijndael có thể làm việc với dữ liệu và khóa

Trang 4

có độ dài bất kỳ là bội số của 32 bít nằm trong khoảng từ 128 tới 256 bít Các khóa con sử dụng trong các chu trình được tạo ra bởi quá trình tạo khóa con Rijndael Mỗi khóa con cũng là một cột gồm 4 byte Hầu hết các phép toán trong thuật toán AES đều thực hiện trong một trường hữu hạn của các byte Mỗi khối dữ liệu 128 bit đầu vào được chia thành 16 byte (mỗi byte 8 bit),có thể xếp thành 4 cột, mỗi cột 4 phần tử hay là một ma trận 4x4 của các byte,nó được gọi là ma trận trạng thái, hay vắn tắt là trạng thái (tiếng Anh:

state, trang thái trong Rijndael có thể có thêm cột) Trong quá trình thực

hiện thuật toán các toán tử tác động để biến đổi ma trận trạng thái này

2.1 Quá trình mã hóa

Bao gồm các bước:

1 Khởi động vòng lặp

 AddRoundKey: Mỗi cột của trạng thái đầu tiên lần lượt được kết hợp với một khóa con theo thứ tự từ đầu dãy khóa

2 Vòng lặp

 SubBytes: đây là phép thế (phi tuyến) trong đó mỗi byte trong trạng thái sẽ được thế bằng một byte khác theo bảng tra (Rijndael S-box)

 ShiftRows: dịch chuyển, các hàng trong trạng thái được dịch vòng theo số bước khác nhau

 MixColumns: quá trình trộn làm việc theo các cột trong khối theo một phép biến đổi tuyến tính

 AddRoundKey

3 Vòng lặp cuối

Trang 5

 SubBytes

 ShiftRows

 AddRoundKey

Tại chu trình cuối thì bước MixColumns không thực hiện

2.1.1 Bước SubBytes

Các byte được thế thông qua bảng tra S-box Đây chính là quá trình phi tuyến của thuật toán Hộp S-box này được tạo ra từ một phép biến đổi

khả nghịch trong trường hữu hạn GF (2 8) có tính chất phi tuyến Để chống lại các tấn công dựa trên các đặc tính đại số, hộp S-box này được tạo nên bằng cách kết hợp phép nghịch đảo với một phép biến đổi affine khả nghịch Hộp S-box này cũng được chọn để tránh các điểm bất động (fixed point)

Trong bước SubBytes, mỗi byte được thay thế bằng một byte theo

bảng tra, S; b ij = S(a ij )

2.1.2 Bước ShiftRows

Các hàng được dịch vòng một số bước nhất định Đối với AES, hàng đầu được giữ nguyên Mỗi byte của hàng thứ 2 được dịch vòng trái một vị trí Tương tự, các hàng thứ 3 và 4 được dịch vòng 2 và 3 vị trí Do vậy, mỗi cột khối đầu ra của bước này sẽ bao gồm các byte ở đủ 4 cột khối đầu vào

Trang 6

Đối với Rijndael với độ dài khối khác nhau thì số vị trí dịch chuyển cũng khác nhau

Trong bước ShiftRows, các byte trong mỗi hàng được dịch vòng trái

Số vị trí dịch chuyển tùy thuộc từng hàng

2.1.3 Bước MixColumns

Bốn byte trong từng cột được kết hợp lại theo một phép biến đổi tuyến tính khả nghịch Mỗi khối 4 byte đầu vào sẽ cho một khối 4 byte ở đầu ra với tính chất là mỗi byte ở đầu vào đều ảnh hưởng tới cả 4 byte đầu ra Cùng với bước ShiftRows, MixColumns đã tạo ra tính chất khuyếch tán cho thuật toán Mỗi cột được xem như một đa thức trong trường hữu hạn và được nhân

thể được xem là phép nhân ma trận trong trường hữu hạn

Trong bước MixColumns, mỗi cột được nhân với một hệ số cố định

c(x).

Trang 7

2.1.4 Bước AddRoundKey

Tại bước này, khóa con được kết hợp với các khối Khóa con trong mỗi chu trình được tạo ra từ khóa chính với quá trình tạo khóa con Rijndael; mỗi khóa con có độ dài giống như các khối Quá trình kết hợp được thực hiện bằng cách XOR từng bít của khóa con với khối dữ liệu

Trong bước AddRoundKey, mỗi byte được kết hợp với một byte trong khóa con của chu trình sử dụng phép toán XOR

3 An toàn

Vào thời điểm năm 2006, dạng tấn công lên AES duy nhất thành công

là tấn công kênh bên (side channel attack]) Vào tháng 6 năm 2003, chính phủ Hoa kỳ tuyên bố AES có thể được sử dụng cho thông tin mật

"Thiết kế và độ dài khóa của thuật toán AES (128, 192 và 256 bít) là đủ an toàn để bảo vệ các thông tin được xếp vào loại TỐI MẬT (secret) Các thông tin TUYỆT MẬT (top secret) sẽ phải dùng khóa

192 hoặc 256 bít Các phiên bản thực hiện AES nhằm mục đích bảo

vệ hệ thống an ninh hay thông tin quốc gia phải được NSA kiểm tra

và chứng nhận trước khi sử dụng."

Trang 8

-Điều này đánh dấu lần đầu tiên công chúng có quyền tiếp xúc với thuật toán mật mã mà NSA phê chuẩn cho thông tin TUYỆT MẬT Nhiều phần mềm thương mại hiện nay sử dụng mặc định khóa có độ dài 128 bít

Phương pháp thường dùng nhất để tấn công các dạng mã hóa khối là thử các kiểu tấn công lên phiên bản có số chu trình thu gọn Đối với khóa

128 bít, 192 bít và 256 bít, AES có tương ứng 10, 12 và 14 chu trình Tại thời điểm năm 2006, những tấn công thành công được biết đến là 7 chu trình đối với khóa 128 bít, 8 chu trình với khóa 192 bít và 9 chu trình với khóa

256 bít

Một số nhà khoa học trong lĩnh vực mật mã lo ngại về an ninh của AES Họ cho rằng ranh giới giữa số chu trình của thuật toán và số chu trình

bị phá vỡ quá nhỏ Nếu các kỹ thuật tấn công được cải thiện thì AES có thể

bị phá vỡ Ở đây, phá vỡ có nghĩa chỉ bất cứ phương pháp tấn công nào

nhanh hơn tấn công kiểu duyệt toàn bộ Vì thế một tấn công cần thực hiện

2120 cũng được coi là thành công mặc dù tấn công này chưa thể thực hiện trong thực tế Tại thời điểm hiện nay, nguy cơ này không thực sự nguy hiểm

và có thể bỏ qua Tấn công kiểu duyệt toàn bộ quy mô nhất đã từng thực hiện là do distributed.net thực hiện lên hệ thống 64 bít RC5 vào năm 2002 (Theo định luật Moore thì nó tương đương với việc tấn công vào hệ thống

66 bít hiện nay)

Một vấn đề khác nữa là cấu trúc toán học của AES Không giống với các thuật toán mã hóa khác, AES có mô tả toán học khá đơn giản Tuy điều này chưa dẫn đến mối nguy hiểm nào nhưng một số nhà nghiên cứu sợ rằng

sẽ có người lợi dụng được cấu trúc này trong tương lai

Vào năm 2002, Nicolas Courtois và Josef Pieprzyk phát hiện một tấn công trên lý thuyết gọi là tấn công XSL và chỉ ra điểm yếu tiềm tàng của

Trang 9

AES Tuy nhiên, một vài chuyên gia về mật mã học khác cũng chỉ ra một số vấn đề trong cơ sở toán học của tấn công này và cho rằng các tác giả đã có sai lầm trong tính toán Việc tấn công dạng này có thực sự trở thành hiện thực hay không vẫn còn để ngỏ và cho tới nay thì tấn công XSL vẫn chỉ là suy đoán

Tấn công kênh bên (Side channel attacks)

Tấn công kênh bên không tấn công trực tiếp vào thuật toán mã hóa mà thay vào đó, tấn công lên các hệ thống thực hiện thuật toán có sơ hở làm lộ

dữ liệu

Tháng 4 năm 2005, Daniel J Bernstein công bố một tấn công lên hệ thống mã hóa AES trong OpenSL gọi là Một máy chủ được thiết kế để đưa

ra tối đa thông tin về thời gian có thể thu được và cuộc tấn công cần tới 200 triệu bản rõ lựa chọn Một số người cho rằng tấn công không thể thực hiện được trên Internet với khoảng cách vài điểm mạng

Tháng 10 năm 2005, Adi Shamir và 2 nhà nghiên cứu khác có một bài nghiên cứu minh họa một vài dạng khác Trong đó, một tấn công có thể lấy được khóa AES với 800 lần ghi trong 65 mili giây Tấn công này yêu cầu kẻ tấn công có khả năng chạy chương trình trên chính hệ thống thực hiện mã hóa

Trang 10

4 Thực hành viết chương trình mã hóa và giải mã với AES trên CryptoAPI

Sử dụng C++ để thực hiện thiết kế chương trình theo các yêu cầu của

đề bài đặt ra là :

 Người dùng được chọn kích thước khóa

 Người dùng được chọn chế độ hoạt động

 Khóa mã hóa được sinh ngẫu nhiên, được mã hóa bằng mật khẩu (SV được chọn tùy ý hàm băm và CSP để sinh khóa từ mật khẩu)

 Tất cả thông tin cần thiết để giải mã (ngoại trừ mật khẩu) được lưu trong cùng một file với bản mã

4.1 Phân tích các yêu cầu – ý tưởng ban đầu

Người dùng được chọn kích thước khóa: Vì AES chỉ hỗ trợ 3 kích thước khóa là 128, 192 và 256 cho nên có thể dùng một checkbook để ghi lại

sự lựa chọn của người dùng với kích thước khóa Dùng 3 byte đầu của file

mã để ghi lại kích thước khóa

Người dùng được chọn chế độ hoạt đông: Chỉ có 4 chế độ hoạt động lần lượt là CBC , ECB, CFB, OFB cho nên dùng checkbook sẽ tạo ra giao diện dễ nhìn

Khóa mã được sinh ngẫu nhiên : Sử dụng hàm CryptGenKey được hỗ trợ bởi CryptoAPI song kích thước khóa sinh thì được cài đặt bởi kích thước khóa của người dùng đã chọn

Trang 11

Sinh khóa từ mật khẩu: Sử dụng các hàm băm, băm mật khẩu sau đó sinh khóa Khóa sinh ra từ mật khẩu được lưu trữ qua hàm CryptExportKey dùng cho việc giải mã Khóa sinh ra từ mật khẩu được dùng đễ mã hóa khóa phiên Kích thước khóa phiên được tiếp tục ghi vào file mã, sau đó đến bản

mã của khóa phiên

Mã hóa: Sau khi có được đầy đủ các thông tin về khóa phiên cũng như

dữ liệu cần mã thông qua giao diện ( file cần mã) thì chỉ định handle băm dữ liệu và tiến hành mã hóa

Giải mã: đọc kích thước khóa từ file ( kích thước khóa đã ghi vào đầu tiên của file mã với 3 bit đầu tiên)

Lấy kích thước khóa phiên từ file mã, sau đó lấy bản mã của khóa phiên, tiến hành giải mã khóa phiên với handle đã tạo khi mã hóa với khóa được sinh ra từ mật khẩu giống bước trên

Việc giải mã tiến hành tương tự như việc mã hóa

Giao diện người dùng

Trang 12

4.2 Thực hiện

 Chọn kích thước khóa

if (rbtn128->Checked) {

key_size = "128";

}

else

{

if (rbtn192->Checked) {

key_size = "192";

}

else

{

key_size = "256";

}

}

 Ghi lại kích thước khóa vào file

fwrite(key_size, sizeof(BYTE), 3, des)

 Chọn chế độ hoạt động:

{

if (rbtnCBC->Checked) { // Nếu người dùng chọn chế độ CBC

return CRYPT_MODE_CBC;

}

else

{

if (rbtnCFB->Checked) { // Nếu người dùng chọn chế độ CFB

return CRYPT_MODE_CFB;

}

Trang 13

{

if (rbtnECB->Checked) { // Nếu người dùng chọn chế độ ECB

return CRYPT_MODE_ECB;

}

else

{

return CRYPT_MODE_OFB; // Nếu người dùng chọn chế độ OFB }

}

}

}

 Sinh khóa ngẫu nhiên

&hSessionKey)

 Ghi kích thước khóa vào file mã

fwrite(key_size, sizeof(BYTE), 3, des)

o Sinh khóa từ mật khẩu

 Khởi tạo hàm băm

CryptCreateHash(hProv, CALG_MD5, NULL, 0, &phHash)

 Băm mật khẩu

CryptHashData(phHash, pbData, dwDataLen, 0)

 Sinh khóa

CryptDeriveKey(hProv, algId, phHash, 0, &hSessionKey)

 Lấy kích thước khóa vừa sinh

CryptExportKey(hKeyBuffF, NULL, PLAINTEXTKEYBLOB, 0, NULL, &dwKeyBlobLen)

pbKeyBlob = new BYTE[dwKeyBlobLen];

 Lưu khóa vừa sinh

Trang 14

CryptExportKey(hKeyBuffF, NULL, PLAINTEXTKEYBLOB, 0, pbKeyBlob, &dwKeyBlobLen)

o Mã hóa khóa phiên và ghi vào file mã

CryptEncrypt(hSessionKey, NULL, true, 0, keyBlobBuff,

&dwKeyBlobLen, dwKeyBlobLen + 128 / 8);

ShowMessage(dwKeyBlobLen);

fwrite(&dwKeyBlobLen, sizeof(DWORD), 1, des);

fwrite(keyBlobBuff, sizeof(BYTE), dwKeyBlobLen, des);

while (!feof(src))

{ dwDataLen = fread(pbData, sizeof(BYTE), dwDataLen, src);

if (feof(src)) {

Final = true;

BYTE* pbDataBuff = pbData;

BYTE[dwBlockLen*dwBlockPerBuffer + dwBlockLen];

pbData = pbDataBuff;

} CryptEncrypt(hSessionKey, NULL, Final, 0, pbData, &dwDataLen, dwDataLen + dwBlockLen);

fwrite(pbData, sizeof(BYTE), dwDataLen, des);

} Các bước đọc file được bóc tách và tiến hành ngược lại với bước ghi Sau khi đọc đầy đủ thông tin cần thiết thì tiến hành giải mã tìm khóa phiên sau đó dùng khóa phiên để giải mã bản mã

Trang 15

K t lu n ết luận ận

Sau quá trình nghiên cứu, thực hiện bài tập, chúng em đã tìm hiểu và nắm được một số vấn đề như

Tìm hiểu về ASE và ứng dụng hệ mật AES trong mã hóa và giải mã

dữ liệu với CrytoAPI Tìm hiểu về lớp Cryto hỗ trợ trong lập trình bảo mật

Xây dựng được chương trình demo về mã hóa và giải mã (file) với crytoAPI

Ngày đăng: 27/06/2016, 13:09

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w