[từ chối trách nhiệm: Tôi là một chuyên gia bảo mật / tiền điện tử và giải quyết các câu hỏi về kiến trúc bảo mật như thế này mỗi ngày.]
Bạn đã vấp phải vấn đề lưu trữ thông tin đăng nhập theo cách mà một quy trình không giám sát có thể truy cập chúng, nhưng kẻ tấn công thì không thể. Đây là một vấn đề nổi tiếng và rất khó giải quyết.
Nếu thiết bị IoT của bạn có kho khóa phần cứng tích hợp trên bo mạch chủ, như một số TPM hoặc tương đương với Kho lưu trữ được hỗ trợ phần cứng của Android hoặc Apple Secure Eniances, thì bạn có thể sử dụng nó.
Với các máy chủ truyền thống, bạn có thể sử dụng HSM hoặc Thẻ thông minh, nhưng giải pháp phần mềm đầy đủ duy nhất mà tôi biết là lấy khóa AES từ một số "dấu vân tay phần cứng" được tạo bằng cách kết hợp số sê-ri của tất cả các thiết bị phần cứng. Sau đó sử dụng khóa AES đó để mã hóa thông tin đăng nhập. Một quá trình chạy trên cùng một máy chủ có thể tái tạo lại khóa AES và giải mã thông tin đăng nhập, nhưng một khi bạn trích xuất tệp từ máy chủ, về cơ bản nó không thể giải mã được.
IoT ném cờ lê vào đó vì hai lý do:
Giả định rằng số sê-ri phần cứng là duy nhất có thể không giữ và
Không giống như máy chủ, kẻ tấn công có quyền truy cập vật lý vào thiết bị, do đó có thể lấy vỏ trên thiết bị để chạy chương trình giải mã.
Cả mã hóa phần cứng (TPM) và mã hóa "vân tay phần cứng" đều bị xáo trộn tốt nhất bởi vì, về cơ bản, nếu một quy trình cục bộ có thể giải mã dữ liệu, thì kẻ tấn công có thể chạy quy trình cục bộ đó cũng có thể giải mã nó.
Vì vậy, thủ thuật tiêu chuẩn có vẻ như nó không hoạt động ở đây. Câu hỏi đầu tiên bạn cần tự hỏi mình là:
- Mô hình mối đe dọa của tôi là gì / dự án này nằm ở đâu trên
Secure <--> Convenient
quy mô?
Cuối cùng, tôi nghĩ bạn cần phải quyết định điều đó security > convenience
và yêu cầu con người nhập thông tin đăng nhập sau mỗi lần khởi động (sử dụng câu trả lời như câu trả lời của @ BenceKaulics ), hoặc bạn quyết định điều đó security < convenience
và chỉ cần đặt thông tin đăng nhập trên thiết bị, có thể sử dụng một số thông tin ẩn giấu nếu bạn cảm thấy điều đó làm nên sự khác biệt
Đây là một vấn đề khó được thực hiện khó hơn bởi bản chất của các thiết bị IoT.
Để đầy đủ, giải pháp công nghiệp toàn diện cho vấn đề này là:
- Cung cấp cho mỗi thiết bị IoT một khóa công khai RSA duy nhất tại thời điểm sản xuất. Ghi lại khóa công khai này trong một db so với số sê-ri của thiết bị.
- Lưu trữ các thông tin nhạy cảm trên một máy chủ phù hợp, hãy gọi nó là "cổng".
- Khi một thiết bị IoT xác thực với cổng (sử dụng khóa RSA của nó), cổng sẽ mở một phiên cho nó bằng thông tin xác thực được lưu trữ và trao lại mã thông báo phiên cho thiết bị.
- Để bảo mật tốt nhất, cổng là một cổng vật lý (hoặc VPN) để tất cả lưu lượng truy cập từ thiết bị IoT đi qua cổng và bạn có quyền kiểm soát nhiều hơn đối với các quy tắc và công cụ tường lửa - lý tưởng là ngăn thiết bị có đường truyền trực tiếp (không phải VPN) truy cập Internet.
Bằng cách này, và kẻ tấn công thỏa hiệp một thiết bị có thể mở phiên, nhưng không bao giờ có quyền truy cập trực tiếp vào thông tin đăng nhập.