Tổng quan về các phương pháp chuyển đổi thông tin có sẵn
Bảo vệ thông tin có thể được thực hiện cho nhiều mục đích khác nhau và do đó sử dụng các phương pháp khác nhau. Cụ thể, có thể cần phải che giấu hoàn toàn bản chất của thông tin khỏi người quan sát bên ngoài hoặc đảm bảo việc truyền tải thông tin, đồng thời保证 trạng thái không thay đổi, nhưng bản thân thông tin vẫn có thể truy cập được. Trong trường hợp đầu tiên, chúng ta đang nói về mã hóa, và trường hợp thứ hai liên quan đến dấu vân tay số (hash). Do đó, mã hóa và băm được rút gọn thành việc xử lý dữ liệu gốc thành một biểu diễn mới, sử dụng các tham số bổ sung nếu cần thiết.
Cả mã hóa và băm đều có nhiều biến thể.
Phân cấp chung nhất chia mã hóa thành mã hóa khóa công khai (không đối xứng) và mã hóa khóa riêng (đối xứng).
Một схeme không đối xứng ngụ ý sự hiện diện của 2 khóa — công khai và riêng tư — cho mỗi người tham gia vào việc trao đổi dữ liệu. Các cặp khóa công khai và riêng tư được tạo trước bằng các thuật toán đặc biệt. Mỗi khóa riêng chỉ được biết đến bởi chủ sở hữu. Khóa công khai của mọi người được mọi người biết đến. Các khóa công khai cần được trao đổi theo một cách nào đó trước khi dữ liệu mã hóa có thể được truyền đi. Tiếp theo, nhà cung cấp dữ liệu sử dụng khóa riêng của họ, chỉ họ biết, kết hợp với một hoặc nhiều khóa công khai của người nhận dữ liệu. Những người này, đến lượt mình, sử dụng khóa riêng của họ và khóa công khai của người gửi để giải mã.
Sơ đồ mã hóa đối xứng sử dụng cùng một khóa bí mật (riêng) cho cả mã hóa và giải mã.
MQL5 hỗ trợ tính năng khóa riêng (đối xứng) ngay từ đầu. Các công cụ tích hợp của MQL5 không cung cấp chữ ký điện tử sử dụng mã hóa không đối xứng.
Các thuật toán nguyên thủy không có khóa nổi bật trong số các phương pháp mã hóa. Với sự trợ giúp của chúng, người dùng đạt được việc che giấu thông tin có điều kiện hoặc chuyển đổi loại thông tin. Chúng bao gồm, ví dụ, ROT13
(thay thế các ký tự bằng cách dịch chuyển mã chữ số của chúng đi 13, được sử dụng, đặc biệt, trong sổ đăng ký Windows) hoặc Base64
(dịch các tệp nhị phân sang văn bản và ngược lại, thường trong các dự án web). Một nhiệm vụ chuyển đổi dữ liệu phổ biến khác là nén dữ liệu. Điều này cũng có thể được coi là một dạng mã hóa, vì dữ liệu trở nên không thể đọc được bởi con người hoặc chương trình ứng dụng.
Cũng có rất nhiều phương pháp băm được cung cấp. Và CRC
(Kiểm tra Dư thừa Theo Chu kỳ) có lẽ là nổi tiếng và đơn giản nhất. Không giống như mã hóa, cho phép khôi phục thông điệp gốc từ thông điệp đã mã hóa, băm chỉ tạo ra một dấu vân tay (một tập hợp byte đặc trưng) dựa trên thông tin gốc, theo cách mà trạng thái không thay đổi của nó khi được tính toán lại đảm bảo (với xác suất cao) sự bất biến của thông tin gốc. Tất nhiên, điều này giả định rằng thông tin có sẵn cho tất cả người tham gia/người dùng của hệ thống phần mềm tương ứng. Không thể khôi phục thông tin từ hash. Thông thường, kích thước của hash (số byte trong đó) được giới hạn và chuẩn hóa cho mỗi phương pháp, do đó, cho một chuỗi dài 80 ký tự và một tệp 1 MB, chúng ta sẽ nhận được hash có cùng kích thước. Một ứng dụng của băm mà hầu hết người dùng sẽ thấy thực sự hữu ích là băm mật khẩu bởi các trang web và chương trình, tức là, chúng được lưu trữ tại nhà và xác minh trong quá trình đăng nhập bằng hash mật khẩu, chứ không phải với mật khẩu ở dạng gốc.
Cần lưu ý rằng chúng ta đã gặp thuật ngữ "hash" trong chương trước: chúng ta đã sử dụng một hàm băm để lập chỉ mục các cấu trúc lịch kinh tế. Hash đơn giản đó có mức độ bảo vệ rất yếu, điều này, đặc biệt, được thể hiện qua xác suất cao của các va chạm (trùng lặp kết quả cho các dữ liệu khác nhau), mà chúng ta đã xử lý đặc biệt trong thuật toán. Nó phù hợp cho các vấn đề phân phối ngẫu nhiên giả đều của dữ liệu trên một số lượng "rổ" giới hạn. Ngược lại, các tiêu chuẩn công nghiệp của băm tập trung đặc biệt vào việc xác minh tính toàn vẹn của thông tin và sử dụng các phương pháp tính toán phức tạp hơn nhiều. Nhưng độ dài của hash trong trường hợp này là vài chục byte chứ không phải một số đơn lẻ.
Các phương pháp mã hóa và băm thông tin có sẵn cho các chương trình MQL được thu thập trong liệt kê ENUM_CRYPT_METHOD
.
Hằng số | Mô tả |
---|---|
CRYPT_BASE64 | Mã hóa lại Base64 |
CRYPT_DES | Mã hóa DES với khóa 56-bit (7 byte) |
CRYPT_AES128 | Mã hóa AES với khóa 128-bit (16 byte) |
CRYPT_AES256 | Mã hóa AES với khóa 256-bit (32 byte) |
CRYPT_HASH_MD5 | Tính toán hash MD5 (16 byte) |
CRYPT_HASH_SHA1 | Tính toán hash SHA1 (20 byte) |
CRYPT_HASH_SHA256 | Tính toán hash SHA256 (32 byte) |
CRYPT_ARCH_ZIP | Nén bằng phương pháp "deflate" |
Liệt kê được chỉ định được sử dụng trong cả hai hàm API mật mã − CryptEncode
(mã hóa/băm) và CryptDecode
(giải mã). Chúng sẽ được thảo luận trong các phần sau.
Các phương pháp mã hóa AES và DES yêu cầu, ngoài dữ liệu, khóa mã hóa — một mảng byte có độ dài được xác định trước (được ghi trong ngoặc trong bảng). Như đã đề cập, khóa phải được giữ bí mật và chỉ được biết đến bởi nhà phát triển chương trình hoặc chủ sở hữu thông tin. Độ mạnh mật mã của mã hóa, tức là độ khó của việc chọn khóa bởi máy tính của kẻ tấn công, phụ thuộc trực tiếp vào kích thước của khóa: càng lớn, bảo vệ càng đáng tin cậy. Do đó, DES được coi là lỗi thời và đã được thay thế trong lĩnh vực tài chính bởi phiên bản cải tiến của nó là Triple DES: nó ngụ ý việc áp dụng DES liên tiếp ba lần với ba khóa khác nhau, điều này dễ thực hiện trong MQL5. Có một phiên bản phổ biến của Triple DES, thực hiện giải mã ở lần lặp thứ hai thay vì mã hóa với khóa số 2, tức là, như thể khôi phục dữ liệu về một biểu diễn trung gian, cố ý không chính xác trước vòng DES cuối cùng, thứ ba. Nhưng Triple DES cũng được lên kế hoạch loại bỏ khỏi các tiêu chuẩn công nghiệp sau năm 2024.
Đồng thời, độ mạnh mật mã nên tương xứng với thời gian tồn tại của bí mật (khóa và thông tin). Nếu cần một luồng tin nhắn bảo mật nhanh chóng, các khóa ngắn hơn được cập nhật định kỳ sẽ cung cấp hiệu suất tốt hơn.
Trong số các phương pháp băm, hiện đại nhất là SHA256
(một tập hợp con của tiêu chuẩn SHA-2). Các phương pháp SHA1
và MD5
được coi là không an toàn nhưng vẫn được sử dụng rộng rãi để tương thích với các dịch vụ hiện có. Đối với các phương pháp băm, kích thước của mảng byte kết quả với dấu vân tay số của dữ liệu được ghi trong ngoặc. Không cần khóa cho băm, nhưng trong nhiều ứng dụng, "muối" được gắn vào dữ liệu đã băm — một thành phần bí mật làm khó khăn cho kẻ tấn công trong việc tái tạo các hash cần thiết (ví dụ, khi đoán mật khẩu).
Phần tử CRYPT_ARCH_ZIP
cung cấp lưu trữ ZIP và truyền/nhận yêu cầu dữ liệu trên Internet (xem WebRequest).
Mặc dù tên của phương pháp bao gồm ZIP, dữ liệu nén không tương đương với các kho lưu trữ ZIP thông thường, vốn, ngoài các thùng chứa "deflate", luôn chứa siêu dữ liệu: các tiêu đề đặc biệt, danh sách tệp và thuộc tính của chúng. Trên trang web mql5.com, trong các bài viết và thư viện mã nguồn, bạn có thể tìm thấy các triển khai sẵn có của việc nén tệp vào kho lưu trữ ZIP và giải nén chúng từ đó. Việc nén và giải nén được thực hiện bởi các hàm
CryptEncode
/CryptDecode
, và tất cả các cấu trúc định dạng ZIP bổ sung cần thiết được mô tả và điền trong mã MQL5.
Phương pháp Base64
được thiết kế để chuyển đổi dữ liệu nhị phân thành văn bản và ngược lại. Dữ liệu nhị phân nói chung chứa nhiều ký tự không thể in được và không được hỗ trợ bởi các công cụ chỉnh sửa và nhập liệu như các biến đầu vào trong hộp thoại thuộc tính chương trình MQL. Base64
có thể hữu ích, ví dụ, khi làm việc với định dạng văn bản trao đổi dữ liệu đối tượng JSON phổ biến.
Mỗi 3 byte gốc được mã hóa trong Base64
bằng 4 ký tự, dẫn đến kích thước dữ liệu tăng thêm một phần ba. Cuốn sách đi kèm với các tệp thử nghiệm mà chúng ta sẽ thử nghiệm trong các ví dụ sau, đặc biệt, trang web MQL5/Files/MQL5Book/clock10.htm
và tệp được sử dụng trong đó với hình ảnh đồng hồ MQL5/Files/MQL5Book/clock10.png
. Ngay tại giai đoạn giới thiệu này, bạn có thể thấy rõ ràng các khả năng và sự khác biệt trong biểu diễn nội bộ của dữ liệu nhị phân và văn bản Base64, trong khi vẫn giữ được giao diện giống hệt nhau.
Trang web với hình ảnh nhị phân nhúng và ở định dạng Base64
Hình ảnh đồng hồ giống nhau được chèn vào trang dưới dạng tệp bên ngoài clock10.png
, cũng như mã hóa Base64 của nó trong thẻ img
(trong thuộc tính src
của nó: đây là "URL dữ liệu"). Trực tiếp trong văn bản của trang web, nó trông như thế này (không cần thiết phải gói chuỗi Base64 dài trên chiều rộng 76 ký tự, nhưng điều này được tiêu chuẩn cho phép và thực hiện ở đây để xuất bản):
<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+
Hj8y/AAABdUlEQVQoz1WSPUiVYRiGr/f4qaRwyAMOLpVnSGuvBh3SoSnLwclwqQa3CNxaWxwcrS
D/CAQH4ShF4RBnqCWQWiQwAp1C6WBi4B/5Xg7f1+fxgXd4eC5e7ue+nxAFgADABj+Bq1wGIBsRU
ihwwCMa6eE6ga+s0sgLmv5j0ahOOOqxqq98q+qeI86o0ShRfWpFHVC105uq3lOnfa5G0UXn1Ji9
8bw7Ucf9pBbgNX9ZI2TijzjMRBf4zCWeAckbxuijgXV2aadMfd2gl4QVkhXmAegiUGKDlhyRZmC
IxyRFdomUgB1qlDlmtu6vbYqckES+U6SEtNFGjScMcUhz5tAmrTTAiGZupI79cv9crw8sXGM9Dw
WkgwtncQBf6CfoQ8rcpjcfkSPL/OYdSyRwkWHKSDiHBeQ+39hJs9Nb7qmTmdNpTapb9qexpPLu+
NGqqlVXVf1gxcGzgFNswQGn/OOB/9zypXd9n28Z6o/uBxU2kW4GuVJ3dKeW6inhKgZyVwAAAABJ
RU5ErkJggg==" title="Clock 10:00 Base64 built-it" />
2
3
4
5
6
7
8
9
10
Sắp tới chúng ta sẽ tái tạo chuỗi ký tự này bằng hàm CryptEncode
, nhưng hiện tại, chỉ cần lưu ý rằng bằng cách sử dụng kỹ thuật tương tự, chúng ta có thể tạo báo cáo HTML với đồ họa nhúng từ MQL5.