Score:0

การแจกแจงค่าจากตัวสร้างความสอดคล้องเชิงเส้น java Random()

ธง mx

ในระหว่างที่ฉันค้นคว้าเกี่ยวกับแอปพลิเคชันจาวา ฉันค้นพบว่า ถัดไปInt(64) หน้าที่ของ java.Random() คลาสใช้เพื่อสร้างคีย์การเข้ารหัส

ขนาดกุญแจคือ 16 ไบต์. ฉันรู้ว่าไม่แนะนำให้ใช้ตัวสร้างนี้เพราะมีความเสี่ยง โดยเฉพาะอย่างยิ่งในกรณีนี้ ค่าของคีย์แต่ละไบต์จะถูกเลือกจากช่วงสั้นๆ จาก 0x0 ถึง 0x40.

ฉันคุ้นเคยกับความจริงที่ว่ามันเป็นไปได้ที่จะ ทำนาย ค่าถัดไป ââของตัวสร้างโดยใช้ค่าก่อนหน้า แต่ในกรณีของฉัน meyan ไม่มีข้อมูลเกี่ยวกับค่าก่อนหน้า (คีย์ถูกเข้ารหัสและฉันไม่สามารถเข้าถึงค่าของมันได้) ดังนั้นในที่นี้เรากำลังพูดถึงการวนซ้ำของค่าคีย์ ฉันไม่เข้าใจว่าฉันจะใช้ข้อมูลที่แต่ละค่าถัดไปขึ้นอยู่กับค่าก่อนหน้า (พารามิเตอร์ oldseed) ได้อย่างไร

ป้องกัน int ถัดไป (บิต int) {
        oldseed ยาว, เน็กซ์ซีด;
        AtomicLong seed = this.seed;
        ทำ {
            oldseed = seed.get();
            nextseed = (ตัวคูณ oldseed * + ส่วนเพิ่ม) & mask;
        } ในขณะที่ (!seed.compareAndSet(oldseed, nextseed));
        กลับ (int)(nextseed >>> (48 - บิต));
}

จะลดจำนวนการแจงนับสำหรับคีย์ 16 ไบต์ดังกล่าวได้อย่างไร

fgrieu avatar
ng flag
ได้รับ 16 ไบต์ด้วย next(6) หมายความว่าคุณกำลังใช้ " from 0x0 ถึง 0x40" เพื่อหมายถึงใน [0, 0x40-1] หรือไม่ จากนั้นบอกใบ้: สมมติเธรดเดียวระหว่างการสร้างคีย์ และทำให้ง่ายขึ้นตามสิ่งที่โค้ดนี้ทำ จากนั้นค้นหาว่าบิตใดของเมล็ดมีอิทธิพลต่อคีย์ 16 ไบต์สรุปว่าสามารถมีคีย์ขนาด 16 ไบต์ดังกล่าวได้จำนวนเท่าใด และจะระบุได้อย่างไร บางที ลองตรวจสอบวิธีการเลือกเมล็ดพันธุ์ ซึ่งอาจช่วยให้ระบุคีย์ที่แท้จริงได้เร็วขึ้นมาก
Sergey Unk avatar
mx flag
@fgrieu ไม่มี next(6) - ใช้ nextInt(64) ซึ่งหมายความว่าแต่ละไบต์ของคีย์ 16 หลักเป็นตัวเลขในช่วง [0;63] (ระบบทศนิยม)
fgrieu avatar
ng flag
ชัดเจนยิ่งขึ้น และคีย์ไบต์มีตั้งแต่ 0x0 ถึง 0x3F รวมอยู่ด้วย แก้ไขคำใบ้ตามที่กล่าวมา: ทำความเข้าใจว่า `nextInt(64)` ใช้ `next(31)` อย่างไร และเหตุใด `nextInt(64)` จึงเทียบเท่ากับ `next(6)` อย่างแม่นยำ จากนั้นถือว่าเธรดเดียวระหว่างการสร้างคีย์ และทำให้โค้ดของคำถามง่ายขึ้นตามนั้น ค้นหาว่าบิตใดของเมล็ดมีผลต่อคีย์ 16 ไบต์ สรุปจำนวนคีย์ 16 ไบต์ดังกล่าวที่สามารถมีได้ และวิธีระบุคีย์ทั้งหมดด้วยต้นทุนที่เป็นไปได้ บางที ลองตรวจสอบวิธีการเลือกเมล็ดพันธุ์ ซึ่งอาจช่วยให้ระบุคีย์ที่แท้จริงได้เร็วขึ้นมาก

โพสต์คำตอบ

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