Nguồn Entropy trên Microchip PIC24F


7

Tôi đang làm việc để phát triển một phần cứng phụ kiện Android. Hiện tại, tôi đang cố gắng tạo một số ngẫu nhiên (ngôn ngữ C) trên một hệ thống nhúng, nhưng giá trị không thay đổi. Tôi tự hỏi nếu có bất kỳ nguồn entropy mà tôi có thể sử dụng để tạo số ngẫu nhiên.

Nếu có một cách khác để tạo số ngẫu nhiên ngoài việc sử dụng một cách entropy, tôi rất muốn nghe nó từ bạn!

Phần mềm tôi đang sử dụng:

MPLAB IDE Phiên bản 8.73 Trình biên dịch MPLAB C cho PIC24 và DSPIC v3.30

Thiết bị / công cụ tôi đang sử dụng:

DM240415 - Bộ khởi động phát triển phụ kiện PIC24F cho Android



2
Bạn có ý nghĩa gì "giá trị không thay đổi"? Giống như, nó chỉ xuất ra 9 mỗi khi bạn gọi nó?
endolith

Ví dụ khi tôi chạy một trình tạo ngẫu nhiên để tạo một mảng các số nguyên ngẫu nhiên. Giá trị là như nhau khi bắt đầu bất kể tôi chạy nó bao nhiêu lần. Ví dụ: Mảng [1] = 4; Mảng [2] = 49; Mảng [3] = 22; Mảng [4] = 91; Mảng [5] = 33; ...
Ezylryb

@Ezylryb - trông giống như một PRNG được thiết kế kém. Một PRNG luôn tạo ra cùng một chuỗi, nhưng thông thường họ dựa vào một sự kiện thực sự ngẫu nhiên để xác định nơi nó bắt đầu. Sự kiện ngẫu nhiên này thường bắt nguồn từ thời điểm hành động của người dùng diễn ra, như khi nhấn nút. Giá trị của bộ đếm thời gian chạy tự do sau đó có thể được sử dụng làm hạt giống cho PRNG. Rõ ràng PRNG của bạn luôn bắt đầu với cùng một giá trị hạt giống.
stevenvh

1
Chơi lô tô! Tôi đang sử dụng một số giá trị ngẫu nhiên trong một ứng dụng mật mã nhưng tôi không phát triển một số hệ thống đánh bạc. Đến một phần mở rộng nhất định, có. Người dùng có thể bị tổn hại nếu ai đó có thể dự đoán các số ngẫu nhiên @Dr X
Ezylryb

Câu trả lời:


12

Tất nhiên, bất cứ ai xem xét các phương pháp tạo ra các chữ số ngẫu nhiên, tất nhiên, đều ở trạng thái tội lỗi John Von Neumann

Một nguồn tiếng ồn tốt là tiếng ồn sự cố của diode zener. Sơ đồ đơn giản dưới đây cho thấy cách lấy nhiễu trắng từ zener bằng cách ghép hai LNA (Bộ khuếch đại nhiễu thấp) để tăng mức độ nhiễu.

máy tạo tiếng ồn trắng

Nếu bạn không quan tâm đến tiếng ồn là màu trắng, bạn có thể chỉ cần sử dụng bộ khuếch đại opamp với độ khuếch đại cao, với bộ so sánh theo sau nó. Khuếch đại của opamp đặt giới hạn cho băng thông và do đó tốc độ thay đổi tín hiệu số của bạn. Nếu tầng cần thiết hai opamp như LNA trong sơ đồ đã cho để có được luồng bit ngẫu nhiên nhanh hơn.

Bạn có thể sử dụng mô-đun SPI để xung nhịp theo byte của các bit ngẫu nhiên từ mạch này.
(SPI chỉ là một cách đơn giản để tự động thu thập 8 bit ngẫu nhiên, nó không thêm bất kỳ mức độ xác định nào: đầu vào thay đổi liên tục và ngẫu nhiên và bạn không bao giờ biết nó sẽ ở cạnh đồng hồ tiếp theo. Bạn cũng có thể đọc một Ghim I / O và chuyển mức bit đó thành byte kết quả của bạn.)

Mạch này là một giải pháp thay thế khả thi, cũng dựa vào một diode zener làm nguồn nhiễu:

mạch bit ngẫu nhiên

đồ đề cập đến OPA2340 cho bộ khuếch đại, nhưng không rõ ràng trên bộ so sánh. Mặc dù OPA2340 khá nhanh, tôi khuyên bạn nên sử dụng một bộ so sánh thực sự ở đây vì chúng thường nhanh hơn nhiều so với opamp. Chẳng hạn, TL3016 có độ trễ lan truyền nhỏ hơn 10ns và thời gian tăng là 0,5ns điển hình. Điều này có nghĩa là bạn có thể lấy mẫu các giá trị ngẫu nhiên nhanh hơn mà không có nguy cơ kết hợp giữa các mẫu liên tiếp.

Để kiểm tra trình tạo số ngẫu nhiên, bạn có thể kiểm tra tính quy tắc . Điều này có nghĩa là tạo ra một chuỗi dài các số ngẫu nhiên, càng dài càng tốt. Điều tốt nhất là vận chuyển nó đến PC để phân tích. Đếm các chuỗi một bit, đó là 0s và 1s. Nên có cùng số lượng của mỗi. Lặp lại tiếp theo cho chuỗi hai bit. Nên có nhiều 00s như 01s, 10s và 11s. Lặp lại cho chuỗi ba bit, v.v.
Tôi không phải là người thống kê, vì vậy có thể có các bài kiểm tra tốt hơn / dễ dàng hơn. Hãy thêm chúng vào.


trình tạo số ngẫu nhiên giả


Do giới hạn PIC24FJ256GB110, tiếng ồn trắng là không thể trừ khi tôi thêm một phần cứng bổ sung vào nó. Bạn đề cập SPI đến byte xung nhịp của các bit ngẫu nhiên. Đây có phải là con số thực sự ngẫu nhiên ?? hoặc dựa trên thuật toán để tạo ra số ngẫu nhiên
Ezylryb

@Ezylryb - điều này sẽ cung cấp cho bạn một số ngẫu nhiên tốt. Chỉ cần đảm bảo có đủ các mức chuyển tiếp trong chu kỳ đồng hồ SPI. Để kiểm tra tính ngẫu nhiên, bạn có thể chạy kiểm tra thống kê. Tôi không phải là một chuyên gia, nhưng tôi nghĩ việc kiểm tra tính bình thường trên một chuỗi dài có thể là một thử nghiệm tốt.
stevenvh

1
@Ezylryb - Không có phần cứng bổ sung được hiển thị trong một trong hai mạch ở đây, cổng SPI sẽ không tạo ra các số thực sự ngẫu nhiên. Không chắc chắn rằng chúng tôi đã rõ ràng về điều đó.
Kevin Vermeer

@Kevin Vermeer Vì vậy, mô-đun SPI của số ngẫu nhiên cũng dựa trên thuật toán toán học và không thực sự ngẫu nhiên thông qua entropy. Hừm .. Dường như không có cách nào tạo ra sự ngẫu nhiên thực sự trên PIC24FJ256GB110
Ezylryb

@Ezylryb - Mô-đun SPI có rất ít liên quan đến việc tạo số ngẫu nhiên, đó chỉ là một cách hay để lấy dữ liệu từ các trình tạo số ngẫu nhiên được mô tả ở trên. Bạn cũng có thể sử dụng đầu vào kỹ thuật số để đọc trạng thái đầu ra của các mạch trên.
Kevin Vermeer

4

Bạn không sử dụng PIC24FJ256GB110, trông như thế này:

TQFP-100, không nhất thiết phải là PIC24FJ256GB110

Bạn đang sử dụng Bộ khởi động Android:

hình ảnh của hội đồng quản trị

Như bạn hiểu, đó là một PCB khá cố định: Bạn không thiết kế PCB, và nhìn nhanh vào sơ đồ không tiết lộ nhiều thứ được chế tạo cho hoặc có thể được tái sử dụng như một nguồn entropy phần cứng, ngoại trừ một số dấu vết ADC có thể hoạt động như ăng ten theo đề xuất của Matt .

Tuy nhiên, giả sử bạn đang tương tác với thiết bị Android, bạn có ba nguồn nhiễu ngẫu nhiên tiềm ẩn:

  1. Bạn có thể đo thời gian chính xác của giao tiếp hoặc giao tiếp không đồng bộ xảy ra trên Android và sử dụng các bit thấp hơn của phép đo này làm nguồn entropy. Tất nhiên, lưu ý rằng điều này có thể được chơi bằng cách điều khiển chính xác thiết bị Android và do đó không phù hợp với các ứng dụng bảo mật.
  2. Sử dụng các bit thấp hơn của ADC đọc để tạo ra một số nhiễu ngẫu nhiên. Bạn có một số dấu vết nổi, vì vậy điều này sẽ nhận được kết quả không thể đoán trước.
  3. Bạn có tiêu đề đột phá đến một lá chắn Arduino! Điều này có nghĩa là bạn có thể thêm tất cả các loại phần cứng, như các giải pháp được đề xuất bởi Steven , tấm khiên này hoặc các giải pháp được đề xuất trong câu hỏi này . Có, điều này sẽ yêu cầu phần cứng bên ngoài.

Tuy nhiên, hãy lưu ý rằng bảo mật mật mã và tính ngẫu nhiên thực sự là một thứ khó. Có vẻ như bạn cần đọc thêm một chút trước khi bạn cố gắng tạo ra thứ gì đó mà mọi người có thể dựa vào, hoặc bạn có thể gặp rắc rối nghiêm trọng.


3

Vấn đề với các trình tạo số giả ngẫu nhiên là chúng không có. Họ tạo ra một chuỗi các số từ một điểm bắt đầu đã biết. Điều này thường đủ ngẫu nhiên cho hầu hết các sử dụng cấp thấp, nhưng không phải nếu bạn có ý thức bảo mật hoặc muốn nhiều hơn một hệ thống tương tác mà không có va chạm (ví dụ: kết nối mạng).

Vì vậy, có, như bạn nói đúng, bạn muốn có một nguồn entropy. Điều này có thể được sử dụng để đặt 'hạt giống' của trình tạo số ngẫu nhiên thành một giá trị không xác định. Vì nó chỉ thiết lập hạt giống và không thực sự tạo ra các số ngẫu nhiên, nên entropy chỉ thực sự cần được sử dụng một lần, do đó có thể khá "nặng" liên quan đến chu kỳ đồng hồ. Nó có thể chạy một lần khi khởi động hệ thống, và từ đó trở đi không bao giờ cần phải chạy lại.

Hầu hết entropy được thu thập (thu hoạch?) Từ các ngắt và các nguồn bên ngoài khác. Ý tưởng đầu tiên của tôi khiến mọi người chú ý sẽ là để một đầu vào nổi (có thể là một tín hiệu tương tự?) Với một chút dấu vết được liên kết với nó để hoạt động như một ăng ten. Điều này sẽ khá ngẫu nhiên xen kẽ giữa các giá trị, mà bạn có thể sử dụng để tạo một giá trị số của thứ tự đúng để tạo hạt giống cho trình tạo số giả ngẫu nhiên của bạn.

Một ý tưởng khác có thể là có một số dạng đầu dò được gắn vào đầu vào đó để nó có thể thu thập "tiếng ồn" một cách đáng tin cậy để được sử dụng làm nguồn entropy của bạn. Đó có thể là bất cứ thứ gì từ một micrô và op-amp đơn giản, cho đến một vài op-amps được liên kết với nhau để mang lại lợi ích lớn, và do đó tạo ra tiếng ồn trắng. Có bất kỳ số lượng nguồn tiếng ồn có thể có trong một mạch, tùy thuộc vào những gì bạn có theo cách của bạn trong cách lên tàu bất động sản và ngân sách.


2
Tôi có ấn tượng rằng một nguồn entropy tốt (cấp bảo mật) không phải là dễ dàng. OTOH cho các giao thức mạng và sử dụng thông thường khác, các giải pháp tương tự của bạn có thể sẽ đủ tốt.
jpc

1
có, để bảo mật, tôi chắc chắn sẽ sử dụng chip thế hệ entropy bảo mật bên ngoài hoặc CPU có entropy và SHA (ví dụ) được tích hợp.
Majenko

Trên PIC24F256GB110 , có thể có một nguồn entropy thực sự ngẫu nhiên mà không cần thêm bất kỳ phần cứng bổ sung nào vào nó không?
Ezylryb

@Ezylryb đọc đoạn 3
Kellenjb

@Majenko: Ý tưởng ăng-ten không tốt trong thực tế; nó có thể sẽ ở mức cao hoặc thấp.
Brian Carlton
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.