Máy tạo số ngẫu nhiên sử dụng pin GPIO?


22

Tôi vừa đọc qua câu hỏi Trình tạo số ngẫu nhiên AVR và gặp một số cách để tạo hạt ngẫu nhiên trong một AVR:

  • Sử dụng một "Secure Secure" mục đích đặc biệt
  • Sử dụng cảm biến nhiệt độ bên trong
  • Đọc EEPROM bất thành văn
  • Đo khoảng thời gian giữa đầu vào của người dùng
  • Sử dụng chân ADC nổi.

Tại sao không chỉ là một pin kỹ thuật số duy nhất, được định cấu hình như đầu vào mà không cần kéo lên và nổi? Theo lý thuyết nên tạo ra một luồng bit ngẫu nhiên. Tại sao không sử dụng cái này? Là nhà nước quá chậm thay đổi? Nó có xu hướng bị mắc kẹt ở 1 hoặc 0? Bất kỳ vấn đề khác?


1
Bảo mật AVR đã chết AFAIK
Abbeyatcu

1
Không phải là bất thành văn eeprom luôn 0xFF?
vsz

@vsz, có thể nếu bạn viết một cái gì đó cho nó và quên những gì bạn đã viết, bây giờ nó là "ngẫu nhiên". haha
Vorac

Câu trả lời:


5

"Ngẫu nhiên" là một từ khó khăn. Trong một số bối cảnh, nó đơn giản có nghĩa là "không thể đoán trước", nhưng trong các bối cảnh khác - đặc biệt, những bối cảnh liên quan đến xử lý tín hiệu và mật mã - nó có nghĩa là "không thống kê".

Ngay cả khi giá trị đọc từ một pin nổi là không thể đoán trước ("ngẫu nhiên" theo nghĩa thứ nhất), nó không có khả năng hữu ích theo nghĩa thứ hai.


15

Sự khác biệt rõ ràng giữa việc sử dụng đầu vào kỹ thuật số và đầu vào tương tự, là có một khoảng lớn hơn các giá trị hạt giống có thể có trong tương tự.

Thứ hai, nhưng có lẽ quan trọng hơn: Nếu giá trị "trung vị" nổi của pin kỹ thuật số không chính xác ở giữa các mức cảm giác logic (không phải là mức công suất và mức đường ray mặt đất, nhưng chuyển đổi ngưỡng cho mạch đầu vào) thì luồng bit kết quả sẽ có độ lệch mạnh đối với 1 hoặc 0. Độ lệch này nghiêng hạt mạnh hơn nhiều so với độ lệch ở mức tương tự.

Sẽ mất rất ít khớp nối, từ các dấu vết hoặc tín hiệu gần đó, hoặc thông qua một số kéo / kéo xuống điện trở, dù được thiết kế hay vô tình, để đẩy một chốt kỹ thuật số "nổi" lên không bị trói - và điều đó cũng có thể xảy ra sau đó triển khai. Trong kỹ thuật bất kỳ thiết kế, hình thức chế độ thất bại này là tốt nhất nên tránh.


14

Một đầu vào nổi không được xác định. Nó có thể cung cấp cho bạn các bit ngẫu nhiên, nhưng nó cũng có thể có xu hướng bị kẹt ở mức 0 hoặc 1. Hầu hết thời gian nó sẽ bị kẹt. Và khi nó thực sự nổi, nó có thể gây ra tiếng ồn hệ thống và tiêu thụ điện năng tăng lên. Đầu vào nổi nói chung là một điều xấu, ngay cả khi đầu vào không được sử dụng cho bất cứ điều gì.


Nó không chỉ bị kẹt ở 0 hoặc 1 trong một thời gian, mà trừ khi hai bóng bán dẫn tạo ra giai đoạn đầu tiên của bộ đệm đầu vào được cân bằng HOÀN HẢO , hoặc có một số nguồn hiện tại bên ngoài trên đường này hoặc cách khác, đầu vào sẽ nổi cuối cùng lên đến 1 hoặc xuống 0
wjl

9

Giải pháp đơn giản nhất là xây dựng mạch tạo tín hiệu ngẫu nhiên phần cứng ra khỏi mạch bán dẫn thu gom mở bị lạm dụng. Sử dụng đầu ra luồng bit cho đầu vào trên bộ điều khiển vi mô. Lấy mẫu các bit đến trong khoảng thời gian. Để đảm bảo số lượng 1 và 0 chẵn, chỉ cần sử dụng thay đổi trạng thái là 1 và không thay đổi là số không. Google cho máy phát tiếng ồn bóng bán dẫn để biết thêm thông tin.


Hấp dẫn. "Mạch bán dẫn mở collector bị lạm dụng" trông như thế nào?
Stephen Collings

7
@Remiel - Bạn phân cực ngược lại đường giao nhau cơ sở của bóng bán dẫn và nó hoạt động như một zener thực sự nhảm nhí. Bạn lấy zener rất ồn và bạn khuếch đại nhiễu để có được dòng bit ngẫu nhiên. Xem robseward.com/misc/RNG2
Sói Connor

3

Một bộ tạo ngẫu nhiên có sẵn trong nhiều bộ vi điều khiển là lỗi giữa hai nguồn đồng hồ (có thể là một bên trong và một bên ngoài khác). Khi bạn so sánh chúng, chúng trôi nhẹ do tiếng ồn và điều đó có thể được sử dụng.

Cuối cùng nó phụ thuộc vào những gì bạn cần nó? Một chút ngẫu nhiên và bạn thậm chí có thể sử dụng chân ADC được kết nối với không có gì. Hoặc chỉ sử dụng một thuật toán như

Mersenne twister http://en.wikipedia.org/wiki/Mersenne_twister

Không có gì nếu điều này là an toàn về mặt mật mã, nhưng đủ tốt cho hầu hết các mục đích.


đó là cách tiếp cận được thực hiện trong ghi chú ứng dụng msp430 trong câu hỏi được tham chiếu trước đó, theo hiểu biết của tôi, hệ thống đồng hồ AVR không hỗ trợ kỹ thuật này
Abbeyatcu

Chính xác. Vẫn có thể làm điều đó với cùng một nguồn đồng hồ, ngay cả khi nó không được hỗ trợ trực tiếp.
Gustavo Litovsky

3

Chất lượng của một hạt giống ngẫu nhiên và thuật toán của nó được xác định bởi lượng entropy hoặc độ không đảm bảo trong mỗi bit ngẫu nhiên. Sau đó, máy phát tốt nhất của hạt giống sử dụng entropy cao với rất ít bước thay vì nhiều bước của entropy thấp.

Một ví dụ điển hình về entropy cao sử dụng phương pháp Latin Squares cho một hạt giống ngẫu nhiên.

Đầu vào nổi dễ bị sai lệch bởi sai sót, rò rỉ hoặc tiếng ồn xâm nhập.


0

Trong bộ vi xử lý PIC18F, bạn cần có một hạt giống cho số ngẫu nhiên. Hạt giống có thể là bất cứ thứ gì từ 0 đến 32767 (15 bit). Tôi sẽ đề nghị khi bắt đầu chương trình, bạn tạo một trong các chân và chân đầu vào tương tự. Đọc mã pin này và lấy bit có ý nghĩa ít nhất và đặt nó vào biến 16 bit. Sau đó dịch chuyển biến sang trái bằng 1. Đọc lại mã pin và đặt LSB của kết quả ADC vào bit đầu tiên của biến bạn đã lưu bit cuối cùng. Chuyển sang trái một lần nữa .....

Lặp lại điều này cho đến khi bạn có 15 bit trong biến của mình. Đây là con số bạn cần đưa vào hạt giống của mình.

Sau khi bạn đã thực hiện việc này, bạn có thể chỉ cần đặt chân đầu vào tương tự thành chân đầu vào kỹ thuật số và cho phép kéo yếu lên trên hoặc biến nó thành chân đầu ra kỹ thuật số. Một trong hai sẽ ngăn chặn pin này nổ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.