Làm cách nào để thêm mã hóa cấp độ ứng dụng vào kết nối Android BLE?

Aug 17 2020

Các Android Bluetooth năng lượng thấp tài liệu khuyến cáo thêm mã hóa lớp ứng dụng on-top của kết nối BLE nếu các dữ liệu trao đổi là nhạy cảm:

Thận trọng : Khi người dùng ghép nối thiết bị của họ với một thiết bị khác bằng BLE, tất cả các ứng dụng trên thiết bị của người dùng đều có thể truy cập được dữ liệu được giao tiếp giữa hai thiết bị.

Vì lý do này, nếu ứng dụng của bạn nắm bắt dữ liệu nhạy cảm, bạn nên triển khai bảo mật lớp ứng dụng để bảo vệ quyền riêng tư của dữ liệu đó.

Vì tôi muốn tránh "sử dụng mã hóa của riêng mình", tôi đang tìm một cách sẵn sàng cho sản xuất để mã hóa các gói.

Tôi có một kênh ngoài băng tần để trao đổi một tin nhắn (ví dụ: khóa) từ người tham gia này sang người khác (mã QR). Cả hai người tham gia đều là thiết bị Android, một người hoạt động ở chế độ máy chủ (thiết bị ngoại vi) và một người hoạt động ở chế độ máy khách (trung tâm).

Tôi đã xem Khung giao thức tiếng ồn như một giải pháp thay thế nhẹ hơn cho TLS, nhưng điều đó có vẻ như nó vẫn còn đối với nhiều công việc thủ công (?).

Có một giải pháp dễ dàng? Có vẻ như đây phải là một vấn đề được giải quyết.

Trả lời

1 CBHacking Aug 18 2020 at 05:26

Đầu tiên, một lời khuyên: StackExchange không phải để giới thiệu các sản phẩm cụ thể, vì vậy tôi sẽ nói tương đối chung chung ở đây. Bất cứ ai đọc được điều này trong tương lai có thể đang ở trong một thế giới nơi có những lựa chọn thay thế mới và tốt hơn nhiều, hoặc thậm chí nơi mà người bảo vệ cũ đã được tìm thấy đã bị phá vỡ.

Có một số thư viện tiền điện tử cấp cao - được cung cấp một khóa chia sẻ trước - sẽ xử lý thông báo hoặc có thể mã hóa luồng (và các yêu cầu bảo mật liên quan như tính toàn vẹn của dữ liệu) với mức nỗ lực tối thiểu. Chỉ cần tìm kiếm "thư viện tiền điện tử dễ dàng" sẽ tìm thấy cho bạn một số ứng cử viên. Lưu ý rằng rất nhiều người bỏ qua lời khuyên không nên tung tiền điện tử của riêng bạn và một số người trong số họ xuất bản nó, vì vậy bạn muốn đảm bảo rằng thư viện bạn chọn được các chuyên gia đánh giá tốt, lý tưởng là không liên quan đến sự phát triển của nó.

Bạn cũng sẽ muốn xem xét chính xác những gì bạn muốn (và cần) từ thư viện của mình. Nó có cần hỗ trợ các luồng được mã hóa có độ dài tùy ý (hoặc các thông báo rất lớn không dễ dàng vừa trong bộ nhớ) hay một giao thức dựa trên thông điệp đơn giản sẽ hoạt động? Thư viện phải rất nhỏ, trong cài đặt dấu chân hoặc sử dụng RAM? Rất nhanh, trên một CPU cụ thể? Tương thích với bất kỳ thư viện cụ thể nào khác? Sử dụng mật mã cụ thể hoặc các nguyên thủy khác vì lý do tuân thủ (tôi hy vọng là không)? Có sẵn trong một ngôn ngữ cụ thể?


Đối với một số ví dụ được đánh giá cao vào giữa năm 2020, hãy xem xét LibSodium hoặc Monocypher . Cả hai đều được đánh giá cao, đánh giá và tập trung vào tính dễ sử dụng. Các lựa chọn thay thế khác là NaCl, LibHydrogen, v.v. Lưu ý rằng không phải tất cả những điều này đều tập trung như nhau vào bảo mật, tốc độ hoặc sự tiện lợi; ví dụ, TweetNaCl nhấn mạnh kích thước mã tối thiểu, hy sinh nhiều tốc độ và có khả năng bảo mật trong quá trình này, so với NaCl ban đầu.