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

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

28 2,1K 22

Đ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 28
Dung lượng 200,8 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thư viện mật mã cung cấp các thuật toán chomật mã khóa đối xứng, mật mã khóa công khai, hàm băm mật mã, tạo ra số ngẫu nhiên giả lập và xử lý chứng thư số.. Các chức năng đơn giản của ch

Trang 1

MỤC LỤC

Trang 2

DANH MỤC HÌNH VẼ

Trang 3

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àytrong 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ôngthể 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

Trang 4

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

1.1 Giới thiệu về OpenSSL

Trong thế giới mạng ngày nay, nhiều ứng dụng cần bảo mật, mật mã làmột trong những công cụ chính để cung cấp bảo mật Các mục tiêu chínhcủa mật mã: bảo mật dữ liệu, toàn vẹn dữ liệu, xác thực và chống chối bỏ

có thể được sử dụng để ngăn chặn nhiều loại tấn công dựa trên mạng nhưnghe trộm, giả mạo IP, cướp kết nối và giả mạo

Và OpenSSL là một thư viện mã nguồn mở nổi tiếng nhất cho truyềnthông bảo mật có nguồn gốc từ SSLeay SSLeay ban đầu được viết bởiEric A Young và Tim J Hudson bắt đầu vào năm 1995 Vào tháng 12năm 1998, phiên bản đầu tiên của OpenSSL đã được phát hành là 0.9.1cnhư điểm khởi đầu OpenSSL cơ bản là bộ công cụ hai trong một: một làthư viện mật mã và một là bộ công cụ SSL

Thư viện SSL kế thừa tất cả các tính năng của tất cả các phiên bản củagiao thức SSL và TLSv1 Thư viện mật mã cung cấp các thuật toán chomật mã khóa đối xứng, mật mã khóa công khai, hàm băm mật mã, tạo ra

số ngẫu nhiên giả lập và xử lý chứng thư số Các dịch vụ được cung cấpbởi thư viện này được sử dụng bởi các công cụ của SSL, TLS và S/MINE

và chúng cũng được sử dụng để bổ sung cho SSH, OpenPGP và các chuẩnmật mã khác

1.2 Các phiên bản của OpenSSL

Các thư viện của OpenSSL được viết bằng ngôn ngữ lập trình C, nóhoạt động trên tất cả các nền tảng lớn, bao gồm tất các các hệ điều hànhUnix ( Linux, Solaris) và tất cả các phiên bản của Microsoft Windows( Windows XP, Vista, 7)

Trang 5

1.3 Các chức năng đơn giản của chương trình OpenSSL

Chương trình OpenSSL là một công cụ dòng lệnh để sử dụng các chứcnăng mật mã của các thư viện Crypto của OpenSSL

Trang 6

• -in: tệp tin cần mã hóa

• -out: tệp tin sẽ tạo ra

• -e: mã hóa

• -d: giải mã

• -des, -des3, -aes256… là các 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 khẩu đã được mã hóa

Lệnh này hữu ích khi cần sửa chửa trực tiếp các file chứa mật khẩucủa Linux chẳng hạn như /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 cơ bản:

• -crypt: chuẩn Linux

• -1: mã hóa dựa trên md5

Ví dụ: openssl passwd “password123”

Trang 7

1.3.5 Tạo khóa RSA , DSA hay EC

Để tạo khóa bí mật RSA ta có thể dùng lệnh:

openssl genrsa-out mykey.pem 1024

Trong đó mykey.pem là file lưu khóa, 1024 là số bit khóa Nếu muốn

mã hóa luôn file chứa khóa ta có thể dùng lệnh sau:

openssl genrsa-des3 ra 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 các thông số cho khóa DSA:

openssl dsaparam ra dsaparam.pem 1024

Tạo khóa DSA thứ nhất:

openssl gendsa ra 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 có thể kiểm tra xem một số phải là số nguyên tố hay khôngbằng lệnh:

openssl prime –option [number]

Trang 8

Trong đó:

• –option có thể là hex , dec

• [number] số cần kiểm tra

1.3.7 Kiểm tra hiệu suất phần cứng của hệ thống

Chúng ta có thể đo hiệu suất hoạt động của hệ thống phần cứng bằngcách dùng lệnh:

openssl speed

Cách đo ở đây là OpenSSL sẽ kiểm tra xem trong một thời điểm hệthống có thể chạy được bao nhiêu thuật toán chứ không phải kiểm tra xemmột thuật toán thì hệ thống chạy hết bao nhiêu thời gian

Ngoài ra, OpenSSL còn hỗ trợ các chức năng khác như thiết lập kếtnối với một máy chủ SMTP an toàn , thiết lập một máy chủ SSL từ dònglệnh, xác minh, mã hóa và ký một thông điệp S/MIME

Trang 9

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

TRONG OPENSSL2.1 Hàm băm - MD5, SHA1, HMAC – md5.h, sha.h, hmac.h

MD5_Init () , SHA1_Init() , HMAC_Init () : khởi tạo một cấutrúc MD5_CTX , SHA_CTX Trả về giá trị 1 nếu thành công , 0 nếu thất bại

MD5_Update () , SHA1_Update () , HMAC_Update () : bămchuỗi đầu vào

MD5_Final() , SHA1_Final() , HMAC_Final () : đặt bản tóm

lược trong md Trả về giá trị 1 nếu thành công , 0 nếu thất bại.

md là không gian do SHA_DIGEST_LENGTH == 20bytes đầu ra tạo ra

HMAC_cleanup () : xóa các khóa và dữ liệu từ HMAC_CTX.

2.2 Mật mã khóa công khai

RSA_public_encrypt () : mã hóa các bytes đầu vào sử dụng khóacông khai Nếu RSA_public_encrypt () trả về giá trị -1 thì mã hóa đã

bị lỗi

RSA_sign () : ký lên thông điệp m kích thước m_len bằng cách sử

dụng khóa bí mật RSA RSA_sign () trả về giá trị 1 là thành công , 0 làthất bại

Trang 10

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ả về 1 là xác nhận đúng , 0 là sai.

RSA_size() : cho biết kích thước modulus RSA Nó có thể được sửdụng để xác định một giá trị mã hóa RSA cần bao nhiêu bộ nhớ

RSA_generate_key () : tạo ra một cặp khóa và lưu trữ nó trong cấutrúc RSA Nếu việc tạo cặp key bị lỗi, RSA_generate_key() sẽ trả về giátrị NULL Hàm RSA_generate_key_ex () cũng có chức năng tương tự

RSA_check_key () : kiểm tra cặp khóa do RSA_generate_key() tạo

ra có hợp lệ hay không Nó trả về giá trị 1 là hợp lệ, 0 là không hợp lệ, -1

là kiểm tra khóa bị lỗi

RSA_get_ex_new_index () : được dùng để đăng ký một số dữ liệucho ứng dụng cụ thể RSA_get_ex_new_index () trả về giá trị -1 là thấtbại

RSA_set_ex_data (): được sử dụng để thiết lập dữ liệu cho ứngdụng RSA_set_ex_data () trả về giá trị 1 là thành công, 0 là thất bại

RSA_get_ex_data () : được sử dụng để lấy dữ liệu Trả về giá trị 0

DSA_size () : kích thước chữ ký DSA

DSA_generate_parameters_ex() : tạo ra các số nguyên tố p và q để

sử dụng trong DSA và lưu giữ kết quả trong biến dsa Trả về giá trị 1 nếu

thành công , 0 nếu thất bại

Trang 11

DSA_dup_DH () : tạo ra một cấu trúc DH Trả về giá trị NULL là thất

DSA_get_ex_new_index () , DSA_set_ex_data () , DSA_get_ex_data () : thêm dữ liệu cụ thể cho các 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ẫunhiê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 lẻ Nếutính chẵn lẻ sai, nó được trả về giá trị -1 Nếu 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óaTriple-DES bằng cách sử dụng KS1 để mã hóa cuối cùng

Trang 12

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 CBC với 3khóa Điều này có nghĩa mỗi hoạt động DES trong chế độ CBC làC=E(ks3,D,KS2,E(KS1,M)) Chế độ này được sử dụng bởi SSL

DES_ede2_cbc_encrypt () thực hiện 2 khóa Triple –DES bằng cách

sử dụng lại KS1 cho mã hóa thức C=E(KS1,D (KS2,E(KS1,M)) Hìnhthức triple-DES được sử dụng bởi các thư viện RSAREF

DES_pcbc_encrypt () mã hóa/giải mã bằng cách sử dụng chế độ mãhóa khối chaining được sử dụng bởi Kerberos.v4 Các thông số của nócũng giống như DES_ncbc_encrypt ().

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

so với IDEA hoặc RC2

BF_set_key (): thiết lập khóa BF_key

Trang 13

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 () là hàm chuỗi mã hóa khối cho Blowfish

BF_cfb64_encrypt() là chế độ OFB cho blowfish với thông tin phảnhồi 64bit Nó sử dụng các thông số tượng tự như BF_ecb_encrypt(), vàphải được tạo theo cùng một cách

BF_ofb64_encrypt() là chế độ CFB cho Blowfish với thông tin phảnhồi 64 bit

2.3.3 RC4 – rc4.h

Thư viện này thực hiện các thuật toán mã hóa RC4 Nó được cho làtương thích với RC4[TM], một thuật toán mã hóa độc quyền của RSASecurity 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ạnthiế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óagiả 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ông trả về giá trị

2.4 Chứng thực x509 – x509.h , x509_vfy.h , x509v3.h

Chứng thực X.509 là một nhóm có cấu trúc thông tin về một cá nhân,một thiết bị, hoặc bất cứ điều gì Một X.509 CRL (Certificate RevocationList – danh sách thu hồi chứng thực) là một công cụ để giúp xác định xemmột chứng chỉ còn hiệu lực hay không?

Trang 14

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

và giá trị xác định bằng bytes và len.

X509_NAME_add_entry_by_txt(),X509_NAME_add_entry_by_OBJ (), X509_NAME_add_entry_by_NID () : thêm một trường có tên được

xác định bởi một chuỗi field, một đối tượng obj hoặc một NID nid tương

ứng

X509_NAME_delete_entry () : xóa một mục từ name ở vị tríloc Các mục đã xóa được trả lại và phải được 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ả

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 () , EVP_PKEY_encrypt () : trả về giátrị 1 nếu thành công , 0 hoặc âm nếu thất bại

Trang 15

EVP_PKEY_decrypt_init () : chức năng khởi tạo một thuật toán

khóa công khai sử dụng pkey để giải mã.

EVP_PKEY_decrypt () : thực hiện giải mã 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_decrypt_init () , EVP_PKEY_decrypt () : trả về giátrị 1 nếu thành công, 0 hoặc âm nếu thất bại

EVP_PKEY_sign_init () : khởi tạo một 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 hiện việc kí kết khóa công khai sử dụng

ctx

EVP_PKEY_sign_init () , EVP_PKEY_sign () trả về giá trị 1 nếuthành công, 0 hoặc âm nếu 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 một chữ ký số.

EVP_PKEY_verify () : thực hiện kiểm tra chữ ký số

2.5.2 PEM – pem.h

Các hàm PEM đọc hoặc ghi các cấu trúc trong định dạng PEM Địnhdạng PEM đơn giản là base64 mã hóa dữ liệu bao quanh bởi dòng header

PEM_write_bio_PKCS8PrivateKey() và PEM_write_PKCS8Privat eKey() viết một khóa riêng trong một cấu trúc EVP_PKEY trong PKCS #

8 định dạng EncryptedPrivateKeyInfo sử dụng thuật toán mã hóa dựa trênPKCS # 5 v2.0

PEM_write_bio_PKCS8PrivateKey_nid() và PEM_write_PKCS8Pr ivateKey_nid () cũng viết ra một khóa riêng như một

Trang 16

EncryptedPrivateKeyInfo PKCS # 8 tuy nhiên nó sử dụng PKCS # 5 v1.5hoặc PKCS # 12 thuật toán mã hóa thay thế.

2.6 Chức năng phụ error codes – err.h

Khi một hàm được gọi từ thư viện OpenSSL thất bại, điều này thườngđược thể hiện bằng giá trị trả về, và một mã lỗi được lưu trữ trong mộthàng đợi lỗi liên quan đến các chủ đề hiện tại Thư viện err cung cấp cácchức năng để có được các mã lỗi và thông báo lỗi cho chúng ta

ERR_get_error () : trả về mã lỗi sớm nhất từ hàng đợi của chủ đề

ERR_peek_error () : trả về mã lỗi sớm nhất từ hàng đợi của chủ đề

mà không sửa đổi nó

ERR_peek_last_error () : trả về mã lỗi mới nhất từ hàng đợi củachủ đề mà không sửa đổi nó

ERR_GET_LIB (), ERR_GET_FUNC () và ERR_GET_REASON () chochúng ta vị trí và lí do của lỗi ERR_GET_LIB (), ERR_GET_FUNC () và ERR_GET_REASON () là macro

ERR_error_string () : chuyển từ mã lỗi thành các dòng lỗi theongôn ngữ chúng ta có thể hiểu được Dòng lỗi có dạng như sau :

error:[error code]:[library name]:[function name]:[reason string]

• error code là một số có 8 chữ số Đây chính là mã lỗi

• library name , function name , reason string : là văn bản ASCII

Trang 17

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ọnhàm băm bằng MD5 hoặc SHA1, 2 tùy chọn mã hóa, 1 là mật mã đốixứ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ì có thêm lựachọn tạo cặp key mới

Các file thư viện h được 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 là một chuỗi được lưutrong file định dạng txt có đường dẫn mặc định là F:\input.txt , đầu ra làbản mã được lưu trong file F:\output.txt Đối với RSA, public key vàprivate key được lưu trong file F:\rsa_public.key và F:\rsa_private.key.Sau đây là các hàm được sử dụng trong chương trình

3.1 MD5 – Message Digest Algorithm 5

Đây là bộ tạo mã Hash mật mã được sử dụng phổ biến với giá trị Hashdài 128bit Bảng băm MD5 thường được diễn tả bằng một chuỗi hệ thậplục phân 32 ký tự Đầu vào của MD5 là không giới hạn

• MD5_Init(MD5_CTX *c) : khởi tạo một 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 bản tóm

lược trong md.

o unsigned char *md : bản tóm lược được gán vào biến md.

Trang 18

o MD5_CTX *c : bản tóm lược của chuỗi đầu.

3.2 SHA1 – Secure Hash Algorithm 1

SHA là thuật toán băm 1 chiều dùng trong rất nhiều hệ thống quantrọng SHA có 5 thuật giải là 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 và chuỗi đầu ra có độ dài 160 bit tức là 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 : bản tóm lược sẽ đượ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 được FIPS chọn làm chuẩn chính thức năm 1976.Hiện nay DES được xem là không an toàn do độ dài khóa 56bit là quánhỏ

• DES_set_odd_parity(DES_cblock *key) : thiết lập cân bằngcủa khóa qua các bit 1

• DES_cblock *key : khóa loại DES_cblock

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

HÌNH ẢNH LIÊN QUAN

Hình 1. Sơ đồ khối mã hóa DES - tìm hiểu OpenSSL trong mã hóa dữ liệu
Hình 1. Sơ đồ khối mã hóa DES (Trang 19)
Hình 2: Sơ đồ khối giải mã DES - tìm hiểu OpenSSL trong mã hóa dữ liệu
Hình 2 Sơ đồ khối giải mã DES (Trang 20)
Hình 3. Sơ đồ khối quá trình tạo cặp key RSA - tìm hiểu OpenSSL trong mã hóa dữ liệu
Hình 3. Sơ đồ khối quá trình tạo cặp key RSA (Trang 22)
Hình 4: Sơ đồ khối mã hóa RSA - tìm hiểu OpenSSL trong mã hóa dữ liệu
Hình 4 Sơ đồ khối mã hóa RSA (Trang 24)
Hình 5. Sơ đồ khối giải mã RSA - tìm hiểu OpenSSL trong mã hóa dữ liệu
Hình 5. Sơ đồ khối giải mã RSA (Trang 25)

TỪ KHÓA LIÊN QUAN

w