lưu trữ và sử dụng khóa một cách an toàn trong một hệ thống nhúng


7

Tôi đang sử dụng bộ vi xử lý - PIC32MZ2048efm144 MCU nhận các lệnh được mã hóa bằng một khóa cụ thể , giải mã chúng và thực thi lệnh. Các lệnh được mã hóa được lưu trữ ngoại tuyến , vì vậy tôi không thể thay đổi khóa bất cứ khi nào tôi muốn. Chìa khóa là CỐ ĐỊNH . Các lệnh được mã hóa bởi một máy chủ và được tải bởi điện thoại . Điện thoại sẽ gửi các lệnh được mã hóa đến MCU sau đó, khi nó không trực tuyến . Các lệnh được mã hóa trước khi điện thoại liên lạc chúng với MCU, do đó không thể có khóa phiên.

Tôi được phép kết nối một mô-đun mã hóa / giải mã bên ngoài với PIC, nhưng sau đó dữ liệu sẽ được giải mã theo ít nhất một hướng ..

Giải pháp được đưa ra ở đây: Lưu trữ khóa an toàn trong bộ nhớ của thiết bị nhúng

sử dụng khóa một lần để mã hóa, nhưng tôi cần lưu trữ một khóa siêu bí mật

Điều mà chủ nhân của tôi yêu cầu là các khóa không thể truy cập được, do đó, bảo vệ vật lý bên cạnh khóa được cung cấp bởi các mô-đun bộ nhớ an toàn và MCU, không được xem xét.

Giả sử không có thiết bị cấp quân sự nào được sử dụng, có giải pháp nào mà các bạn biết và có thể đề xuất không?

Cảm ơn trước!


Bạn có thể giải thích thêm về những gì bạn đang cố gắng ngăn chặn? Bộ vi xử lý làm gì? Bạn có nghĩ rằng sử dụng khóa chung / riêng có thể hoạt động không? Nếu bạn lưu trữ khóa riêng trên bộ vi xử lý? Sau đó, các thiết bị gửi lệnh sẽ tạo khóa phiên, mã hóa nó bằng khóa chung và gửi cho bạn. Sau đó, cả hai bên sử dụng khóa phiên. Điều gì sẽ xảy ra nếu kẻ tấn công có khóa công khai (mặc dù nó được gọi là "công khai", nhưng thực tế không phải công khai)?
mkeith

@mkeith Tôi đã cập nhật câu hỏi, hy vọng nó có ích :)
Sonja

3
Vì bạn đã chọn PIC đó, tại sao không sử dụng "Lưu trữ khóa an toàn theo chương trình" mà nó cung cấp? Nó có mô-đun tiền điện tử tích hợp sẵn!
pjc50

2
Tôi không nghĩ rằng bạn đã định lượng rõ ràng giá trị của bí mật của bạn. Có vẻ như bạn muốn một phương pháp rẻ tiền và đáng tin cậy (mà tôi nghĩ là không biết). Yêu cầu làm rõ về những gì cần có thể sau khi tìm thấy lỗ hổng trong giải pháp đầu tiên này. Các bản cập nhật firmware không dây đã ký sẽ là tính năng không thể thương lượng đầu tiên của tôi ... Đó là sự cố hệ thống - luôn luôn.
Sean Houlihane

Chà, nếu bộ nhớ của PIC được bảo vệ (và thậm chí nó còn có mô-đun lưu trữ khóa) thì tại sao không sử dụng mã hóa AES đơn giản? Tôi biết nó đối xứng, nhưng nếu máy chủ an toàn (mà chúng ta phải giả định) thì không có rủi ro nào ở đây - hay là ở đó?
Jan Dorniak

Câu trả lời:


11

Tôi xin lỗi câu trả lời này sẽ không thực sự giải quyết vấn đề của bạn. Nhưng nó quá dài để phù hợp với một bình luận, và nó sẽ cho phép bạn suy nghĩ lại vấn đề của bạn theo cách đúng đắn (bởi vì như vậy, tôi nghĩ rằng nó là thiếu sót).

Loại vấn đề này phải được giải quyết khi tính đến tất cả các thành phần của hệ thống và đưa ra các giả định hợp lý về những gì một hacker tiềm năng có thể hoặc không thể làm được.

Ví dụ:

Bạn nói: "PIC32MZ2048efm144 (MCU) nhận các lệnh được mã hóa bằng một khóa cụ thể, giải mã chúng và thực thi lệnh". Tôi cho rằng kết quả của việc thực thi lệnh là chuyển đổi một số GPIO để điều khiển công cụ.

Sau đó, tại sao bạn sợ rằng, có khả năng, một số dữ liệu được giải mã giữa MCU và mô-đun mã hóa / giải mã? Dù sao, một hacker có quyền truy cập vào phần cứng để xem các lệnh được giải mã sẽ có thể trực tiếp hành động trên các GPIO của MCU và "điều khiển công cụ" một cách dễ dàng.

Ví dụ thứ hai:

Sử dụng các phím đúng giờ là một ý tưởng. Nhưng như bạn nói, nơi nào bạn lưu trữ khóa chính được sử dụng để tạo các khóa một lần? Bạn sẽ phải đối mặt với các câu hỏi chính xác như trong vấn đề ban đầu của bạn.

Trên thực tế, không có cách nào để bảo mật hệ thống của bạn nếu bạn cho rằng tin tặc có thể lẻn vào bất kỳ vị trí nào trong hệ thống của bạn (đó là những gì có vẻ như tôi đang giả định).

Điều gì làm cho một hệ thống an toàn, sau đó?

Thẻ thông minh được bảo mật vì không hợp lý khi cho rằng hacker có thể thăm dò các tuyến đường bên trong IC, giữa bộ nhớ và khối CPU.

Một khóa cửa điện được thực hiện an toàn vì không hợp lý khi cho rằng một hacker có thể tiếp cận các dây dẫn hoạt động của khóa.

V.v ... Về cơ bản, bạn phải bắt đầu bằng cách xác định những thứ mà hacker không thể làm được và tìm ra toàn bộ giải pháp của bạn từ đó. Ví dụ, có thể đặt toàn bộ hệ thống của bạn trong một hộp an toàn, chống giả mạo vật lý không? Trong trường hợp này, bạn có thể tự do có các lệnh được giải mã đi qua một xe buýt nội bộ.

Bạn không thể xây dựng một hệ thống an toàn mà không biết hacker là gì một cách hợp lý. Bạn đã không nói với chúng tôi điều đó. Do đó, chúng tôi không thể đề xuất một giải pháp hoàn chỉnh.


trước hết, cảm ơn bạn đã trả lời công phu! Tôi đã cập nhật câu hỏi theo cách mà tôi tin sẽ trả lời bạn :)
Sonja

Điều tôi đảm nhận từ việc chỉnh sửa bài đăng của bạn là chỉ cần bảo mật các khóa. Kết quả thực tế của các lệnh không cần phải được bảo mật. Trong trường hợp này, đặt các khóa trong một mô-đun bảo mật bên ngoài như bạn đề xuất và chấp nhận rằng các lệnh được giải mã có thể được nhìn thấy rõ ràng. Nếu đề xuất của tôi không hợp lệ vì một số lý do, hãy dành thời gian để giải thích chi tiết những gì được chấp nhận và những gì không . Đó không chỉ là một câu nữa trong bài viết của bạn mà chúng tôi cần. Chúng tôi cần toàn bộ hình ảnh của sự việc. Có thật không.
mờ

5
Ngoài ra, tôi cảm thấy rằng mã hóa các lệnh không thực sự là những gì bạn muốn làm. Thông thường, chúng ta cần mã hóa dữ liệu (một số thông tin về nội dung nào đó hoặc tài liệu ...). Nhưng chúng ta hiếm khi cần mã hóa các lệnh được gửi đến một thiết bị. Những gì thường được yêu cầu trên các lệnh là ký chúng , để đảm bảo rằng chúng đến từ bên được ủy quyền. Nhưng nội dung của họ hiếm khi nhạy cảm, thực sự. Vì vậy, bạn nên xác nhận điều này là tốt.
mờ

2

Điều này trông giống như một trường hợp cổ điển trong đó mã hóa khóa bất đối xứng sẽ hữu ích. Trong mã hóa khóa bất đối xứng, bạn có hai khóa, một khóa riêng và một khóa chung. Bạn muốn bảo vệ hoàn toàn khóa riêng, nhưng khóa chung có thể được công khai và không cần bảo vệ. bạn có thể giữ khóa riêng trên hệ thống bảo mật và khóa chung trên thiết bị nhúng.


Giải mã dữ liệu được thực hiện bằng khóa riêng (và mã hóa bằng khóa chung). Mặt khác, điều đó có nghĩa là mọi người đều có thể giải mã (vì mọi người đều có quyền truy cập vào khóa chung), đây sẽ là một vấn đề. Do đó, bạn cần có khóa riêng trong thiết bị. Vì vậy, bây giờ, làm thế nào để đặt khóa riêng trong thiết bị? Chà, quay lại vấn đề ban đầu ...
mờ

việc có thể giải mã các lệnh không cho phép tạo các lệnh mới từ đầu để có thể truy cập khóa công khai bằng cách nào đó không phải là vấn đề
masterX244

Điều này thường giống như ký mã hóa; điều này có nhược điểm là nếu ai đó có khóa chung (không thực sự phải công khai, có thể được lưu trữ an toàn như khóa đối xứng) thì họ có thể giải mã mọi thứ; nhưng, như masterX244 nói, bạn thường không thể tạo / ký các lệnh mới. Tôi nghĩ rằng đây là một giải pháp tốt.
CoderTao

0

Bạn không giải thích lý do tại sao bạn muốn các lệnh được mã hóa (nói cách khác, mô hình mối đe dọa của bạn là gì). Mục đích của bạn là để ngăn chặn kẻ thù sở hữu thiết bị dựa trên PIC xác định các lệnh được gửi đến nó là gì? Hay bạn đang cố gắng ngăn thiết bị dựa trên PIC thực thi một tập hợp các lệnh được thay thế bởi một kẻ thù và chỉ cho phép nó thực thi các lệnh có nguồn gốc từ máy chủ của bạn?

Nếu trước đây, bạn phải đối mặt với một nhiệm vụ gần như không thể: thiết bị của bạn phải giải mã các lệnh để thực thi chúng - sở hữu thiết bị PIC có nghĩa là sở hữu khóa giải mã. Một kẻ thù có thể trích xuất khóa (được lưu trữ trong thiết bị PIC mà anh ta sở hữu) hoặc chỉ cần đợi cho đến khi phần sụn của bạn giải mã các lệnh và sau đó bắt chúng từ bộ nhớ.

Mặt khác, nếu bạn chỉ cố gắng đảm bảo rằng thiết bị của bạn sẽ chỉ thực hiện các lệnh xuất phát từ máy chủ của bạn, thì bạn thật may mắn. Trong trường hợp này, bạn có thể sử dụng mã hóa khóa chung (ví dụ RSA) hoặc sơ đồ chữ ký số khóa công khai (ví dụ DSS). Trong đó, thiết bị của bạn chỉ lưu trữ khóa chung: điều này đủ để giải mã các lệnh (hoặc xác minh chữ ký số), nhưng không thể được sử dụng để mã hóa các lệnh (hoặc tạo chữ ký số) mà thiết bị sẽ chấp nhận. Điều đó yêu cầu khóa riêng mà bạn sử dụng để mã hóa (hoặc ký) các lệnh trước khi gửi chúng. Khóa riêng không bao giờ cần rời khỏi máy chủ của bạn. Thậm chí tốt hơn, mã hóa ký các lệnh trên máy không giao tiếp với bên ngoài và chỉ sao chép chúng vào máy chủ để không bao giờ tìm thấy khóa riêng trên máy chủ có thể truy cập bên ngoài.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.