CHƯƠNG 1: TỔNG QUAN VỀ OPENSSL 1. Lịch sử phát triển OpenSSL là một bộ công cụ mã nguồn mở, thực hiện các giao thức SSL và TLS, cũng như các thuật toán mã hóa quan trọng thường được sử dụng trong các chương trình ngày nay. OpenSSL được viết bằng ngôn ngữ lập trình C và phát triển dựa trên SSLeay. SSLeay ban đầu được viết bởi Eric A.
Young và Tim J. Hudson bắt đầu vào năm 1995. Vào tháng 12 năm 1998, sự phát triển của SSLeay đã dừng lại, phiên bản đầu tiên của OpenSSL được phát hành là 0.1c, sử dụng SSLeay 0.1b (chưa được phát hành) như là điểm khởi đầu của nó. Đến nay OpenSSL đã phát hành rất nhiều phiên bản, với mục đích để hoàn thiện hơn các phiên bản OpenSSL mới được nhà phát triển vá các lỗ hổng của phiên bản trước đó và có thể tích hợp thêm các chức năng, thuật toán mật mã mạnh chưa được tích hợp ở các phiên bản cũ.
Hầu hết các bản phân phối OpenSSL có sẵn cho hầu hết các hệ điều hành, bao gồm các hệ điều hành Unix, Windows và MacOS và có thể tải xuống dưới dạng nguồn từ https://www. Thư viện chia sẻ OpenSSL được cài đặt sẵn trong nhiều bản phân phối Linux. Một số phiên bản phát hành: Phiên bản Ngày phát hành 1. Các thành phần của OpenSSL OpenSSL bao gồm ba thành phần chính: thư viện (libcrypto và libssl) và công cụ dòng lệnh (openssl).
Thư viện mật mã cung cấp các thuật toán phổ biến nhất cho mật mã đối xứng và mật mã khoá công khai, các thuật toán hàm băm và mã xác thực thông báo. Nó cũng cung cấp một máy phát số giả ngẫu nhiên và hỗ trợ thao tác các định dạng chứng chỉ thông thường và quản lý khóa. Thư viện SSL cung cấp triển khai tất cả các phiên bản của giao thức SSL, bao gồm TLSv1. Công cụ dòng lệnh để thực hiện một loạt các nhiệm vụ mã hóa, chẳng hạn như tạo, xử lý các chứng chỉ và các tệp liên quan.
Tính năng mã hóa Thư viện crypto thực hiện một loạt các hàm liên quan đến mật mã, bao gồm: mật mã đối xứng, mật mã khóa công khai, xử lý chứng chỉ và hàm băm. OpenSSL hỗ trợ rất nhiều thuật toán mật mã đối xứng. Tất nhiên, các mã này cũng có sẵn để sử dụng với công cụ dòng lệnh. Nhiều trong số rất nhiều mật mã là các biến thể của một mật mã cơ sở.
Các mật mã cơ bản được hỗ trợ bởi công cụ dòng lệnh là Blowfish, CAST5, DES, 3DES (Triple DES), IDEA, RC2, RC4 và RC5. Các phiên bản mới của OpenSSL bổ sung hỗ trợ cho AES, CAMELLIA, ARIA,. Hầu hết các thuật toán mã đối xứng được hỗ trợ hỗ trợ nhiều chế độ khác nhau, bao gồm CBC, CFB, ECB và OFB. Đối với mỗi mật mã, chế độ mặc định luôn là CBC nếu một chế độ không được chỉ định rõ ràng.
Thư viện crypto cung cấp API cho phép các mật mã này được sử dụng để mã hóa hoặc giải mã dữ liệu trong các ứng dụng bằng cách sử dụng thư viện. Hơn nữa, các công cụ dòng lệnh openssl có thể mã hóa hoặc giải mã các tệp tin có trọng số, sử dụng các khóa hoặc khóa được cung cấp dựa trên mật khẩu. Truyền thông an toàn Bộ công cụ OpenSSL cung cấp một số tính năng hữu ích trong việc cung cấp giao tiếp an toàn qua Internet. Thư viện ssl thực hiện các giao thức Secure Sockets Layer (SSL v2/v3) và Transport Layer Security (TLS v1).
Thư viện có thể được sử dụng bởi các nhà phát triển để đảm bảo các ứng dụng của bên thứ ba. Một trong những ứng dụng như vậy là OpenVPN. SSL (Secure Sockets Layer) và người kế nhiệm của nó, TLS (Transport Layer Security) là các giao thức mạng cung cấp giao tiếp an toàn qua Internet. SSL/TLS tích hợp các chức năng mã hóa dữ liệu, cho phép các ứng dụng máy khách/máy chủ bảo vệ chống lại nghe lén và giả mạo.
SSL/TLS thường được triển khai ở trên cùng của một số giao thức truyền tải, ví dụ: Giao thức điều khiển truyền dẫn (TCP). Nó đóng gói dữ liệu ứng dụng. Một lợi thế lớn của SSL/TLS là nó là giao thức ứng dụng độc lập. Giao thức cấp cao hơn có thể xếp chồng lên trên giao thức SSL/TLS một cách minh bạch.
SSL và TLS sử dụng mật mã đối xứng (ví dụ: AES) để mã hóa dữ liệu. Các khóa cho các mật mã này được tạo duy nhất cho mỗi kết nối và dựa trên một bí mật được thương lượng bởi Giao thức bắt tay. SSL/TLS hỗ trợ kết hợp nhiều mật mã, cơ chế xác thực và thuật toán băm. Các kết hợp này được gọi là „Ciphersuites‟.
Ciphersuites được chọn trong quá trình đàm phán. Thư viện ssl thực hiện xử lý giao thức SSL và TLS. Thư viện có thể được các ứng dụng của bên thứ ba sử dụng để bảo mật các kết nối bằng giao thức SSL/TLS. Libssl cung cấp một API phong phú.
Nhà phát triển có thể tạo ứng dụng máy chủ hoặc ứng dụng khách bằng các chức năng của thư viện. 6 Thư viện ssl sử dụng các hàm mật mã do thư viện crypto cung cấp. Đặc biệt, nó sử dụng mật mã đối xứng để mã hóa dữ liệu được truyền trong các kết nối SSL/TLS. Một số ứng dụng của OpenSSL OpenSSL phổ biến vì những tính năng mà nó cung cấp và hoàn toàn miễn phí.
Cơ bản chủ yếu OpenSSL được sử dụng để tạo các kết nối SSL/TLS trên Internet và các thực hiện các thuật toán mật mã với nhiều mục đích. Dưới đây sẽ là một số ứng dụng phổ biến của OpenSSL. Tạo kết nối SSL/TLS SSL là nền tảng chuẩn của giao thức bảo mật HTTPS (do Công ty Netscape đề xuất vào năm 1994), giúp chuyển đổi tên người dùng dịch vụ và mật khẩu tương ứng thành dạng mật mã. Nhờ vậy, trong thao tác đăng nhập dịch vụ trên mạng, tên người dùng và mật khẩu không bị lộ khi truyền qua rất nhiều máy tính trung gian trên đường đi.
Mỗi lần nhận được tên người dùng và mật khẩu, máy chủ dùng một chìa khóa bí mật (private key) để giải mật mã. Theo lý thuyết, giải mật mã khi không có chìa khóa bí mật là điều không thể. Tuyệt đối không thể! Khi người dùng thiết lập một kết nối được mã hóa đến một trang web, dù đó là Google, Facebook hay ngân hàng trực tuyến, dữ liệu sẽ được mã hóa bằng giao thức SSL/TLS. Trong khi các phần mềm SSL thương mại rất đắt, nhiều máy chủ web phổ biến sử dụng thư viện mã nguồn mở OpenSSL để thực hiện công việc này (khoảng 60%).
Mã hóa/giải mã dữ liệu Mã hóa là quá trình lấy dữ liệu (thường được gọi là bản rõ) và chuyển đổi nó sang dạng thay thế (thường được gọi là bản mã) không 7 thể phân biệt được với bản gốc. Quá trình mã hóa dữ liệu thường yêu cầu một khóa, và sử dụng một tập hợp các thuật toán để chuyển đổi dữ liệu văn bản thô thành bản mã. Thuật toán khóa đối xứng (còn được gọi là thuật toán bí mật được chia sẻ) sử dụng cùng một khóa để mã hóa và giải mã dữ liệu. Thuật toán khóa công khai (còn được gọi là thuật toán bất đối xứng) sử dụng các khóa khác nhau để mã hóa và giải mã.
Thuật toán khóa công khai được đặt tên từ thực tế là một trong các khóa (khóa công khai) có thể được phân phối cho người khác và dữ liệu được mã hóa bằng khóa nàychỉ có thể được giải mã bằng khóa cá nhân được liên kết. OpenSSL hỗ trợ một số thuật toán khóa đối xứng, bao gồm: DES, 3DES, IDEA, Blowfish và AES. Mỗi thuật toán khóa đối xứng có thể được gọi bằng cách chuyển tên thuật toán tới lệnh enc, hoặc truyền trực tiếp đến lệnh openssl. Ví dụ sau mã hóa tệp có tên passwd bằng thuật toán Blowfish: $ openssl bf -e -in /etc/secure/passwd -out /etc/secure/passwd.bf enter bf-cbc encryption password: Verifying - enter bf-cbc encryption password: $ openssl enc -e -3des -in /etc/secure/sensitive_data -out /etc/secure/sensitive_data.3des enter bf-cbc encryption password: Verifying - enter bf-cbc encryption password: 8 1.
Kiểm tra tính toàn vẹn dữ liệu Internet được sử dụng ngày càng nhiều để phân phối mã nguồn và gói phần mềm nhị phân. Khi một trong các máy chủ phân phối phần mềm bị xâm phạm, tính toàn vẹn của các gói phần mềm được đưa vào câu hỏi. Để đảm bảo rằng phần mềm đã không bị giả mạo, một giá trị băm thông báo có thể được sử dụng để tạo ra một dấu vân tay kỹ thuật số của một tập tin. Giá trị băm thông báo tạo ra bằng cách lấy tệp có độ dài thay đổi và chạy tệp thông qua thuật toán băm để tạo ra đầu ra có độ dài cố định (dấu vân tay kỹ thuật số).
Thao tác này rất dễ thực hiện, nhưng việc đảo ngược thao tác là vô cùng khó khăn. Khi một dấu vân tay đã được tính toán, nó có thể được phân phối cho khách hàng thông qua một kênh an toàn, và được sử dụng để đảm bảo rằng nội dung của một tập tin không thay đổi. OpenSSL hỗ trợ một số thuật toán băm thông báo, bao gồm các hàm băm: MD2, MD4, MD5, SHA, SHA1, MDC2 và Ripe MD160. Mỗi thuật toán có thể được gọi bằng cách chuyển tên thuật toán đến lệnh dgst hoặc truyền trực tiếp đến lệnh openssl.
Ví dụ sau sử dụng tùy chọn dgst để tính toán thông báo MD5 của /etc/secure/data: $ openssl dgst -md5 /etc/secure/data MD5(/etc/secure/data)= f268fc3e92ef844117365a3368b8fe45 Ví dụ sau đây chuyển trực tiếp thuật toán digest tới openssl và tạo một checksum MD5 của /etc/secure/data: $ openssl md5 /etc/secure/data MD5(/etc/secure/data)= f268fc3e92ef844117365a3368b8fe45 9 Lệnh này sẽ tạo một giá trị băm MD5 của tất cả các tệp trong thư mục /etc. Nếu cần kiểm tra xem một tệp trong /etc đã được sửa đổi chưa, có thể so sánh giá trị băm hiện tại với giá trị băm được tính ở trên. Tệp chứa giá trị băm phải được sao chép sang phương tiện chỉ đọc và được lưu trữ ở một vị trí an toàn. Các thao tác với chứng chỉ số Chứng chỉ số là "giấy phép lái xe" điện tử được sử dụng để chứng minh danh tính của khách hàng hoặc máy chủ.
Tổ chức phát hành chứng chỉ (CA) chịu trách nhiệm cấp chứng chỉ kỹ thuật số và chứng minh danh tính của pháp nhân yêu cầu chứng chỉ. Chứng chỉ số chứa một số thông tin, bao gồm: phiên bản chứng chỉ, số sê-ri để nhận dạng duy nhất chứng chỉ, thuộc tính (Tổ chức phát hành) để xác định tổ chức đã cấp chứng chỉ, phạm vi ngày chứng chỉ hợp lệ, thuộc tính (Chủ đề ) để xác định trang web chứng chỉ đã được cấp cho, và chữ ký số.