Hai hồ sơ được đo trên cùng một cổng, một có mã hóa và một không, và bản được mã hóa không chậm hơn. Đôi khi nó nhanh hơn, điều thường dẫn đến một cuộc tranh luận dài về việc bài kiểm tra có được chạy đúng hay không. Kết quả là hợp lý, vì chi phí của một gói không phải là số từ mật mã trong cấu hình. Đó là tập hợp các phép toán mà phần triển khai thực hiện, trên phần cứng mà nó có, theo cách bố trí đệm mà nó đã chọn.

Triệu chứng: bên chậm không phải hồ sơ được mã hóa

Giả sử một bài kiểm tra cũ so sánh mật mã AEAD với một chế độ „không mã hóa“ mà vẫn tính một mã xác thực riêng cho từng gói. Hồ sơ thứ hai che nội dung của tải trọng nhưng giữ một hàm băm cho mỗi gói, và trên một bộ xử lý không có tăng tốc cho hàm băm đó, nó có thể tốn kém hơn cấu trúc tích hợp mà nó lẽ ra phải đánh bại.

Nhãn trong cấu hình ghi „mã hóa“, và nhãn là tất cả những gì hầu hết các so sánh nhìn vào. Đường đi của gói nói điều khác: một hồ sơ thực hiện một phép toán kết hợp mà CPU có chỉ thị cho nó, và cái kia thực hiện một phép toán riêng mà CPU không có. Chỉ đọc tệp cấu hình sẽ không bao giờ tiết lộ sự khác biệt đó, vì cả hai mục trông giống như một dòng. Chỉ chế độ đã thương lượng và đường mã phía sau nó mới giải thích được kết quả.

Đó là toàn bộ lời giải thích, và nó không đòi hỏi bất kỳ khẳng định nào về việc nguyên thủy nào nhanh hơn một cách phổ quát. Cả hai đều có thể nhanh, cả hai đều có thể chậm, và thứ tự phụ thuộc vào máy và mã.

Đếm phép toán, không đếm nhãn

Một cấu trúc AEAD, như RFC 5116 mô tả, cho phần triển khai một giao diện duy nhất trả về bản mã và thẻ cùng lúc. AES-GCM là một ví dụ: mã hóa ở chế độ bộ đếm kết hợp với một bộ xác thực Galois. Giao diện không làm cho tính toàn vẹn miễn phí; nó làm cho sự kết hợp được định nghĩa rõ ràng, và đó là điều cho phép một phần triển khai tối ưu hóa cặp này như một đơn vị.

Separate authentication path:
  payload -> independent HMAC -> framed packet

AEAD path:
  payload -> authenticated encryption with tag -> framed packet

Đây là những phác thảo xử lý, không phải lời khuyên cấu hình. Cái đầu không có tính bí mật nhưng vẫn tiêu CPU cho việc xác thực, và chính vì thế „tắt mã hóa“ không đồng nghĩa với „tắt công việc mật mã“.

Cái thứ hai có thể rẻ hơn vì các bộ xử lý cung cấp chỉ thị cho cả hai nửa: các vòng AES và phép nhân không nhớ mà trường Galois sử dụng. Các thư viện cũng xử lý các đệm độc lập song song, điều này giữ cho các chỉ thị đó bận rộn thay vì chờ bộ nhớ.

Chế độ đã thương lượng thực sự cho phép điều gì

Với Community OpenVPN, một mật mã dữ liệu AEAD nghĩa là tùy chọn auth không còn đóng góp HMAC riêng của kênh dữ liệu nữa. Tài liệu tham chiếu của tùy chọn mã hóa mô tả phạm vi đó, và đó là lý do hai cấu hình trông giống nhau trong một tệp văn bản có thể khác nhau về công việc trên mỗi gói.

Hãy đọc chế độ đã thương lượng thay vì danh sách mong muốn. Danh sách mật mã được phép và tên bộ TLS không cho bạn biết phép toán nào chạy trên tải trọng, và một dòng cipher cũ có thể không mô tả điều mà kết nối hiện tại đã chọn.

openvpn --show-ciphers | head -20
sudo grep -E 'cipher|auth' /etc/openvpn/server.conf

Lệnh đầu tiên liệt kê các mật mã mà tệp nhị phân hỗ trợ, đó là danh sách khả năng chứ không phải kết quả đã thương lượng. Lệnh thứ hai cho thấy máy chủ thực sự yêu cầu gì. Nhật ký kết nối là nơi xác nhận lựa chọn cuối cùng, vì máy khách có thể rơi trở lại vào thứ mà máy chủ cho phép nhưng không ai định trước.

Đo khối lượng công việc bạn thực sự chạy

Một phép đo vi mô về mật mã đo một nguyên thủy trong điều kiện của chính nó. Một lần truyền VPN cũng sao chép đệm, lập lịch luồng hoặc ngắt, kiểm tra chính sách và đi qua mạng. Những phần đó thường chiếm ưu thế, và đó là lý do một nguyên thủy nhanh hơn không luôn tạo ra một đường hầm nhanh hơn.

openssl speed -evp aes-256-gcm
openssl speed -evp sha1

Hai lệnh đó cho bạn một so sánh cục bộ thô về các nguyên thủy trên máy trước mặt bạn, và chúng trung thực khi nói rằng đây là các phép đo vi mô. Chúng không nói gì về thông lượng đường hầm của bạn, và không bao giờ nên được trích dẫn như vậy.

Sau đó hãy đo khối lượng công việc quan trọng, giữ mọi thứ khác không đổi: cùng điểm cuối, cùng kích thước gói, cùng phương thức vận chuyển, cùng chính sách nén. Nếu thay đổi hồ sơ cũng thay đổi phương thức vận chuyển hoặc vị trí xử lý, kết quả mô tả gói đó chứ không phải mật mã.

Hãy để mục tiêu trong tầm mắt. Một đường dữ liệu có dư năng lực mật mã vẫn có thể bị giới hạn bởi độ trễ vì ứng dụng chờ các chuyến khứ hồi, và lợi ích về dung lượng lớn không sửa được một giao thức nhiều lời. Hãy đo cấu hình được hỗ trợ và được chính sách phê duyệt như một tổng thể, và coi „ít hộp hơn thì phải nhanh hơn“ như đúng giả thuyết mà nó là. Câu hỏi hữu ích không phải là mã hóa có tốn kém gì không, mà là chi phí đó có xuất hiện trong phép đo mà bạn thực sự quan tâm hay không.

Bài viết liên quan