Không có lựa chọn nào trong số đó đặc biệt tốt hơn hoặc tệ hơn các lựa chọn khác, vì tất cả chúng đều rất không an toàn. Tôi đang đi với tùy chọn 4.
SRAM là nơi an toàn nhất để lưu trữ khóa, nhưng bạn không bao giờ được tiêm chúng từ thế giới bên ngoài. Chúng phải LUÔN LUÔN được tạo trong bộ xử lý, trong khi khởi động. Làm bất cứ điều gì khác ngay lập tức làm mất hiệu lực phần còn lại - nó tự động không an toàn.
Không lưu trữ khóa trong bộ nhớ không biến đổi, bạn đã đúng về điều này. Sẽ không có vấn đề gì nếu bạn bảo vệ EEPROM hoặc bộ nhớ flash khỏi bị đọc. Mã cầu chì bảo vệ đọc được dễ dàng đảo ngược. Kẻ tấn công chỉ cần giải mã (loại bỏ hoặc khắc hóa học bao bì epoxy đen để lộ silicon chết bên trong). Tại thời điểm này, chúng có thể che đi phần chết là các ô nhớ không bay hơi (các phần này rất đều đặn và trong khi các ô nhớ riêng lẻ rất nhỏ để nhìn thấy, cấu trúc lớn hơn có thể) và một phần nhỏ của một cái gì đó mờ đục với UV được che dấu trên phần đó. Sau đó, kẻ tấn công có thể chiếu đèn UV vào chip trong 5-10 phút và đặt lại tất cả các cầu chì, bao gồm cả cầu chì CRP. Bộ nhớ OTP bây giờ có thể được đọc bởi bất kỳ lập trình viên tiêu chuẩn nào.
Hoặc, nếu họ được tài trợ tốt (giả sử, nhận được các khóa đó trị giá hơn 1000 đô la cho ai đó), họ có thể chỉ cần đọc các ô nhớ trực tiếp bằng một số loại kính hiển vi điện tử.
Để được an toàn, các khóa phải được xóa, không được che giấu.
- Không, vì những lý do tương tự ở trên.
Bây giờ, vào tùy chọn 4:
- Chỉ cần sử dụng mã hóa. Phân phối khóa là một vấn đề được giải quyết. Vì vậy, sử dụng giải pháp có sẵn. Chip nên sử dụng RNG của nó và nhiều cân nhắc khác phải được thực hiện để đảm bảo nó có đủ nguồn cung cấp entropy và bộ tải khởi động nên khởi động trực tiếp vào chương trình tạo (các) khóa bí mật cần có trong mục đích chung đăng ký và chuyển trực tiếp vào SRAM, nơi họ sẽ ở lại cho đến khi bị xóa.
Tuy nhiên, có một vấn đề, đó là không có gì ngoại trừ CPU có bất kỳ ý tưởng nào về khóa bí mật là gì. Không có vấn đề: sử dụng mật mã khóa công khai. Những gì bạn LÀM đã lưu trong bộ nhớ OTP là khóa chung của bạn. Khóa này có thể được đọc bởi bất cứ ai, bạn có thể đăng nó lên trao đổi ngăn xếp, bạn có thể vẽ nó ở bên cạnh một tàu chở dầu bằng chữ cao 5 feet, điều đó không thành vấn đề. Điều tuyệt vời về mật mã khóa công khai là nó không đối xứng. Khóa để mã hóa một cái gì đó không thể giải mã nó, đòi hỏi khóa riêng. Và ngược lại, khóa để giải mã thứ gì đó được mã hóa bằng khóa chung có thể được sử dụng để mã hóa thứ gì đó. Vì vậy, CPU tạo các khóa bí mật, sử dụng khóa chung được lưu trữ của bạn để ENCRYPT các khóa bí mật và chỉ cần gửi nó qua USB hoặc RS232 hoặc bất cứ điều gì bạn muốn. Đọc khóa bí mật yêu cầu khóa riêng của bạn, mà không cần phải được lưu trữ, gửi hoặc bao giờ liên quan đến chip. Khi bạn có khóa bí mật được giải mã bằng khóa riêng của mình (ở nơi khác, bên ngoài chip), bạn đã thiết lập. Bạn có một khóa bí mật được truyền an toàn được TẠO hoàn toàn trong chip, mà không phải lưu trữ bất cứ thứ gì ngoại trừ khóa chung - như đã nêu trước đó, không cần phải bảo vệ khỏi bị đọc.
Quá trình này được chính thức gọi là đàm phán quan trọng, và mọi thứ đều sử dụng nó. Bạn đã sử dụng nó nhiều lần ngày hôm nay. Có rất nhiều tài nguyên và thư viện có sẵn để xử lý nó. Xin vui lòng, đừng bao giờ 'tiêm' chìa khóa vào bất cứ điều gì.
Một điều cuối cùng cần đề cập: Tất cả những điều này là do xe AES có thể dễ dàng phục hồi bằng cách sử dụng các cuộc tấn công kênh bên, nằm trên nguồn cung cấp năng lượng và đo lường sự thay đổi phút trong bản vẽ hiện tại và thời gian giữa những thay đổi gây ra bởi các bit bị lật trong CPU như thanh ghi. Điều này, kết hợp với kiến thức về cách AES (hoặc bất kỳ một trong số rất nhỏ các thuật toán mã hóa có thể sử dụng) hoạt động, làm cho việc khôi phục khóa tương đối dễ dàng và không tốn kém. Nó sẽ không cho phép đọc khóa, nhưng nó có thể thu hẹp không gian phím thành một cái gì đó nhỏ một cách lố bịch, như 255 phím có thể. Con chip cũng không thể phát hiện ra nó, vì nó là thượng nguồn.
Điều này đã đánh bại các bộ tải khởi động được mã hóa AES-256 trên các bộ xử lý tiền điện tử 'an toàn' và nó thậm chí không khó lắm. Theo tôi biết, không có biện pháp chống phần cứng thực sự cho cuộc tấn công này. Tuy nhiên, chính các thuật toán mã hóa và cách chúng yêu cầu CPU lật các bit, điều này gây ra lỗ hổng này. Tôi nghi ngờ rằng các thuật toán chứng minh kênh phụ hoặc kênh bên sẽ cần phải (và hy vọng là) đang được phát triển.
Vì vậy, ngay bây giờ, câu trả lời thực sự về cách lưu trữ khóa (hoặc thậm chí chỉ sử dụng khóa tạm thời) trên thiết bị nhúng một cách an toàn là: bạn không thể.
Nhưng ít nhất nếu bạn tạo khóa mới mỗi lần sử dụng đàm phán khóa trong tùy chọn 4, thì một cuộc tấn công kênh bên chỉ có thể làm tổn hại đến khóa của kênh đang sử dụng và chỉ khi họ có thời gian để theo dõi sức mạnh trong khi nó mã hóa dữ liệu . Nếu bạn thường xuyên đàm phán các khóa mới được tạo trong nội bộ, điều này có thể đủ khả năng bảo mật.
Tạo khóa và lưu trữ chúng trong thời gian ngắn nhất có thể.