Tôi có thể thực hiện một nguồn entropy (yếu) trong FPGA không?


12

Tôi đang làm việc với một nền tảng IoT trong FPGA để đánh giá và tạo mẫu. Tôi cần cung cấp hỗ trợ cho TLS và tôi cần một nguồn entropy.

Tôi hiểu rằng các nguồn nhiễu ngẫu nhiên thực sự khá chuyên nghiệp (thậm chí là thực tế) trong FPGA, vì hiệu suất của thiết bị thường khá tốt (và khó tìm thấy bất kỳ tham số trường hợp góc nào), nhưng tôi có thể thực hiện một trình tạo chuỗi giả ngẫu nhiên mà không cần bất kỳ các vấn đề.

Tôi chỉ có một số kênh I / O tiêu chuẩn (uart, I2C, v.v.), không có gì có vẻ như nó có thể cung cấp nhiều thứ để tạo PRBS - ngoại trừ có thể là đầu vào ADC âm thanh. Có thể có bất kỳ thủ thuật đáng tin cậy nào để tạo entropy trong một đồ họa mà tôi phải xem xét không?

Giả sử rằng tôi sử dụng PRBS, tôi có khả năng có thể gắn nguồn tiếng ồn bên ngoài mà tôi chắc chắn có thể sử dụng làm hạt giống. Tôi muốn biết điều này thực sự sẽ bổ sung bao nhiêu vào việc triển khai TLS của tôi. Điều này sẽ đáng tin cậy và an toàn, hoặc chỉ tốt hơn một chút so với sử dụng chuỗi giả ngẫu nhiên cố định? Tôi có cần tiếp tục bỏ phiếu nguồn tiếng ồn bên ngoài để có thêm entropy không?

Sẽ ổn nếu nguồn entropy mà tôi kết thúc không an toàn bằng tiền điện tử (vì đây chỉ là để tạo mẫu), nhưng tôi muốn hiểu sự đánh đổi chất lượng chi phí.

Câu trả lời:


6

Bạn có cần không Bạn có thể triển khai một trình tạo ngẫu nhiên an toàn bằng mật mã nếu bạn có hai điều: một số lưu trữ an toàn có thể ghi lại và một hạt giống ban đầu. Đó là, đủ để gieo RNG một lần, sau đó lưu trạng thái của nó và thoát khỏi trạng thái đã lưu. Nó không lý tưởng, sẽ tốt hơn nếu trộn theo entropy theo định kỳ, nhưng không sao, đặc biệt là đối với một protoype phát triển.

Bạn cần phải có lưu trữ an toàn ghi lại. Nếu thiết bị chỉ có ROM và lưu trữ không an toàn, thì phương pháp này là không thể. Phải có một vị trí nơi bạn có thể lưu trữ trạng thái RNG theo cách mà đối thủ của bạn không thể đọc và sửa đổi nó.

Cách thức hoạt động của thiết bị này là khi thiết bị khởi động, nó tải trạng thái RNG hiện tại và sử dụng nó để tạo ra một số byte ngẫu nhiên đủ cho kích thước gấp đôi trạng thái RNG. Viết nửa đầu dưới dạng trạng thái RNG mới lưu và sử dụng nửa sau làm trạng thái RNG ban đầu cho phiên hiện tại. Với bất kỳ PRNG bảo mật bằng mật mã, điều này mang lại một PRNG an toàn về mặt mật mã. Lưu ý rằng điều quan trọng là bạn không sử dụng lại trạng thái RNG được lưu trữ, đó là lý do tại sao bạn phải viết trạng thái RNG độc lập mới trước khi bạn bắt đầu sử dụng RNG.

Việc tiêm entropy ban đầu có thể xảy ra trong quá trình sản xuất hoặc khi thiết bị được thiết lập. Thông thường những điều đó xảy ra với một kết nối với PC có thể tạo ra entropy thay mặt cho thiết bị.


OK, vì vậy trong bối cảnh này, tôi không nghĩ rằng việc lưu trữ thậm chí cần được bảo mật, do mô hình sử dụng không phải là sản phẩm tiêu dùng. Bất kỳ kẻ tấn công nào cũng có thể được cho là không có quyền truy cập vật lý vào thiết bị của tôi (mặc dù chúng có thể có một thiết bị giống hệt nhau) . Vì vậy, tôi không thể ngăn chặn một bản sao.
Sean Houlihane
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.