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

14 2.5K 23
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

Đ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

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.

Mục lục Lời mở đầu Cùng với phát triển khoa học kỹ thuật ứng dụng tin học lĩnh vực đời sống an ninh quân quốc phòng giao dịch thương mại điện tử… Song hành với phát triển vũ bão internet giao dịch điện tử nhu cầu bảo vệ thông tin hệ thống ứng dụng ngày trọng mà khoa học mật mã ứng dụng rộng rãi với mong muốn bảo vệ thông tin sở liệu quan trọng Mật mã mở nhiều hướng phát triển với đặc trưng riêng Ứng dụng khoa học mật mã không đơn mã hóa giải mã thông tin mà bao gồm nhiều vấn đề khác ví dụ 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 người sở hữu mã khóa (chứng nhận khóa công cộng), quy trình giúp trao đổi thông tin thực giao dịch điện tử an toàn Trong chương trình học tập an toàn thông tin sinh viên việc tự mã giải mã liệu quan trọng Nó giúp sinh viên tìm hiểu sâu thuật toán mã giải mã cung cách cung cấp thuật toán mã giải mã hệ điều hành Với lý Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI nhóm sinh viên chọn đề tài tìm hiểu viết chương trình mã hóa dựa thuật toán AES AES thuật toán mã đối xứng công nhận rộng rãi mức độ an toàn Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI Tổng quan AES 1.1 Quá trình phát triển Thuật toán dựa thiết kế Square có trước Daemen Rijmen Square lại thiết kế dựa 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 dễ dàng thực với tốc độ cao phần mềm phần cứng không đòi hỏi nhiều nhớ Do AES tiêu chuẩn mã hóa mới, triển khai sử dụng rộng rãi Tổng quan AES AES (viết tắt từ tiếng Anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa tiên tiến) thuật toán mã hóa khối phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa Giống tiêu chuẩn tiền nhiệm DES, AES kỳ vọng áp dụng phạm vi giới nghiên cứu kỹ lưỡng AES chấp thuận làm tiêu chuẩn liên bang Viện tiêu chuẩn công nghệ quốc gia Hoa kỳ (NIST) sau trình tiêu chuẩn hóa kéo dài năm Thuật toán thiết kế hai nhà mật mã học người Bỉ: Joan Daemen Vincent Rijmen Thuật toán đặt tên "Rijndael" tham gia thi thiết kế AES Mô tả thuật toán Mặc dù tên AES Rijndael thường gọi thay cho thực tế thuật toán không hoàn toàn giống AES làm việc với khối liệu (đầu vào đầu ra) 128 bít khóa có độ dài 128, 192 256 bít Rijndael làm việc với liệu khóa có Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI độ dài bội số 32 bít nằm khoảng từ 128 tới 256 bít Các khóa sử dụng chu trình tạo trình tạo khóa Rijndael Mỗi khóa cột gồm byte Hầu hết phép toán thuật toán AES thực trường hữu hạn byte Mỗi khối liệu 128 bit đầu vào chia thành 16 byte (mỗi byte bit),có thể xếp thành cột, cột phần tử ma trận 4x4 byte,nó gọi ma trận trạng thái, hay vắn tắt trạng thái (tiếng Anh: state, trang thái Rijndael có thêm cột) Trong trình thực thuật toán toán tử tác động để biến đổi ma trận trạng thái 2.1 Quá trình mã hóa Bao gồm bước: Khởi động vòng lặp • AddRoundKey: Mỗi cột trạng thái kết hợp với khóa theo thứ tự từ đầu dãy khóa Vòng lặp • SubBytes: phép (phi tuyến) byte trạng thái byte khác theo bảng tra (Rijndael S-box) • ShiftRows: dịch chuyển, hàng trạng thái dịch vòng theo số bước khác • MixColumns: trình trộn làm việc theo cột khối theo phép biến đổi tuyến tính • AddRoundKey Vòng lặp cuối • SubBytes Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI • • ShiftRows AddRoundKey Tại chu trình cuối bước MixColumns không thực 2.1 2.1.1 Bước SubBytes Các byte thông qua bảng tra S-box Đây trình phi tuyến thuật toán Hộp S-box tạo từ phép biến đổi khả nghịch trường hữu hạn GF (28) có tính chất phi tuyến Để chống lại công dựa đặc tính đại số, hộp S-box tạo nên cách kết hợp phép nghịch đảo với phép biến đổi affine khả nghịch Hộp S-box chọn để tránh điểm bất động (fixed point) Trong bước SubBytes, byte thay byte theo bảng tra, S; bij = S(aij) 2.1.2 Bước ShiftRows Các hàng dịch vòng số bước định Đối với AES, hàng đầu giữ nguyên Mỗi byte hàng thứ dịch vòng trái vị trí Tương tự, hàng thứ dịch vòng vị trí Do vậy, cột khối đầu bước bao gồm byte đủ cột khối đầu vào Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI Đối với Rijndael với độ dài khối khác số vị trí dịch chuyển khác Trong bước ShiftRows, byte hàng dịch vòng trái Số vị trí dịch chuyển tùy thuộc hàng 2.1.3 Bước MixColumns Bốn byte cột kết hợp lại theo phép biến đổi tuyến tính khả nghịch Mỗi khối byte đầu vào cho khối byte đầu với tính chất byte đầu vào ảnh hưởng tới byte đầu Cùng với bước ShiftRows, MixColumns tạo tính chất khuyếch tán cho thuật toán Mỗi cột xem đa thức trường hữu hạn nhân với đa thức (modulo ) Vì thế, bước xem phép nhân ma trận trường hữu hạn Trong bước MixColumns, cột nhân với hệ số cố định c(x) Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI 2.1 2.1.1 2.1.2 2.1.3 2.1.4 Bước AddRoundKey Tại bước này, khóa kết hợp với khối Khóa chu trình tạo từ khóa với trình tạo khóa Rijndael; khóa có độ dài giống khối Quá trình kết hợp thực cách XOR bít khóa với khối liệu Trong bước AddRoundKey, byte kết hợp với byte khóa chu trình sử dụng phép toán XOR An toàn Vào thời điểm năm 2006, dạng công lên AES thành công công kênh bên (side channel attack]) Vào tháng năm 2003, phủ Hoa kỳ tuyên bố AES sử dụng cho thông tin mật Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI "Thiết kế độ dài khóa thuật toán AES (128, 192 256 bít) đủ an toàn để bảo vệ thông tin xếp vào loại TỐI MẬT (secret) Các thông tin TUYỆT MẬT (top secret) phải dùng khóa 192 256 bít Các phiên thực AES nhằm mục đích bảo vệ hệ thống an ninh hay thông tin quốc gia phải NSA kiểm tra chứng nhận trước sử dụng." Điều đánh dấu lầ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 sử dụng mặc định khóa có độ dài 128 bít Phương pháp thường dùng để công dạng mã hóa khối thử kiểu công lên phiên có số chu trình thu gọn Đối với khóa 128 bít, 192 bít 256 bít, AES có tương ứng 10, 12 14 chu trình Tại thời điểm năm 2006, công thành công biết đến chu trình khóa 128 bít, chu trình với khóa 192 bít chu trình với khóa 256 bít Một số nhà khoa học lĩnh vực mật mã lo ngại an ninh AES Họ cho ranh giới số chu trình thuật toán số chu trình bị phá vỡ nhỏ Nếu kỹ thuật công cải thiện AES bị phá vỡ Ở đây, phá vỡ có nghĩa phương pháp công nhanh công kiểu duyệt toàn Vì công cần thực 2120 coi thành công công chưa thể thực thực tế Tại thời điểm nay, nguy không thực nguy hiểm bỏ qua Tấn công kiểu duyệt toàn quy mô thực distributed.net thực lên hệ thống 64 bít RC5 vào năm 2002 (Theo định luật Moore tương đương với việc công vào hệ thống 66 bít nay) Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI Một vấn đề khác cấu trúc toán học AES Không giống với thuật toán mã hóa khác, AES có mô tả toán học đơn giản Tuy điều chưa dẫn đến mối nguy hiểm số nhà nghiên cứu sợ có người lợi dụng cấu trúc tương lai Vào năm 2002, Nicolas Courtois Josef Pieprzyk phát công lý thuyết gọi công XSL điểm yếu tiềm tàng AES Tuy nhiên, vài chuyên gia mật mã học khác số vấn đề sở toán học công cho tác giả có sai lầm tính toán Việc công dạng có thực trở thành thực hay không để ngỏ công XSL suy đoán Tấn công kênh bên (Side channel attacks) Tấn công kênh bên không công trực tiếp vào thuật toán mã hóa mà thay vào đó, công lên hệ thống thực thuật toán có sơ hở làm lộ liệu Tháng năm 2005, Daniel J Bernstein công bố công lên hệ thống mã hóa AES OpenSL gọi Một máy chủ thiết kế để đưa tối đa thông tin thời gian thu công cần tới 200 triệu rõ lựa chọn Một số người cho công thực Internet với khoảng cách vài điểm mạng Tháng 10 năm 2005, Adi Shamir nhà nghiên cứu khác có nghiên cứu minh họa vài dạng khác Trong đó, công lấy khóa AES với 800 lần ghi 65 mili giây Tấn công yêu cầu kẻ công có khả chạy chương trình hệ thống thực mã hóa Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI Thực hành viết chương trình mã hóa giải mã với AES CryptoAPI Sử dụng C++ để thực thiết kế chương trình theo yêu cầu đề đặt : • Người dùng chọn kích thước khóa • Người dùng chọn chế độ hoạt động • Khóa mã hóa sinh ngẫu nhiên, mã hóa mật (SV chọn tùy ý hàm băm CSP để sinh khóa từ mật khẩu) • Tất thông tin cần thiết để giải mã (ngoại trừ mật khẩu) lưu file với mã 4.1 Phân tích yêu cầu – ý tưởng ban đầu Người dùng chọn kích thước khóa: Vì AES hỗ trợ kích thước khóa 128, 192 256 dùng checkbook để ghi lại lựa chọn người dùng với kích thước khóa Dùng byte đầu file mã để ghi lại kích thước khóa Người dùng chọn chế độ hoạt đông: Chỉ có chế độ hoạt động CBC , ECB, CFB, OFB dùng checkbook tạo giao diện dễ nhìn Khóa mã sinh ngẫu nhiên : Sử dụng hàm CryptGenKey hỗ trợ CryptoAPI song kích thước khóa sinh cài đặt kích thước khóa người dùng chọn Sinh khóa từ mật khẩu: Sử dụng hàm băm, băm mật sau sinh khóa Khóa sinh từ mật lưu trữ qua hàm CryptExportKey dùng cho việc giải mã Khóa sinh từ mật dùng đễ mã hóa khóa 10 Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI phiên Kích thước khóa phiên tiếp tục ghi vào file mã, sau đến mã khóa phiên Mã hóa: Sau có đầy đủ thông tin khóa phiên liệu cần mã thông qua giao diện ( file cần mã) định handle băm liệu 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 file mã với bit đầu tiên) Lấy kích thước khóa phiên từ file mã, sau lấy mã khóa phiên, tiến hành giải mã khóa phiên với handle tạo mã hóa với khóa sinh từ mật giống bước Việc giải mã tiến hành tương tự việc mã hóa Giao diện người dùng 4.2 • Thực Chọn kích thước khóa if (rbtn128->Checked) { key_size = "128"; } else { 11 Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI 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; } else { 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 CryptGenKey(hProv, algId, CRYPT_EXPORTABLE, &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ởi tạo hàm băm CryptCreateHash(hProv, CALG_MD5, NULL, 0, &phHash) • Băm mật 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 CryptExportKey(hKeyBuffF, NULL, PLAINTEXTKEYBLOB, 0, pbKeyBlob, &dwKeyBlobLen) o Mã hóa khóa phiên ghi vào file mã 12 Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI CryptEncrypt(hSessionKey, NULL, &dwKeyBlobLen, dwKeyBlobLen + 128 / 8); true, 0, keyBlobBuff, ShowMessage(dwKeyBlobLen); fwrite(&dwKeyBlobLen, sizeof(DWORD), 1, des); fwrite(keyBlobBuff, sizeof(BYTE), dwKeyBlobLen, des); • Mã hóa while (!feof(src)) { dwDataLen = fread(pbData, sizeof(BYTE), dwDataLen, src); if (feof(src)) { Final = true; BYTE* pbDataBuff = pbData; pbData = new 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 bóc tách tiến hành ngược lại với bước ghi Sau đọc đầy đủ thông tin cần thiết tiến hành giải mã tìm khóa phiên sau dùng khóa phiên để giải mã mã 13 Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI Kết luận Sau trình nghiên cứu, thực bài tập, chúng em tìm hiểu nắm số vấn đề Tìm hiểu ASE ứng dụng hệ mật AES mã hóa giải mã liệu với CrytoAPI Tìm hiểu lớp Cryto hỗ trợ lập trình bảo mật Xây dựng chương trình demo mã hóa giải mã (file) với crytoAPI 14 Hệ mật AES ứng dụng mã hóa giải mã liệu AES với CryptoAPI [...]... 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ã 13 Hệ mật AES và ứng dụng mã hóa và giải mã dữ liệu bằng AES với CryptoAPI Kết luậ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. .. 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 4.2 • Thực hiện Chọn kích thước khóa if (rbtn128->Checked) { key_size = "128"; } else { 11 Hệ mật AES và ứng dụng mã hóa và giải mã dữ liệu bằng AES với CryptoAPI if (rbtn192->Checked)... 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... đượ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 14 Hệ mật AES và ứng dụng mã hóa và giải mã dữ liệu bằng AES với CryptoAPI ... CryptExportKey(hKeyBuffF, NULL, PLAINTEXTKEYBLOB, 0, NULL, &dwKeyBlobLen) pbKeyBlob = new BYTE[dwKeyBlobLen]; • Lưu khóa vừa sinh CryptExportKey(hKeyBuffF, NULL, PLAINTEXTKEYBLOB, 0, pbKeyBlob, &dwKeyBlobLen) o Mã hóa khóa phiên và ghi vào file mã 12 Hệ mật AES và ứng dụng mã hóa và giải mã dữ liệu bằng AES với CryptoAPI CryptEncrypt(hSessionKey, NULL, &dwKeyBlobLen, dwKeyBlobLen + 128 / 8); true, 0, keyBlobBuff,... } • Sinh khóa ngẫu nhiên CryptGenKey(hProv, algId, CRYPT_EXPORTABLE, &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... des); • Mã hóa while (!feof(src)) { dwDataLen = fread(pbData, sizeof(BYTE), dwDataLen, src); if (feof(src)) { Final = true; BYTE* pbDataBuff = pbData; pbData = new 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... { key_size = "128"; } else { 11 Hệ mật AES và ứng dụng mã hóa và giải mã dữ liệu bằng AES với CryptoAPI 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

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

Từ khóa liên quan

Mục lục

  • Mục lục

  • Lời mở đầu

  • 1. Tổng quan về AES

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

    • 1. 2. Tổng quan về AES

    • 2. Mô tả thuật toán

      • 2.1. Quá trình mã hóa

        • 2.1.1. Bước SubBytes

        • 2.1.2 Bước ShiftRows

        • 2.1.3. Bước MixColumns

        • 2.1.4. Bước AddRoundKey

        • 3. An toàn

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

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

          • 4.2. Thực hiện

          • Kết luận

Tài liệu cùng người dùng

Tài liệu liên quan