Điểm:0

Triển khai bản đồ hỗn loạn để tạo số ngẫu nhiên (giả)

lá cờ in

Đối với dự án của tôi, tôi đã sử dụng bản đồ Henon để tạo số ngẫu nhiên (giả). Tôi đã sử dụng đoạn mã sau để tạo ma trận của số ngẫu nhiên (giả).

def generate_by_henonmap(thứ nguyên, khóa):
    x = khóa[0]
    y = khóa[1]
    # Tổng số bitSequence được tạo
    SequenceSize = thứ nguyên * thứ nguyên * 8
    bitSequence = [] # Mỗi bitSequence chứa 8 bit
    byteArray = [] # Mỗi byteArray chứa m bitSequence
    Matrix = [] # Mỗi Matrix chứa m*n byteArray

    cho tôi trong phạm vi (sequenceSize):
        # Bản đồ Henon cổ điển có giá trị a = 1,4 và b = 0,3
        xN = y + 1 - 1,4 * x**2
        yN = 0,3 * x

        x = xN
        y = yN

        nếu xN <= 0,4:
            bit = 0
        khác:
            chút = 1

        cố gắng:
            bitSequence.append(bit)
        ngoại trừ:
            bitSequence = [bit]

        nếu tôi % 8 == 7:
            thập phân = tháng mười hai (bitSequence)
            cố gắng:
                byteArray.append(thập phân)
            ngoại trừ:
                byteArray = [thập phân]
            bitSequence = []

        byteArraySize = kích thước * 8

        nếu tôi % byteArraySize == byteArraySize-1:
            cố gắng:
                Matrix.append(byteArray)
            ngoại trừ:
                Ma trận = [byteArray]
            byteArray = []

    trả về ma trận

Trước khi tôi sử dụng mã này trong quá trình sản xuất của mình, tôi đã kiểm tra tính ngẫu nhiên bằng bộ Kiểm tra NIST từ cái này nhưng nhận được kết quả này:

Kiểm tra đủ điều kiện từ NIST-SP800-22r1a:
-monobit
-tần số_trong_khối
-chạy
-longest_run_ones_in_a_block
-dft
-non_overlaping_template_matching
- nối tiếp
-approximate_entropy
-số tiền tích lũy
-random_excursion
-random_excursion_variant
Kết quả kiểm tra:
- PASSED - điểm: 0,525 - Monobit - thời gian đã trôi qua: 0 ms
- PASSED - điểm: 0,999 - Tần suất trong khối - thời gian trôi qua: 0 ms
- FAILED - điểm số: 0,0 - Số lần chạy - thời gian đã trôi qua: 1 ms
- KHÔNG ĐẠT - điểm số: 0,002 - Lượt chạy lâu nhất trong một khối - thời gian trôi qua: 0 ms
- KHÔNG THÀNH CÔNG - điểm số: 0,004 - Biến đổi Fourier rời rạc - thời gian trôi qua: 2 ms
- ĐẠT - điểm: 0,899 - Khớp mẫu không trùng lặp - thời gian đã trôi qua: 8 ms
- FAILED - điểm số: 0,0 - Nối tiếp - thời gian trôi qua: 54 ms
- KHÔNG THÀNH CÔNG - điểm số: 0,0 - Entropy gần đúng - thời gian trôi qua: 102 ms
- PASSED - điểm: 0,887 - Tổng tích lũy - thời gian trôi qua: 4 ms
- KHÔNG ĐẠT - điểm số: 0,11 - Tham quan ngẫu nhiên - thời gian đã trôi qua: 28 ms
- ĐÃ ĐẠT - điểm: 0,678 - Biến thể Tham quan Ngẫu nhiên - thời gian đã trôi qua: 1 ms

Tôi đã nghĩ bản đồ Chaotic có thể tạo ra đủ sự ngẫu nhiên nhưng kết quả thật khó chịu. Có bất kỳ lỗi logic nào bên trong mã tạo ra kết quả kém này không? Tôi đoán cách nó tạo chuỗi bit của số tạo ra sự cố.

        nếu xN <= 0,4:
            bit = 0
        khác:
            chút = 1

Có triển khai bản đồ hỗn loạn nào tốt hơn để tạo số ngẫu nhiên (giả) không?

Paul Uszak avatar
lá cờ cn
Xin chào. Tất cả điều này cảm thấy sai, Bài kiểm tra mất ms? Nó sẽ mất nhiều thời gian đặc biệt cho Python. Làm thế nào lớn là tập tin mẫu? Tại sao `xN` lại thiên vị như vậy? Chạy `ent` trên tệp mẫu và xem nó nói gì. Đây là bài kiểm tra ngẫu nhiên ở giai đoạn này.
fgrieu avatar
lá cờ ng
Hai nhận xét không có nghĩa là giải thích lý do tại sao thử nghiệm không thành công: 1) nó được sử dụng xấp xỉ dấu phẩy động của các biến thực. Điều đó làm mất hiệu lực các đối số dựa trên giả định về các biến thực. Đặc biệt, những lập luận cho rằng sự biến đổi dẫn đến hành vi hỗn loạn và thời gian dài đã sụp đổ, về mặt lý thuyết và ở một mức độ nào đó trong thực tế. 2) Các kiểm tra thống kê thực nghiệm như kiểm tra NIST đôi khi có thể cho thấy rằng một trình tạo không phù hợp; không phải là nó tốt cho việc sử dụng mật mã. Rất dễ dàng để tạo một trình tạo vượt qua bài kiểm tra của NIST, nhưng vẫn có thể dự đoán được từ một vài kết quả đầu ra liên tiếp.
Điểm:2
lá cờ my

Vấn đề với trình tạo số ngẫu nhiên này là các bit có tương quan với nhau; các bit đầu ra liền kề khác nhau 70% thời gian (tất nhiên, đối với một luồng ngẫu nhiên, chúng tôi mong đợi đầu ra khác nhau 50% thời gian). Điều này đủ để khiến bất kỳ thử nghiệm nào phụ thuộc vào tương quan bit đều thất bại.

Rng này dựa trên sự hỗn loạn, nhưng số mũ Lyapunov gần như không đủ lớn để ngụy trang mối tương quan giữa các trạng thái của các mẫu liên tiếp.

lá cờ in
Có bất kỳ cải tiến nào của rng này hay tôi nên sử dụng bản đồ hỗn loạn khác? @poncho Đề xuất của bạn sẽ giúp ích rất nhiều cho tôi. Và cảm ơn phản hồi của bạn.
poncho avatar
lá cờ my
Làm thế nào để cải thiện nó sẽ phụ thuộc vào những gì bạn đang cố gắng làm. Nếu bạn đang cố gắng đưa ra một thống kê rng, thì, cách tiếp cận rõ ràng sẽ là tính toán số mũ Lyapunov, và từ đó, xác định có bao nhiêu 'bước' cần thiết để biến độ không chính xác của dấu phẩy động thành phương sai trong đầu ra bit (và tạo một đầu ra duy nhất sau nhiều bước đó). Nếu bạn đang cố gắng phát triển một 'crypto rng', thì điều đó khó khăn hơn (vì những vấn đề mà fgrieu đã chỉ ra)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.