tìm hiểu OpenSSL trong mã hóa dữ liệu

28 2.1K 22
tìm hiểu OpenSSL trong mã hóa dữ liệu

Đ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

MỤC LỤC 1 DANH MỤC HÌNH VẼ 2 MỞ ĐẦU Ngày nay, thông tin liên lạc trở nên phổ biến vô thuận lợi Song song với điều này, nhu cầu bảo mật thông tin ngày đặt cấp thiết Vì vậy, mật mã nghiên cứu rộng rãi, ứng dụng nhiều nói đến nhiều hết Và OpenSSL thư viện mật mã, miễn phí, cung cấp thuật toán, hàm băm mật mã,… ứng dụng rộng rãi thực tế Chính điều đó, chúng em lựa chọn đề tài “ Viết chương trình mã hóa file liệu sử dụng OpenSSL” để tìm hiểu Đề tài trình bày chương: Chương Tổng quan OpenSSL Chương lịch sử đời ứng dụng sử dụng OpenSSL Chương Giới thiệu nhóm hàm OpenSSL Những chức nhóm hàm Chương Các hàm sử dụng chương trình Trình bày chi tiết việc khởi tạo vai trò hàm trình bày Với hiểu biết kinh nghiệm hạn chế nên chắn tránh khỏi thiếu sót, chúng em mong nhận đóng góp ý kiến thầy, cô bạn để đề tài hoàn thiện Tháng năm 2014 Nhóm báo cáo 3 CHƯƠNG TỔNG QUAN VỀ OPENSSL 1.1 Giới thiệu OpenSSL Trong giới mạng ngày nay, nhiều ứng dụng cần bảo mật, mật mã công cụ để cung cấp bảo mật Các mục tiêu mật mã: bảo mật liệu, toàn vẹn liệu, xác thực chống chối bỏ sử dụng để ngăn chặn nhiều loại công dựa mạng nghe trộm, giả mạo IP, cướp kết nối giả mạo Và OpenSSL thư viện mã nguồn mở tiếng cho truyền thông bảo mật có nguồn gốc từ SSLeay SSLeay ban đầu viết Eric A Young Tim J Hudson bắt đầu vào năm 1995 Vào tháng 12 năm 1998, phiên OpenSSL phát hành 0.9.1c điểm khởi đầu OpenSSL công cụ hai một: thư viện mật mã công cụ SSL Thư viện SSL kế thừa tất tính tất phiên giao thức SSL TLSv1 Thư viện mật mã cung cấp thuật toán cho mật mã khóa đối xứng, mật mã khóa công khai, hàm băm mật mã, tạo số ngẫu nhiên giả lập xử lý chứng thư số Các dịch vụ cung cấp thư viện sử dụng công cụ SSL, TLS S/MINE chúng sử dụng để bổ sung cho SSH, OpenPGP chuẩn mật mã khác 1.2 Các phiên OpenSSL Các thư viện OpenSSL viết ngôn ngữ lập trình C, hoạt động tất tảng lớn, bao gồm tất các hệ điều hành Unix ( Linux, Solaris) tất phiên Microsoft Windows ( Windows XP, Vista, 7) 4 Các phiên phát hành : Phiên Ngày phát hành 0.9.1c 23/12/1998 0.9.2b 22/03/1999 0.9.3 25/05/1999 0.9.4 09/08/1999 0.9.5 28/02/2000 0.9.6 24/09/2000 0.9.7 31/12/2002 0.9.8 05/07/2005 1.0.0 29/03/2010 1.0.1 14/03/2012 1.3 Các chức đơn giản chương trình OpenSSL Chương trình OpenSSL công cụ dòng lệnh để sử dụng chức mật mã thư viện Crypto OpenSSL 1.3.1 Sử dụng để băm liệu OpenSSL hỗ trợ nhiều thuật toán băm: MD5, SHA, MDC2, RIPEMD160,… Để băm liệu, sử dụng lệnh: “dgst” Cú pháp: openssl dgst [Kiểu băm] [Tên file] 5 Ví dụ: openssl dgst –md5 demo.txt Các kiểu băm hỗ trợ là: md2, md4, md5, sha, sha1, sha256, sha512, mdc2 1.3.2 Mã hóa liệu Dữ liệu mã hóa thuật toán mã hóa đối xứng như: aes, base64, des, blowfish… cách sử dụng lệnh “enc” Cú pháp: openssl enc [Các tùy chọn] Các tùy chọn là: • -in: tệp tin cần mã hóa • -out: tệp tin tạo • -e: mã hóa • -d: giải mã • -des, -des3, -aes256… thuật toán dùng để mã hóa Ví dụ: openssl end –e –aes256 –in demo.txt –out demo.txt.ae 1.3.3 Tạo mật mã hóa Lệnh hữu ích cần sửa chửa trực tiếp file chứa mật Linux chẳng hạn /etc/passwd chẳng hạn Cú pháp lệnh là: openssl passwd [Chuỗi cần mã hóa] Các tùy chọn bản: • -crypt: chuẩn Linux • -1: mã hóa dựa md5 Ví dụ: openssl passwd “password123” 6 1.3.4 Ký xác thực chữ ký Để ký cho file demo.tar.gz ta dùng khóa riêng Lệnh sau cho file demo.tar.gz.sha1 openssl dgst -sha1 -sign mykey.pem -out demo.tar.gz.sha1 demo.tar.gz Khi xác thực bạn sử dụng lệnh sau: openssl dgst -sha1 -verify pubkey.pem -signature \ demo.tar.gz.sha1 demo.tar.gz 1.3.5 Tạo khóa RSA , DSA hay EC Để tạo khóa bí mật RSA ta dùng lệnh: openssl genrsa-out mykey.pem 1024 Trong mykey.pem file lưu khóa, 1024 số bit khóa Nếu muốn mã hóa file chứa khóa ta dùng lệnh sau: openssl genrsa-des3 mykey.pem 1024 Tạo khóa công khai RSA từ khóa bí mật: openssl genrsa-in mykey.pem –pubout –out mykey.pub Tạo thông số cho khóa DSA: openssl dsaparam dsaparam.pem 1024 Tạo khóa DSA thứ nhất: openssl gendsa key1.pem dsaparam.pem Tạo khóa DSA thứ hai: openssl gendsa key2.pem dsaparam.pem 1.3.6 Kiểm tra số nguyên tố Chúng ta kiểm tra xem số phải số nguyên tố hay không lệnh: openssl prime –option [number] 7 Trong đó: • –option hex , dec • [number] số cần kiểm tra 1.3.7 Kiểm tra hiệu suất phần cứng hệ thống Chúng ta đo hiệu suất hoạt động hệ thống phần cứng cách dùng lệnh: openssl speed Cách đo OpenSSL kiểm tra xem thời điểm hệ thống chạy thuật toán kiểm tra xem thuật toán hệ thống chạy hết thời gian Ngoài ra, OpenSSL hỗ trợ chức khác thiết lập kết nối với máy chủ SMTP an toàn , thiết lập máy chủ SSL từ dòng lệnh, xác minh, mã hóa ký thông điệp S/MIME 8 CHƯƠNG GIỚI THIỆU CÁC NHÓM HÀM CHÍNH TRONG OPENSSL 2.1 Hàm băm - MD5, SHA1, HMAC – md5.h, sha.h, hmac.h MD5_Init () , SHA1_Init() , HMAC_Init () : khởi tạo cấu trúc MD5_CTX , SHA_CTX Trả giá trị thành công , thất bại MD5_Update () , SHA1_Update () , HMAC_Update () : băm chuỗi đầu vào MD5_Final() , SHA1_Final() , HMAC_Final () : đặt tóm lược md Trả giá trị thành công , thất bại md không gian SHA_DIGEST_LENGTH == 20bytes đầu tạo HMAC_cleanup () : xóa khóa liệu từ HMAC_CTX 2.2 Mật mã khóa công khai 2.2.1 RSA – rsa.h RSA_new () : khởi tạo cấp phát cấu trúc RSA Hàm tương đương với hàm RSA_new_method(NULL) RSA_free () : giải phóng cấu trúc RSA thành phần Hàm gọi xóa vùng nhớ dành cho cấu trúc RSA trước trả lại cho hệ thống RSA_public_encrypt () : mã hóa bytes đầu vào sử dụng khóa công khai Nếu RSA_public_encrypt () trả giá trị -1 mã hóa bị lỗi RSA_sign () : ký lên thông điệp m kích thước m_len cách sử dụng khóa bí mật RSA RSA_sign () trả giá trị thành công , thất bại 9 RSA_verify () : xác nhận chữ ký sigbuf kích thước siglen phù hợp với thông điệp m RSA_verify() trả xác nhận , sai RSA_size() : cho biết kích thước modulus RSA Nó sử dụng để xác định giá trị mã hóa RSA cần nhớ RSA_generate_key () : tạo cặp khóa lưu trữ cấu trúc RSA Nếu việc tạo cặp key bị lỗi, RSA_generate_key() trả giá trị NULL Hàm RSA_generate_key_ex () có chức tương tự RSA_check_key () : kiểm tra cặp khóa RSA_generate_key() tạo có hợp lệ hay không Nó trả giá trị hợp lệ, không hợp lệ, -1 kiểm tra khóa bị lỗi RSA_get_ex_new_index () : dùng để đăng ký số liệu cho ứng dụng cụ thể RSA_get_ex_new_index () trả giá trị -1 thất bại RSA_set_ex_data (): sử dụng để thiết lập liệu cho ứng dụng RSA_set_ex_data () trả giá trị thành công, thất bại RSA_get_ex_data () : sử dụng để lấy liệu Trả giá trị thất bại RSA_private_decrypt () : sử dụng để giải mã mã Trả giá trị -1 thất bại 2.2.2 DSA – dsa.h DSA_new () : cấp phát khởi tạo cấu trúc DSA Nó tương đương với hàm DSA_new_method (NULL) DSA_size () : kích thước chữ ký DSA DSA_generate_parameters_ex() : tạo số nguyên tố p q để sử dụng DSA lưu giữ kết biến dsa Trả giá trị thành công , thất bại 10 10 X509_NAME_ENTRY_get_object () : lấy tên trường ne với cấu trúc ASN1_OBJECT X509_NAME_ENTRY_get_data () : lấy giá trị trường ne với cấu trúc ASN1_STRING X509_NAME_ENTRY_set_object () : đặt trường ne kiểu obj X509_NAME_ENTRY_set_data () : đặt giá trị trường ne kiểu string giá trị xác định bytes len X509_NAME_add_entry_by_txt(),X509_NAME_add_entry_by_OBJ (), X509_NAME_add_entry_by_NID () : thêm trường có tên xác định chuỗi field, đối tượng obj NID nid tương ứng X509_NAME_delete_entry () : xóa mục từ name vị trí loc Các mục xóa trả lại phải giải phóng X509_NAME_add_entry_by_txt(),X509_NAME_add_entry_by_OBJ (), X509_NAME_add_entry_by_NID(), X509_NAME_add_entry(): trả giá trị thành công, thất bại 2.5 Vào/ra , mã hóa liệu 2.5.1 EVP – evp.h Thư viện EVP cung cấp giao diện cấp cao với chức mã hóa EVP_PKEY_encrypt_init () : khởi tạo thuật toán khóa công khai sử dụng khóa pkey để mã hóa EVP_PKEY_encrypt () : thực mã hóa sử dụng ctx Các liệu giải mã xác định cách sử dụng đầu vào in thông số inlen EVP_PKEY_encrypt_init () , EVP_PKEY_encrypt () : trả giá trị thành công , âm thất bại 14 14 EVP_PKEY_decrypt_init () : chức khởi tạo thuật toán khóa công khai sử dụng pkey để giải mã EVP_PKEY_decrypt () : thực giải mã sử dụng ctx Các liệu giải mã xác định cách sử dụng đầu vào in thông số inlen EVP_PKEY_decrypt_init () , EVP_PKEY_decrypt () : trả giá trị thành công, âm thất bại EVP_PKEY_sign_init () : khởi tạo thuật toán khóa công khai sử dụng khóa pkey cho việc tạo chữ ký số EVP_PKEY_sign () : thực việc kí kết khóa công khai sử dụng ctx EVP_PKEY_sign_init () , EVP_PKEY_sign () trả giá trị thành công, âm thất bại EVP_PKEY_verify_init () : khởi tạo thuật toán mã hóa khóa công khai sử dụng khóa pkey để xác minh chữ ký số EVP_PKEY_verify () : thực kiểm tra chữ ký số 2.5.2 PEM – pem.h Các hàm PEM đọc ghi cấu trúc định dạng PEM Định dạng PEM đơn giản base64 mã hóa liệu bao quanh dòng header PEM_write_bio_PKCS8PrivateKey() PEM_write_PKCS8Privat eKey() viết khóa riêng cấu trúc EVP_PKEY PKCS # định dạng EncryptedPrivateKeyInfo sử dụng thuật toán mã hóa dựa PKCS # v2.0 PEM_write_bio_PKCS8PrivateKey_nid() PEM_write_PKCS8Pr ivateKey_nid () viết 15 khóa riêng 15 EncryptedPrivateKeyInfo PKCS # nhiên sử dụng PKCS # v1.5 PKCS # 12 thuật toán mã hóa thay 2.6 Chức phụ error codes – err.h Khi hàm gọi từ thư viện OpenSSL thất bại, điều thường thể giá trị trả về, mã lỗi lưu trữ hàng đợi lỗi liên quan đến chủ đề Thư viện err cung cấp chức để có mã lỗi thông báo lỗi cho ERR_get_error () : trả mã lỗi sớm từ hàng đợi chủ đề ERR_peek_error () : trả mã lỗi sớm từ hàng đợi chủ đề mà không sửa đổi ERR_peek_last_error () : trả mã lỗi từ hàng đợi chủ đề mà không sửa đổi ERR_GET_LIB (), ERR_GET_FUNC () ERR_GET_REASON () cho vị trí lí lỗi ERR_GET_LIB (), ERR_GET_FUNC () ERR_GET_REASON () macro ERR_error_string () : chuyển từ mã lỗi thành dòng lỗi theo ngôn ngữ hiểu Dòng lỗi có dạng sau : error:[error code]:[library name]:[function name]:[reason string] • error code số có chữ số Đây mã lỗi • library name , function name , reason string : văn ASCII 16 16 CHƯƠNG CÁC HÀM ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH Chương trình viết ngôn ngữ C++ với tùy chọn, tùy chọn hàm băm MD5 SHA1, tùy chọn mã hóa, mật mã đối xứng DES , mật mã khóa công khai RSA Ở DES có lựa chọn mã hóa thông điệp giải mã mã Đối với RSA có thêm lựa chọn tạo cặp key Các file thư viện h sử dụng bao gồm : des.h , md5.h , sha.h , rsa.h , evp.h , object.h , x509.h , err.h Đầu vào chuỗi lưu file định dạng txt có đường dẫn mặc định F:\input.txt , đầu mã lưu file F:\output.txt Đối với RSA, public key private key lưu file F:\rsa_public.key F:\rsa_private.key Sau hàm sử dụng chương trình 3.1 MD5 – Message Digest Algorithm Đây tạo mã Hash mật mã sử dụng phổ biến với giá trị Hash dài 128bit Bảng băm MD5 thường diễn tả chuỗi hệ thập lục phân 32 ký tự Đầu vào MD5 không giới hạn • MD5_Init(MD5_CTX *c) : khởi tạo cấu trúc MD5_CTX • MD5_Update(MD5_CTX *c, const void *data, size_t len) : băm chuỗi đầu vào sử dụng thuật toán MD5 o MD5_CTX *c : cấu trúc MD5_CTX o const void *data : chuỗi đầu vào o size_t len : độ dài chuỗi đầu vào • MD5_Final(unsigned char *md, MD5_CTX *c) : đặt tóm lược md o unsigned char *md : tóm lược gán vào biến md 17 17 o MD5_CTX *c : tóm lược chuỗi đầu Code: MD5_CTX ctx; MD5_Init(&ctx); MD5_Update(&ctx, msg, strlen(msg)); MD5_Final(digest, &ctx); 3.2 SHA1 – Secure Hash Algorithm SHA thuật toán băm chiều dùng nhiều hệ thống quan trọng SHA có thuật giải SHA1 (160bit) , SHA 224 (224bit) , SHA 256 (256bit) , SHA 384 (384bit) , SHA 512 (512bit) SHA1 nhận chuỗi đầu vào có độ dài tối đa 264 bit chuỗi đầu có độ dài 160 bit tức 40 ký tự • SHA1(const unsigned char *d, size_t n, unsigned char *md) : băm chuỗi đầu vào sử dụng SHA1 o const unsigned char *d : chuỗi đầu vào o size_t n : độ dài chuỗi đầu vào o unsigned char *md : tóm lược gán vào biến md Code: SHA1((unsigned char*)&msg, strlen(msg), (unsigned char*)&digest); 3.3 DES – Data Encrypt Standard Là chuẩn mã hóa FIPS chọn làm chuẩn thức năm 1976 Hiện DES xem không an toàn độ dài khóa 56bit nhỏ • DES_set_odd_parity(DES_cblock *key) : thiết lập cân khóa qua bit • DES_cblock *key : khóa loại DES_cblock 18 18 • DES_set_key_checked(const_DES_cblock *key,DES_key_schedule *schedule) : kiểm tra tính chẵn lẻ độ mạnh mẽ khóa Nếu giá trị trả -1 tính chẵn lẻ bị sai, trả -2 khóa yếu o const_DES_cblock *key : khóa loại DES_cblock o DES_key_schedule *schedule : thời hạn khóa Code : DES_set_key_checked( &Key2, &schedule ); Hình Sơ đồ khối mã hóa DES DES_cfb64_encrypt(const unsigned char *in,unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec,int *num,int enc) : thực chế độ CFB DES với 64bit thông tin phản hồi 19 19 o const unsigned char *in : thông điệp cần mã hóa o unsigned char *out : biến trả mã o long length : độ dài thông điệp o DES_key_schedule *schedule : thời hạn khóa o DES_cblock *ivec : khóa o DES_ENCRYPT : hàm mã hóa Code : DES_cfb64_encrypt( ( unsigned char * ) Msg, ( unsigned char * ) Res, size, &schedule, &Key2, &n, DES_ENCRYPT ); Hình 2: Sơ đồ khối giải mã DES • DES_cfb64_encrypt(const unsigned char *in,unsigned char *out, long length, DES_key_schedule *schedule, 20 20 DES_cblock *ivec,int *num,int enc) : thực chế độ CFB DES với 64bit thông tin phản hồi o const unsigned char *in : thông điệp cần giải mã o unsigned char *out : biến trả rõ o long length : độ dài mã o DES_key_schedule *schedule : thời hạn khóa o DES_cblock *ivec : khóa o DES_DECRYPT : hàm giải mã Code : DES_cfb64_encrypt( ( unsigned char * ) Msg, ( unsigned char * ) Res, size, &schedule, &Key2, &n, DES_DECRYPT ); 3.4 RSA RSA thuật toán mật mã khóa công khai Độ dài khóa từ 1024 đến 4096 bit Hiện khóa 1024 bị phá vỡ nên dùng khóa có độ dài từ 2048bit trở lên 21 21 Hình Sơ đồ khối trình tạo cặp key RSA • RSA_generate_key(int bits, unsigned long e,void (*callback)(int,int,void *),void *cb_arg) : tạo cặp khóa o int bits : độ dài khóa Code : RSA *keypair = RSA_generate_key(RSA_KEY_LENGTH, PUB_EXP, NULL, NULL); • RSA_check_key(const RSA *) : kiểm tra cặp khóa tạo có hợp lệ hay không , trả giát trị cặp khóa hợp lệ, không hợp lệ 22 22 o const RSA * : cặp khóa vừa tạo Code : RSA_check_key(keypair)); • PEM_write_RSAPublicKey(FILE *fp , const RSA *x) : ghi khóa công khai vào file o FILE *fp : file chứa khóa công khai o const RSA *x : khóa công khai RSA_geneate_key () tạo Code:PEM_write_RSAPublicKey(rsa_pubkey_file, keypair); • PEM_write_RSAPrivateKey(FILE *fp , RSA *x , const EVP_CIPHER *enc , unsigned char *kstr , int klen , pem_password_cb *cb , void *u) : ghi khóa bí mật vào file o FILE *fp : file chứa khóa bí mật o RSA *x : khóa bí mật RSA_geneate_key () tạo Code : PEM_write_RSAPrivateKey(rsa_privkey_file, keypair, NULL, NULL, 0, 0,NULL); 23 23 Hình 4: Sơ đồ khối mã hóa RSA • PEM_read_RSAPublicKey( FILE *fp , RSA *x , pem_password_cb *cb , void * u ) : đọc khóa công khai từ file o FILE *fp : file lưu giữ khóa công khai o RSA *x : biến chứa khóa công khai sau đọc từ file ( kiểu RSA) Code: PEM_read_RSAPublicKey(rsa_pubkey_file, &rsa_pubkey, NULL, NULL); • RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa,int padding) : mã hóa thông điệp sử dụng khóa công khai 24 24 o int flen : độ dài thông điệp o const unsigned char *from : chuỗi thông điệp o unsigned char *to : biến chứa mã sau mã hóa o RSA *rsa : khóa công khai o int padding : lược đồ chuyển đổi rõ Code : RSA_public_encrypt((int)strlen(msg),(unsigned char*)msg, (unsigned char*)encrypt, rsa_pubkey, RSA_PKCS1_OAEP_PADDING); Hình Sơ đồ khối giải mã RSA • PEM_read_RSAPrivateKey( FILE *fp , RSA *x , pem_password_cb *cb , void * u ) : đọc khóa bí mật từ file o FILE *fp : file lưu giữ khóa bí mật 25 25 o RSA *x : biến chứa khóa bí mật sau đọc từ file ( kiểu RSA) o ERR_print_errors_fp(stderr) : hàm kiểm tra lỗi đọc khóa Code : PEM_read_RSAPrivateKey(rsa_privkey_file, &rsa_prikey, NULL, NULL); • RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa,int padding) : giải mã mã để xem rõ o const unsigned char *from : mã o unsigned char *to : biến chứa rõ sau giải mã mã o RSA *rsa : khóa bí mật o int padding : lược đồ chuyển đổi rõ Code : RSA_private_decrypt(256, (unsigned char*)encrypt, (unsigned char*)decrypt, rsa_prikey , RSA_PKCS1_OAEP_PADDING); 26 26 KẾT LUẬN Sau trình tìm hiểu đề tài báo cáo, nhóm chúng em tìm hiểu thực số vấn đề sau: • Hiểu khái quát OpenSSL • Tìm hiểu hàm thư viện mật mã OpenSSL • Xây dựng chương trình demo mã hóa file liệu nhỏ việc sử dụng thuật toán mã hóa thư viện OpenSSL Bên cạnh đó, báo cáo mặt hạn chế: • Chương trình đơn giản, chưa có nhiều tùy chọn mã hóa chưa thân thiện với người dùng • Chưa xây dựng chương trình mã hóa file có dung lượng lớn • Chương trình chưa tối ưu mắc phải số lỗi Hướng phát triển báo cáo: • Xây dựng chương trình đồ họa thân thiện, dễ sử dụng • Chương trình tối ưu hơn, mã hóa file liệu có dung lượng lớn 27 27 TÀI LIỆU THAM KHẢO [1] http://www.openssl.org/ [2] http://en.wikipedia.org/wiki/OpenSSL [3] http://www.madboa.com/geek/openssl/ 28 28 [...]... khóa yếu thì trả về giá trị -2 DES_set_odd_parity () : thiết lập cân bằng khóa qua các bit 1 DES_ecb_encrypt() là mã hóa cơ bản của DES mã hóa hay giải mã 8-byte DES_cblock Nó luôn thay đổi dữ liệu đầu vào DES_ecb3_encrypt() mã hóa, giải mã khối đầu vào sử dụng 3 khóa mã hóa triple-DES trong chế độ ECB Hàm DES_ecb2_encrypt () được cung cấp để thực hiện 2 mã hóa Triple-DES bằng cách sử dụng KS1 để mã. .. Security Inc RC4 là một mật mã dòng với chiều dài khác nhau Thông thường ,sử dụng khóa 128 bit(16 byte) để mã hóa mạnh, RC4 bao gồm một giai đoạn thiết lập khóa, mã hóa và giải mã RC4_set_key (): thiết lập khóa RC4_KEY RC4 () : mã hóa hoặc giải mã Từ RC4 là một mật mã dòng(đầu vào được XOR với một dòng khóa giả ngẫu nhiên để tạo đầu ra) Giải mã sử dụng như các hàm gọi mã hóa RC4_set_key () và RC4 ()... khóa thì sẽ tốt cho mã hóa mạnh mẽ Blowfish có thể được sử dụng trong chế độ tương tự như DES Blowfish hiện là một trong những thuật toán mã hóa khối nhanh hơn DES và nhanh hơn nhiều so với IDEA hoặc RC2 BF_set_key (): thiết lập khóa BF_key 12 12 BF_ecb_encrypt() : chức năng mã hóa và giải mã Nó mã hóa hoặc giải mã 64 bít đầu tiên Enc sẽ quyết định nếu là mã hóa (BF_ENCRYPT) hay giải mã (BF_DECRYPT) BF_cbc_encrypt... hiện được một số vấn đề như sau: • Hiểu được khái quát về OpenSSL • Tìm hiểu được cơ bản về các hàm chính trong thư viện mật mã OpenSSL • Xây dựng được chương trình demo về mã hóa file dữ liệu nhỏ bằng việc sử dụng các thuật toán mã hóa của thư viện OpenSSL Bên cạnh đó, báo cáo vẫn còn những mặt hạn chế: • Chương trình còn khá đơn giản, chưa có nhiều tùy chọn mã hóa và chưa thân thiện với người dùng... X509_NAME_add_entry(): trả về giá trị 1 nếu thành công, 0 nếu thất bại 2.5 Vào/ra , mã hóa dữ liệu 2.5.1 EVP – evp.h Thư viện EVP cung cấp một giao diện cấp cao với chức năng mã hóa EVP_PKEY_encrypt_init () : khởi tạo một thuật toán khóa công khai sử dụng khóa pkey để mã hóa EVP_PKEY_encrypt () : thực hiện mã hóa sử dụng ctx Các dữ liệu được giải mã được xác định bằng cách sử dụng đầu vào in và thông số inlen EVP_PKEY_encrypt_init... chữ số Đây chính là mã lỗi • library name , function name , reason string : là văn bản ASCII 16 16 CHƯƠNG 3 CÁC HÀM ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH Chương trình được viết bằng ngôn ngữ C++ với 4 tùy chọn, 2 tùy chọn hàm băm bằng MD5 hoặc SHA1, 2 tùy chọn mã hóa, 1 là mật mã đối xứng DES , 2 là mật mã khóa công khai RSA Ở trong DES có 2 lựa chọn là mã hóa thông điệp hoặc giải mã bản mã Đối với RSA thì... KS1 để mã hóa cuối cùng 11 11 DES_ncbc_encrypt () mã hóa/ giải mã bằng cách sử dụng thuật toán mã hóa khối xâu chuỗi (CBC) của DES DES_xcbc_encrypt () là chế độ DESX RSA của DES Nó sử dụng inw và outw để “làm trắng” mật mã Inw và outw là bí mật (không như iv)và được coi là một phần của khóa Vì vậy khóa là sắp xếp của 24 byte Điều này tốt hơn so với CBC DES DES_ede3_cbc_encrypt () thực hiện 3 mã hóa DES... cấu trúc DSA 2.3 Mật mã khóa đối xứng 2.3.1 DES – des.h Có 2 giai đoạn với việc sử dụng mã hóa DES Đầu tiên sinh ra một DES_key_chedule() từ một khóa, thứ 2 là mã hóa DES_cblock () là một loại khóa của DES Loại này bao gồm 8 byte với số chẵn lẻ DES_random_key () : Tạo một khóa ngẫu nhiên Nếu khóa ngẫu nhiên không an toàn, giá trị trả về sẽ là 0 DES_set_key_checked() : kiểm tra khóa thông qua tính chẵn... DES_cfb_encrypt () mã hóa / giải mã bằng cách sử dụng chế độ phản hồi mật mã Cách thức này thực hiện với các mảng kí tự như mảng kí tự đầu ra, đầu vào DES_cfb64_encrypt () thực hiện chế độ CFB của DES với 64bit 2.3.2 Blowfish – blowfish.h Blowfish là một thuật toán mã hóa khối hoạt động trên 64bit(8byte) khối dữ liệu Nó sử dụng các độ dài khóa khác nhau, nhưng thông thường sử dụng 128 bit(16byte) khóa thì sẽ... : giải mã bản mã để xem bản rõ o const unsigned char *from : bản mã o unsigned char *to : biến chứa bản rõ sau khi đã giải mã bản mã o RSA *rsa : khóa bí mật o int padding : lược đồ chuyển đổi bản rõ Code : RSA_private_decrypt(256, (unsigned char*)encrypt, (unsigned char*)decrypt, rsa_prikey , RSA_PKCS1_OAEP_PADDING); 26 26 KẾT LUẬN Sau quá trình tìm hiểu đề tài báo cáo, nhóm chúng em đã tìm hiểu và ... thiết lập cân khóa qua bit DES_ecb_encrypt() mã hóa DES mã hóa hay giải mã 8-byte DES_cblock Nó thay đổi liệu đầu vào DES_ecb3_encrypt() mã hóa, giải mã khối đầu vào sử dụng khóa mã hóa triple-DES... lập khóa, mã hóa giải mã RC4_set_key (): thiết lập khóa RC4_KEY RC4 () : mã hóa giải mã Từ RC4 mật mã dòng(đầu vào XOR với dòng khóa giả ngẫu nhiên để tạo đầu ra) Giải mã sử dụng hàm gọi mã hóa. .. Sau trình tìm hiểu đề tài báo cáo, nhóm chúng em tìm hiểu thực số vấn đề sau: • Hiểu khái quát OpenSSL • Tìm hiểu hàm thư viện mật mã OpenSSL • Xây dựng chương trình demo mã hóa file liệu nhỏ

Ngày đăng: 24/12/2015, 14:28

Từ khóa liên quan

Mục lục

  • MỤC LỤC

  • DANH MỤC HÌNH VẼ

  • MỞ ĐẦU

  • Ngày nay, thông tin liên lạc đã trở nên rất phổ biến và vô cùng thuận lợi. Song song với điều này, nhu cầu bảo mật thông tin ngày càng được đặt ra cấp thiết hơn. Vì vậy, mật mã được nghiên cứu rộng rãi, được ứng dụng nhiều hơn và được nói đến nhiều hơn bao giờ hết. Và OpenSSL là thư viện mật mã, miễn phí, cung cấp các thuật toán, các hàm băm mật mã,… đã được ứng dụng rộng rãi trong thực tế.

  • Chính vì điều đó, chúng em đã lựa chọn đề tài “ Viết chương trình mã hóa file dữ liệu sử dụng OpenSSL” để tìm hiểu. Đề tài được trình bày trong 3 chương:

  • Chương 1. Tổng quan về OpenSSL. Chương này chỉ ra lịch sử ra đời cũng như những ứng dụng được sử dụng trong OpenSSL.

  • Chương 2. Giới thiệu về các nhóm hàm chính trong OpenSSL. Những chức năng cơ bản của các nhóm hàm.

  • Chương 3. Các hàm được sử dụng trong chương trình. Trình bày chi tiết việc khởi tạo cũng như vai trò của các hàm được trình bày.

  • Với hiểu biết và kinh nghiệm còn hạn chế nên chắc chắn vẫn không thể tránh khỏi những thiếu sót, chúng em mong nhận được sự đóng góp ý kiến của thầy, cô và các bạn để đề tài được hoàn thiện hơn.

  • Tháng 2 năm 2014

  • Nhóm báo cáo

  • CHƯƠNG 1. TỔNG QUAN VỀ OPENSSL

    • 1.3.1. Sử dụng để băm dữ liệu

    • CHƯƠNG 2. GIỚI THIỆU CÁC NHÓM HÀM CHÍNH TRONG OPENSSL

    • CHƯƠNG 3. CÁC HÀM ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH

    • Hình 3. Sơ đồ khối quá trình tạo cặp key RSA

    • [1]. http://www.openssl.org/

    • [2]. http://en.wikipedia.org/wiki/OpenSSL

    • [3]. http://www.madboa.com/geek/openssl/

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

Tài liệu liên quan