Score:0

การดำเนินการตามแผนที่วุ่นวายเพื่อสร้าง (หลอก) - จำนวนสุ่ม

ธง in

สำหรับโครงการของฉันฉันใช้แผนที่ Henon เพื่อสร้าง (หลอก) - จำนวนสุ่ม ฉันใช้รหัสต่อไปนี้เพื่อสร้างเมทริกซ์ของ (หลอก) - ตัวเลขสุ่ม

def create_by_henonmap (มิติ, คีย์):
    x = คีย์[0]
    y = คีย์[1]
    # จำนวนรวมของ bitSequence ที่ผลิต
    ลำดับขนาด = มิติ * มิติ * 8
    bitSequence = [] # แต่ละ bitSequence ประกอบด้วย 8 บิต
    byteArray = [] # แต่ละ byteArray มี m bitSequence
    Matrix = [] # แต่ละ Matrix มี m*n byteArray

    สำหรับฉันในช่วง (sequenceSize):
        # แผนที่คลาสสิก Henon มีค่า a = 1.4 และ b = 0.3
        xN = y + 1 - 1.4 * x**2
        yN = 0.3 * x

        x = xN
        y = วาย

        ถ้า xN <= 0.4:
            บิต = 0
        อื่น:
            บิต = 1

        พยายาม:
            bitSequence.append(บิต)
        ยกเว้น:
            bitSequence = [บิต]

        ถ้าฉัน % 8 == 7:
            ทศนิยม = ธ.ค. (bitSequence)
            พยายาม:
                byteArray.append (ทศนิยม)
            ยกเว้น:
                byteArray = [ทศนิยม]
            บิตลำดับ = []

        byteArraySize = มิติ * 8

        ถ้าฉัน % byteArraySize == byteArraySize-1:
            พยายาม:
                Matrix.append(byteArray)
            ยกเว้น:
                เมทริกซ์ = [byteArray]
            ไบต์อาร์เรย์ = []

    กลับเมทริกซ์

ก่อนที่ฉันจะใช้โค้ดนี้ในการผลิต ฉันจะทดสอบการสุ่มโดยชุดทดสอบ NIST จาก นี้ แต่ได้ผลลัพธ์นี้:

การทดสอบที่มีสิทธิ์จาก NIST-SP800-22r1a:
-โมโนบิต
-frequency_within_block
วิ่ง
-longest_run_ones_in_a_block
-dft
-non_overlapping_template_matching
- อนุกรม
-around_entropy
- ผลรวมสะสม
-random_excursion
-random_excursion_variant
ผลการทดสอบ:
- ผ่าน - คะแนน: 0.525 - Monobit - เวลาที่ผ่านไป: 0 ms
- ผ่าน - คะแนน: 0.999 - ความถี่ภายในบล็อก - เวลาที่ผ่านไป: 0 ms
- ล้มเหลว - คะแนน: 0.0 - เรียกใช้ - เวลาที่ผ่านไป: 1 ms
- FAILED - คะแนน: 0.002 - คนที่วิ่งนานที่สุดในบล็อก - เวลาที่ผ่านไป: 0 ms
- ล้มเหลว - คะแนน: 0.004 - การแปลงฟูเรียร์แบบไม่ต่อเนื่อง - เวลาที่ผ่านไป: 2 ms
- ผ่าน - คะแนน: 0.899 - การจับคู่เทมเพลตที่ไม่ทับซ้อนกัน - เวลาที่ผ่านไป: 8 ms
- ล้มเหลว - คะแนน: 0.0 - อนุกรม - เวลาที่ผ่านไป: 54 ms
- ล้มเหลว - คะแนน: 0.0 - เอนโทรปีโดยประมาณ - เวลาที่ผ่านไป: 102 ms
- ผ่าน - คะแนน: 0.887 - ผลรวมสะสม - เวลาที่ผ่านไป: 4 ms
- ล้มเหลว - คะแนน: 0.11 - การสุ่มตัวอย่าง - เวลาที่ผ่านไป: 28 ms
- ผ่าน - คะแนน: 0.678 - Random Excursion Variant - เวลาที่ผ่านไป: 1 ms

ฉันคิดว่าแผนที่ Chaotic สามารถสร้างการสุ่มได้เพียงพอ แต่ผลลัพธ์ที่ได้นั้นน่าผิดหวังมาก มีข้อผิดพลาดเชิงตรรกะภายในโค้ดที่สร้างผลลัพธ์ที่ไม่ดีนี้หรือไม่ ฉันเดาว่าวิธีที่มันสร้างลำดับบิตของตัวเลขทำให้เกิดปัญหา

        ถ้า xN <= 0.4:
            บิต = 0
        อื่น:
            บิต = 1

มีการใช้งานแผนที่อลหม่านเพื่อสร้าง (หลอก) - จำนวนสุ่มที่ดีกว่านี้หรือไม่?

Paul Uszak avatar
cn flag
สวัสดี ทั้งหมดนี้รู้สึกผิด การทดสอบใช้เวลา ms? ควรใช้เวลานานโดยเฉพาะสำหรับ Python ไฟล์ตัวอย่างใหญ่แค่ไหน? ทำไม `xN` ถึงลำเอียงนัก? เรียกใช้ `ent` ในไฟล์ตัวอย่างและดูว่ามีข้อความว่าอย่างไร เป็นการทดสอบแบบสุ่มไปสู่ขั้นตอนนี้
fgrieu avatar
ng flag
ข้อสังเกตสองข้อไม่ได้หมายถึงคำอธิบายว่าทำไมการทดสอบจึงล้มเหลว: 1) ใช้การประมาณค่าทศนิยมของตัวแปรจริง นั่นทำให้อาร์กิวเมนต์เป็นโมฆะตามสมมติฐานของตัวแปรจริง โดยเฉพาะอย่างยิ่ง ข้อโต้แย้งที่ว่าการเปลี่ยนแปลงนำไปสู่พฤติกรรมที่ยุ่งเหยิงและระยะเวลาอันยาวนานจะแตกสลาย ทั้งในทางทฤษฎีและในทางปฏิบัติในระดับหนึ่ง 2) การทดสอบทางสถิติเชิงทดลองเช่นการทดสอบ NIST บางครั้งอาจแสดงว่าเครื่องกำเนิดไม่เหมาะสม ไม่ใช่ว่ามันดีสำหรับการใช้งานการเข้ารหัส เป็นเรื่องง่ายมากที่จะสร้างเครื่องกำเนิดไฟฟ้าที่ผ่านการทดสอบ NIST แต่สามารถคาดเดาได้จากผลลัพธ์ที่ต่อเนื่องกันไม่กี่รายการ
Score:2
ธง my

ปัญหาของตัวสร้างตัวเลขสุ่มนี้คือบิตมีความสัมพันธ์กัน บิตเอาต์พุตที่อยู่ติดกันแตกต่างกัน 70% ของเวลา (แน่นอนว่าสำหรับสตรีมแบบสุ่ม เราคาดว่าเอาต์พุตจะต่างกัน 50% ของเวลาทั้งหมด) นี่เพียงพอที่จะทำให้การทดสอบใด ๆ ที่ขึ้นอยู่กับความสัมพันธ์ของบิตล้มเหลว

rng นี้ขึ้นอยู่กับความโกลาหล แต่เลขชี้กำลังของ Lyapunov นั้นไม่ใหญ่พอที่จะปิดบังความสัมพันธ์ระหว่างสถานะของตัวอย่างที่ต่อเนื่องกัน

WhyMeasureTheory avatar
in flag
มีการปรับปรุงใด ๆ ของ rng นี้หรือฉันควรใช้แผนที่ที่วุ่นวายอื่น @poncho คำแนะนำของคุณจะเป็นประโยชน์อย่างมากสำหรับฉัน และขอบคุณสำหรับคำตอบของคุณ
poncho avatar
my flag
วิธีปรับปรุงจะขึ้นอยู่กับสิ่งที่คุณพยายามทำ หากคุณกำลังพยายามหาค่า rng ทางสถิติ วิธีที่ชัดเจนคือการคำนวณเลขชี้กำลังของ Lyapunov และจากนั้น ให้พิจารณาว่าต้องใช้ 'ขั้นตอน' กี่ขั้นตอนในการเปลี่ยนความไม่ถูกต้องของทศนิยมให้เป็นความแปรปรวนในเอาต์พุตบิต (และสร้างเอาต์พุตเดียวเมื่อมีหลายขั้นตอน) หากคุณกำลังพยายามพัฒนา 'crypto rng' นั่นจะยากกว่า (เนื่องจากปัญหาที่ fgrieu ชี้ให้เห็น)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา