14.4.1. Khái niệm: tin tưởng, khóa và định dạng tệp¶
Trước bất kỳ lệnh nào, có ba nền tảng kiến thức áp dụng cho mọi trang khác trong phần này.
14.4.1.1. Các mô hình tin tưởng¶
Một kết nối TLS có thể cung cấp ba mức bảo đảm ngày càng tăng:
Chỉ mã hóa -- lưu lượng được mã hóa nhưng không bên nào chứng minh danh tính. Dễ thiết lập (không xác minh chứng chỉ) nhưng dễ bị tấn công man-in-the-middle. Chỉ dùng để kiểm thử cục bộ.
Xác thực máy chủ -- client xác minh chứng chỉ của máy chủ đối chiếu với một chứng chỉ tin tưởng (mô hình HTTPS quen thuộc). OpenMV Cam có thể đóng vai trò client (xác minh một máy chủ từ xa) hoặc máy chủ (trình bày chứng chỉ của chính nó).
Xác thực lẫn nhau (mTLS) -- cả hai đầu đều trình bày và xác minh chứng chỉ. Được sử dụng khi máy chủ cũng phải chắc chắn về danh tính của client.
14.4.1.2. Chọn loại khóa¶
Build mbedTLS của camera hỗ trợ ECDSA trên các đường cong prime NIST/SEC và RSA. Có ba cách thực tế để tạo khóa; ECDSA P-256 (prime256v1) được khuyến nghị:
ECDSA P-256 (prime256v1) -- bảo mật khoảng 128-bit với khóa 256-bit. Khóa và chữ ký nhỏ gọn, và cho đến nay là bắt tay nhanh nhất trong các tùy chọn được hỗ trợ trên Cortex-M (các phép toán elliptic-curve rẻ hơn nhiều so với các phép toán khóa riêng tư RSA). Được hỗ trợ phổ quát bởi các peer TLS. Đây là sự cân bằng tốt nhất về bảo mật, tốc độ, sử dụng RAM/flash và khả năng tương thích trên thiết bị nhúng, đó là lý do tại sao nó là lựa chọn mặc định ở đây.
ECDSA P-384 (secp384r1) -- bảo mật khoảng 192-bit. Vẫn là elliptic-curve, nên khá hiệu quả, nhưng lớn hơn và chậm hơn P-256 với biên độ bảo mật mà các triển khai IoT thông thường không cần. Chỉ sử dụng khi chứng chỉ tồn tại lâu hoặc yêu cầu tuân thủ đòi hỏi.
RSA-2048 -- bảo mật khoảng 112-bit. Tương thích phổ quát, kể cả với các peer rất cũ, nhưng khóa và chứng chỉ RSA lớn hơn nhiều và các phép toán khóa riêng tư RSA (được thực hiện bởi bên trình bày chứng chỉ) là tùy chọn chậm nhất và tốn bộ nhớ nhất trên vi điều khiển. Chỉ sử dụng khi một peer không thể làm ECDSA.
Ghi chú
Khóa Ed25519 / Curve25519 không được hỗ trợ. Build mbedTLS của OpenMV Cam không bật EdDSA hoặc Curve25519, vì vậy chứng chỉ hoặc khóa Ed25519 sẽ không tải được hoặc thất bại khi bắt tay. Hãy sử dụng một trong ba tùy chọn ở trên.
14.4.1.3. Định dạng tệp: sử dụng DER¶
Build mbedTLS được sử dụng bởi OpenMV Cam không bao gồm phân tích cú pháp PEM, vì vậy camera chỉ đọc chứng chỉ và khóa ở dạng DER (mã hóa nhị phân). Hầu hết các công cụ mặc định xuất ra dạng PEM (văn bản base64), vì vậy mỗi tệp được đưa vào camera đều phải được chuyển đổi sang DER trước -- mỗi công thức trong phần này kết thúc với bước chuyển đổi đó. Bạn sẽ cần:
Một khóa riêng tư -- được giữ bí mật, được sử dụng bởi bên nào trình bày chứng chỉ.
Một chứng chỉ -- phần công khai, được trình bày cho bên kia trong quá trình bắt tay.
Một chứng chỉ CA / tin tưởng -- chứng chỉ mà bên xác minh tải để quyết định xem peer có đáng tin cậy không. Đối với thiết lập tự ký, đây đơn giản chỉ là chứng chỉ riêng của peer.