Điểm:0

Tạo khóa riêng dựa trên danh sách các bộ mật mã có sẵn

lá cờ my

Tôi đang xây dựng mạng dựa trên MQTT của riêng mình mà tôi sẽ tạo mạng của riêng mình ca/máy chủ/máy khách giấy chứng nhận để xác thực.

Mục tiêu ở đây là giữ kích thước tin nhắn càng nhỏ càng tốt để giảm lưu lượng băng thông, nhưng tôi đã biết rằng lớp TLS bổ sung khá nhiều chi phí cho lưu lượng mà nó gửi. Cụ thể, với chứng chỉ ứng dụng khách, tôi thực sự sẽ phải gửi chứng chỉ ứng dụng khách đến máy chủ và ngược lại trên mỗi lần thử kết nối TCP, có thể tăng tới 8kb mà không cần gửi một byte dữ liệu thực. (Tôi hy vọng tôi đã hiểu đúng phần đó cho đến nay)

Ngoài ra, vì nhiều khách hàng của tôi là các thiết bị nhúng nhỏ chỉ có một số bộ mật mã hạn chế mà họ có thể sử dụng nên vấn đề thậm chí còn phức tạp hơn.

Ví dụ: đây là danh sách các bộ mật mã được phép mà khách hàng có thể sử dụng:

CIPHERSUITE MÃ SỐ
TLS-PSK-VỚI-AES-128-CBC-SHA256 00ae
TLS-PSK-VỚI-AES-256-CBC-SHA384 00af
TLS-PSK-VỚI-AES-128-CBC-SHA 008c
TLS-PSK-VỚI-AES-256-CBC-SHA 008d
TLS-PSK-VỚI-3DES-EDE-CBC-SHA 008b
TLS-RSA-VỚI-AES-128-CBC-SHA256 003c
TLS-RSA-VỚI-AES-256-CBC-SHA256 003d
TLS-RSA-VỚI-AES-128-CBC-SHA 002f
TLS-RSA-VỚI-AES-256-CBC-SHA 0035
TLS-ECDHE-RSA-VỚI-AES-128-CBC-SHA c013
TLS-ECDHE-RSA-VỚI-AES-256-CBC-SHA c014
TLS-ECDHE-RSA-VỚI-AES-128-CBC-SHA256 c027
TLS-ECDHE-RSA-VỚI-AES-256-CBC-SHA384 c028

Bây giờ trong ví dụ này, các bộ mật mã duy nhất có sẵn là PSKRSA những người dựa trên. Tất nhiên tôi rất thích sử dụng EC ciphersuites nhưng tôi không nghĩ rằng đây là một tùy chọn cho tôi trong danh sách.

Bây giờ một vài câu hỏi tôi có là:

  • Với danh sách ciphersuite, bất kỳ khóa riêng tư nào (CA, Server hoặc Khách hàng) dựa trên EC hay tất cả đều phải là RSA?

  • Tôi cũng có nên giữ các gói MQTT riêng lẻ được bọc bằng TLS càng nhỏ càng tốt hay đây là thứ sẽ được đệm với byte bổ sung? (ví dụ: nó có tạo ra sự khác biệt không nếu gói của tôi nhỏ tới 5 byte hoặc tôi có thể tự do viết gói 25 byte Dài)

  • Một số điều khác tôi nên ghi nhớ nếu tôi muốn giảm băng thông lưu lượng là gì?

  • Bộ mật mã ECDHE-RSA đang khiến tôi đau đầu. Họ đang sử dụng EC để trao đổi khóa nhưng RSA cho PKI? Điều này có nghĩa là máy chủ có thể có khóa riêng EC.

dave_thompson_085 avatar
lá cờ cn
Để rõ ràng đối với bất kỳ bộ phần mềm không phải PSK nào, bạn phải gửi chứng chỉ máy chủ cho khách hàng và đối với ECDHE-RSA cũng là một chữ ký; client-auth là tùy chọn nhưng nếu được sử dụng, bạn cũng phải gửi chữ ký _and_ của ứng dụng khách đến máy chủ. Tạo các chứng chỉ của riêng bạn với nội dung tối thiểu, đối với RSA 2048-bit, bạn có thể nhận được mỗi chứng chỉ khoảng 700-800 byte. Ngoại trừ 1.3 mà bộ của bạn không có, phần còn lại của một lần bắt tay tiêu chuẩn bao gồm chữ ký xác thực ứng dụng khách có thể nhiều hơn khoảng 700-1000 byte. Bạn có thể xử lý nhiều dữ liệu (nhiều như các thiết bị giống như thiết bị của bạn có thể thực hiện) chỉ với một lần bắt tay.
Điểm:1
lá cờ in

Với danh sách ciphersuite, bất kỳ khóa riêng nào (CA, Máy chủ hoặc Máy khách) có thể dựa trên EC hay tất cả chúng phải là RSA?

Tất nhiên, không chỉ RSA, hoặc một bí mật đối xứng được chia sẻ trước cho TLS-PSK.

Lưu ý rằng đối với bộ mật mã TLS-RSA, khóa sẽ được sử dụng để đóng gói khóa, tức là việc sử dụng khóa mã hóa và bộ mật mã TLS-ECDHE-RSA, bạn cần có chứng chỉ có thể được sử dụng để xác thực thực thể với việc sử dụng khóa để ký. Thường thì cả hai bit được đặt cho các chứng chỉ cụ thể của TLS.

Tôi cũng có nên giữ các gói MQTT riêng lẻ được gói bằng TLS càng nhỏ càng tốt hay đây có phải là thứ sẽ được đệm thêm byte không? (ví dụ.nó sẽ tạo ra sự khác biệt nếu gói của tôi nhỏ tới 5 byte hay tôi có thể tự do viết một gói dài 25 byte)

AES sẽ mã hóa thành bội số của 16 byte, 3DES thành bội số của 8. 3DES vẫn an toàn hợp lý, nhưng nó không thực sự được sử dụng nữa. May mắn thay TLS sử dụng 3 phím 3DES, vì vậy có điều đó.

Bộ mật mã ECDHE-RSA đang khiến tôi đau đầu. Họ đang sử dụng EC để trao đổi khóa nhưng RSA cho PKI? Điều này có nghĩa là máy chủ có thể có khóa riêng EC.

Đúng, nhưng chữ E trong ECDHE có nghĩa là Diffie-Hellman phù du-phù du. Cả máy khách và máy chủ sẽ (có khả năng/hy vọng) tạo một cặp khóa mới cho mỗi kết nối. Tuy nhiên, việc tạo cặp khóa cho EC nhanh như việc thực hiện thỏa thuận khóa DH, nhanh hơn nhiều so với việc tạo cặp khóa RSA.

Cặp khóa này dành riêng cho phiên và không cần lưu trữ, vì vậy bạn không phải thực hiện bất kỳ thao tác quản lý khóa nào xung quanh nó. Chỉ khóa RSA được sử dụng để xác thực thực thể nên khóa riêng và chứng chỉ làm cần được quản lý.

dave_thompson_085 avatar
lá cờ cn
Ngoài phần đệm để chặn ranh giới mã hóa, các bộ được liệt kê còn thêm ít nhất 20 byte (khoảng 24 hoặc 32) cho HMAC và tất cả đều thêm tiêu đề 5 byte (hoặc 13 cho DTLS nhưng _removes_ TCP đó bù đắp nhiều hơn).
lá cờ my
Tuy nhiên MQTT không sử dụng DTLS? Chỉ TLS qua TCP, phải không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.