Score:1

มีเครื่องมืออะไรบ้างในการทำวิศวกรรมย้อนกลับ LFSR นอกเหนือจาก BMA

ธง cn

ฉันมีรหัสเวลาบางอย่างที่ดูเหมือนจะไม่เข้าใจ เราให้รหัสอื่นที่ถอดรหัสได้สำเร็จเพื่อจุดประสงค์เดียวกันด้วยอัลกอริทึม Berlekamp-Massey แต่รหัสนี้ดูเหมือนจะมีความซับซ้อนเชิงเส้นที่ 110 ซึ่งไม่สามารถนำไปใช้ได้จริงแต่อย่างใด นอกจากนี้ยังไม่สามารถสร้างขึ้นใหม่ด้วยพหุนามแบบลดค่าไม่ได้ 110 บิตที่ BMA พบ เพียงสองสามบิตแรกก็เป็นไปตามที่คาดไว้ จากนั้นบิตก็พลิกกลับ นั่นคือพวกมันเป็นส่วนกลับของบิตที่คาดไว้

ฉันเป็นผู้เริ่มต้นในการเข้ารหัสและไม่รู้ว่าจะดำเนินการอย่างไร ณ จุดนี้ มีอัลกอริธึมอื่นในการวิเคราะห์ LFSR (หรือลำดับสุ่มหลอกที่คล้ายกัน) หรือไม่ หรือใครมีเงื่อนงำภายใต้เงื่อนไขใดที่กทม.ตรวจพบพหุนามที่ยาวมากเช่นนี้?

kodlu avatar
sa flag
หากมีความซับซ้อนเชิงเส้นที่ 110 เพียง 220 บิต (หากไม่ใช่ข้อผิดพลาด) ควรเพียงพอผ่าน BMA ฉันถือว่ามันเป็นลำดับเลขฐานสอง คุณไม่ได้ระบุสิ่งนี้
neolith avatar
cn flag
ใช่ มันคือลำดับเลขฐานสองหรือ GF(2) ตามที่นักคณิตศาสตร์พูด ที่จริงเราไม่รู้ แต่ฉันได้วิเคราะห์ลำดับภายใต้สมมติฐานนั้น เพราะลำดับอื่นๆ ที่เราถอดรหัสสำเร็จก็เป็นเลขฐานสองเช่นกัน
Score:2
ธง us

ยังไม่ชัดเจนว่า "รหัสเวลาที่แน่นอน" คืออะไร แต่ฉันจะถือว่ามันหมายถึงลำดับความยาวจำกัด $s_0, s_1, \ldots, s_{N-1}$ ของ $N$ บิต ลำดับนั้นอาจถูกสร้างขึ้นโดย LFSR หรือไม่ เราไม่รู้ แต่เราต้องการหา LFSR (ฟีโบนัชชี) ที่สร้างลำดับ

มาตั้งเวทีกันสักหน่อย Fibonacci LFSR ของความยาว $n$ เป็นอาร์เรย์ของ $n$ บิตที่มีค่าเริ่มต้น $$(s_0, \quad s_1,\quad \ldots, \quad s_{n-2}, \quad s_{n-1})$$ และค่านิยมที่สืบต่อกันมา $$(s_0, \quad s_1, \quad \ldots, \quad s_{n-2}, \quad s_{n-1})\ \ลูกศรลง\ (s_1, \quad s_2, \quad \ldots, \quad s_{n-1}, \quad s_n)\ \ลูกศรลง\ (s_2, \quad s_3, \quad \ldots, \quad s_n, \quad \quad s_{n+1})\ \ลูกศรลง\ \cdots \quad \cdots$$ โดยที่เนื้อหาอาร์เรย์จะเลื่อนไปทางซ้ายในแต่ละขั้นตอน (รอบนาฬิกา) เพื่อให้บิตตกลง ออกจากปลายด้านซ้าย (LFSR เอาต์พุต) เป็นลำดับที่กำหนด ในขณะที่ บิตที่แสดงเป็น เข้าสู่ LFSR ทางด้านขวา เป็น กำลังคำนวณ เป็น การรวมกันเชิงเส้น (a.k.a. Exclusive-OR sum) ของ บาง ของ LFSR เนื้อหาในขั้นตอนที่แล้ว โดยเฉพาะอย่างยิ่งสำหรับ $i \geq 0$, เดอะ การเปลี่ยนสถานะ สามารถแสดงเป็น $$\biggr(s_i, \quad s_{i+1}, \ldots, \quad s_{i+n-2}, \quad s_{i+n-1}\biggr)\ \ลูกศรลง\ \biggr(s_{i+1}, \quad s_{i+2}, \ldots, \quad s_{i+n-1}, \quad {\Large{\oplus}}_{j=0}^ {n-1}c_{n-j} s_{i+j}\biggr),$$ ที่ไหน $c_i$มีค่า $0$ หรือ $1$เพื่อให้การ เชิงเส้น การผสมผสาน $c_ns_i\oplus c_{n-1}s_{i+1} \oplus \cdots \oplus c_1s_{i+n-1}$ ของก่อนหน้านี้ กำลังมีเนื้อหา LFSR เลี้ยงกลับ เข้าทางด้านขวาสุดของ LFSR เช่น $s_{n+i}$ คือผลรวม Exclusive-OR ของเนื้อหาก่อนหน้านี้ไม่กี่บิตที่เลือกไว้ (เนื้อหาที่สอดคล้องกัน $c_i$ มีค่า $1$). ดังนั้นชื่อรีจิสเตอร์กะป้อนกลับเชิงเส้นซึ่งเริ่มต้นเป็น LFSR

ด้วยคำอธิบายข้างต้น คำตอบหนึ่งสำหรับคำถามของ LFSR นั้นไม่สำคัญในแง่หนึ่ง: $N$ เวที LFSR พร้อมค่าสัมประสิทธิ์ป้อนกลับ $(c_N,c_{N-1}, \cdots, c_1) = (1,0,0,\cdots, 0)$ และการโหลดครั้งแรก $\big(s_0, s_1, \ldots, s_{N-1}\big)$ จะผลิตซ้ำไม่รู้จบ $$s_0, s_1, \ldots, s_{N-1},s_0, s_1, \ldots, s_{N-1}, s_0, s_1, \ldots, s_{N-1}, \cdots$$ ของรหัสเวลาที่กำหนด $s_0, s_1, \ldots, s_{N-1}$ ตลอดกาลนาน อีกทางหนึ่ง ใดๆ ทางเลือกอื่นของ $(c_N,c_{N-1}, \cdots, c_1)$ จะเติม shift register ด้วยสิ่งอื่น แต่ก่อนอื่น $N$ บิตออกจะยังคงอยู่ $s_0, s_1, \ldots, s_{N-1}$ และสิ่งที่ตามมาหลังจากนั้นก็จะแตกต่างออกไป นี่ไม่ใช่สิ่งที่เราต้องการอย่างชัดเจน ดังนั้นเราจึงแสวงหาเกณฑ์ที่ดีกว่า: ค้นหา สั้นที่สุด LFSR (และการโหลดเริ่มต้น) ที่จะสร้างขึ้น $s_0, s_1, \ldots, s_{N-1}$และนั่นคือสิ่งที่ Berlekamp-Massey อัลกอริทึมค้นพบ

อัลกอริทึม Berlekamp-Massey เป็นกระบวนการวนซ้ำซึ่งประกอบด้วยการค้นหา LFSR ที่สั้นที่สุดที่สร้าง $t$ บิต $s_0, s_1, \ldots s_{t-1}$ และตรวจสอบว่า LFSR พบ $s_t$ อย่างถูกต้อง ถ้าใช่, $s_{t+1}$ มีการตรวจสอบ ในขณะที่ถ้าไม่ใช่ $c_i$มีการปรับปรุงเพื่อให้ ปรับปรุง LFSR สร้าง $s_t$. บ่อยครั้งที่ความยาวของ LFSR เพิ่มขึ้น แต่ไม่เสมอไป กระบวนการวนซ้ำจะดำเนินต่อไปจนถึงบิตสุดท้ายที่มีอยู่ $s_{N-1}$ ได้รับการประมวลผล ดังนั้นเมื่อ Berlekamp-Massey อัลกอริทึมยุติลง LFSR ที่สังเคราะห์ขึ้นจะสร้างลำดับทั้งหมด $s_0, s_1, \ldots, s_{N-1}$ ที่เอาต์พุต ถ้า LFSR ที่สังเคราะห์ได้ $n\leq N$ ขั้นตอนแล้วการโหลดเริ่มต้นคือ $\big(s_0, s_1, \ldots, s_{n-1}\big)$ (ซึ่งเป็นข้อแรก $n$ เอาต์พุตบิต) และ LFSR คำนวณได้อย่างถูกต้อง $s_n, s_{n+1}, \cdots, s_{N-1}$ (นั่นคือส่วนที่เหลือของลำดับที่กำหนด) รับประกันความยาวของ LFSR ที่สังเคราะห์โดย Berlekamp-Massey ขั้นต่ำ: ไม่ LFSR ที่สร้าง $s_0, s_1, \ldots, s_{N-1}$ สามารถมี สั้นลง ความยาว. อย่างไรก็ตาม, มี ไม่ อ้างว่า $n$ รับรองว่าเล็กกว่า $N$; อาจเป็นไปได้ว่าวิธีแก้ปัญหาเล็กน้อยที่อธิบายไว้ข้างต้นเป็นวิธีแก้ปัญหาขั้นต่ำ อันที่จริงฉันยืนยันว่านี่เป็นกรณีสำหรับ ที่สุด ลำดับ; LFSR มีความยาว $N$. ทฤษฎีความซับซ้อนของคอลโมโกรอฟ กล่าวว่าโปรแกรมที่สั้นที่สุดสำหรับการพิมพ์สตริงที่มีความยาวมากที่สุด $N$ มีความยาว $N+c$หรือเรียกขาน สำหรับสตริงส่วนใหญ่ เราสามารถทำได้ดีกว่าเพียงแค่เก็บสตริงและพิมพ์ออกมา "$ค$" เป็นเพียงความยาวของคำสั่ง "พิมพ์สตริงต่อไปนี้" ในบริบทของ shift registers สำหรับลำดับความยาวส่วนใหญ่ $N$, shift register ที่สั้นที่สุดซึ่งมีเอาต์พุตเป็นลำดับความยาวที่กำหนด $N$ เป็นเพียง shift register ของความยาว $N$ เริ่มต้นตามลำดับที่กำหนด ข้อเสนอแนะคืออะไร (หากมีข้อเสนอแนะใด ๆ เลย) นั้นไม่เกี่ยวข้อง

  • หากลำดับถูกสร้างขึ้นโดย a $n$-stage LFSR ตามที่อธิบายไว้ข้างต้น โดยที่ $n \leq \frac N2$, จากนั้น Berlekamp-Massey อัลกอริทึมค้นหาทั้งหมด $n$ ค่าสัมประสิทธิ์ $c_i$ หลังจาก ตรวจสอบ $s_0, s_1, \ldots, s_{2n-1}$. แน่นอนว่าการโหลดเริ่มต้นของ LFSR ที่สังเคราะห์ขึ้นนั้นเป็นเพียง $\big(s_0, s_1, \ldots, s_{n-1}\big)$. จากนี้ ชี้เป็นต้นไป อัลกอริทึม Berlekamp-Massey สามารถ ตรวจสอบลำดับที่เหลือต่อไป (หากเป็นเช่นนั้น ต้องการ) แต่ไม่ต้องปรับปรุง $c_i$'s เนื่องจากการตรวจสอบสัญลักษณ์ถัดไปแต่ละครั้งจะรายงาน กลับมาว่าทุกอย่างเรียบร้อยดี LFSR ปัจจุบันสร้างบิตถัดไปด้วย อย่างไรก็ตามโดยทั่วไปแล้ว cryptanalyst มี ไม่ แนวคิดว่ารหัสเวลาถูกสร้างขึ้นโดย LFSR หรือไม่ มันเป็นเพียงลำดับของ $N$ บิตที่ไม่ทราบที่มา และเพื่อจุดประสงค์ของนักเข้ารหัสลับ ทั้งหมด $N$ ต้องตรวจสอบบิตเพื่อหา LFSR ที่สั้นที่สุดที่สามารถสร้างได้ $s_0, s_1, \ldots, s_{N-1}$. หากบิตเพิ่มเติม $s_N, s_{N+1}, \ldots$ มีอยู่ จึงไม่รับประกันว่าพบ LFSR หลังจากตรวจสอบแล้ว $N$ บิตจะสร้างบิตเพิ่มเติมเหล่านี้ด้วย ในความเป็นจริง แนวคิดทั้งหมดที่อยู่เบื้องหลังอัลกอริทึม Berlekamp-Massey คือหากการทดสอบ "LFSR ปัจจุบันสร้าง $s_n$ล้มเหลว อัลกอริทึมสังเคราะห์ LFSR ที่แก้ไขจาก LFSR ปัจจุบันเพื่อให้ LFSR ที่แก้ไขสร้าง $s_0, s_1, \ldots, s_{n-1},s_n$. ในกระบวนการนี้ ความยาว ของ LFSR อาจ (หรืออาจไม่) เพิ่มขึ้น
  • หากลำดับถูกสร้างขึ้นโดย a $n$-stage LFSR ตามที่อธิบายไว้ข้างต้น โดยที่ $\frac N2 < n \leq N$, Berlekamp-Massey จะค้นหา LFSR ที่สั้นที่สุดที่สร้างขึ้น $s_0, s_1, \ldots, s_{N-1}$. อาจสร้างค่าเดียวกันหรือไม่ก็ได้ $s_N, s_{N+1}, \cdots, s_{2n-1}$ เช่นเดียวกับที่ LFSR ทำจริง

เมื่อคำนึงถึงคำวิจารณ์ที่มีความยาวข้างต้นแล้ว ให้เราตอบคำถามของ OP ในชื่อ OP ถาม

มีเครื่องมืออะไรบ้างในการทำวิศวกรรมย้อนกลับ LFSR นอกเหนือจาก BMA

ก็ อัลกอริทึมแบบยุคลิดแบบขยาย สำหรับตัวหารร่วมมากแบบโพลิโนเมียลก็สามารถใช้ได้ แต่ในแง่หนึ่ง มันก็เทียบเท่ากับอัลกอริทึมของแบร์เลแคมป์-แมสซีย์ สามารถดูได้ว่าเป็นการประมวลผลลำดับในลำดับย้อนกลับ $s_{N-1}, s_{N-2}, \cdots, s_1, s_0$ เมื่อเทียบกับการสั่งซื้อ $s_0, s_1, \cdots, s_{N-2}, s_{N-1}$ ใช้โดยอัลกอริทึมของ Berlekamp-Massey

ในเนื้อหาของคำถาม OP จะบ่น

รหัสนี้ดูเหมือนจะมีความซับซ้อนเชิงเส้นที่ 110 ซึ่งไม่สามารถนำไปใช้ได้จริงนอกจากนี้ยังไม่สามารถสร้างขึ้นใหม่ด้วยพหุนามแบบลดค่าไม่ได้ 110 บิตที่ BMA พบ เพียงสองสามบิตแรกก็เป็นไปตามที่คาดไว้ จากนั้นบิตก็พลิกกลับ

น่าจะเป็นเรื่องของความผิดพลาดในการดำเนินการของกทม. "ไม่สามารถใช้งานได้ในทางใดทางหนึ่ง" แสดงให้เห็นว่าหน่วยความจำอาจไม่เพียงพอสำหรับการจัดเก็บพหุนามต่างๆ ที่ใช้ภายใน BMA หรือบัฟเฟอร์ล้น เป็นต้น ตามที่ @kodlu ชี้ให้เห็น หากรหัสเวลามีความยาว $220$ บิตแล้วตรวจสอบทั้งหมด $220$ บิตอาจส่งผลให้มีความยาว LFSR $110$. มิฉะนั้น ตามที่กล่าวไว้ข้างต้น หากรหัสเวลามีความยาว $110$ หรือมากกว่านั้น (อาจจะ $128$ บิต $= 16$ ไบต์?) BMA อาจสังเคราะห์ความยาว LFSR ได้ดี $110$. สุดท้าย ฉันไม่มีคำอธิบายอื่นใดนอกจากข้อผิดพลาดของโปรแกรมเมอร์สำหรับการสังเกตของ OP ว่าในเอาต์พุต LFSR ที่สังเคราะห์แล้ว "บิตแรก" นั้นถูกต้อง แต่ส่วนที่เหลือกลับด้าน

ใครมีเงื่อนงำภายใต้เงื่อนไขใดที่กทม.ตรวจพบพหุนามที่ยาวมากเช่นนี้?

ดูเนื้อหาที่อยู่เหนือเส้นประในคำตอบนี้

neolith avatar
cn flag
ก่อนอื่น ขอขอบคุณสำหรับคำตอบที่กว้างขวางนี้ ฉันมีคำถามบางอย่าง "บ่อยครั้ง แต่ไม่เสมอไป ความยาวของ LFSR จะเพิ่มขึ้น" ฉันกำลังดูตัวอย่างรายละเอียดของกทม.ในกระดาษ ฉันจำได้ว่าบางครั้งบิตที่เพิ่มเข้ามาในการลงทะเบียนจะถูกละทิ้งอีกครั้ง 110 บิตสามารถลดลงได้หรือไม่ เนื่องจากมีบิตที่ปราศจากข้อผิดพลาดของลำดับที่ป้อนเข้าสู่ BMA เพียงพอหรือไม่ หากไม่เป็นเช่นนั้น ในกรณีที่มีหน่วยความจำไม่เพียงพอ ก็หมายความว่าความซับซ้อนเชิงเส้นจะเพิ่มสูงขึ้นไปอีกเท่านั้น ซึ่งยังใช้งานไม่ได้
neolith avatar
cn flag
ศาสตราจารย์แห่ง Uni ของฉันมีความคิดว่าเขาอาจเป็นตัวสร้างการหดตัวและแนะนำการโจมตีในเอกสารของ Golic ฉันไม่แน่ใจว่าจะลงถนนสายนี้หรือยัง ฉันคิดว่าเราจะตรวจสอบอัลกอริทึมเพื่อหาข้อผิดพลาดก่อน มันมาจากยุค 32 บิตและอาจเป็นจริงได้ ขั้นตอนต่อไปคือการใช้อัลกอริทึมใน NumPy โดยที่ข้อผิดพลาดของหน่วยความจำทั้งหมดเป็นไปไม่ได้ หากทั้งหมดนี้ล้มเหลว เป็นไปได้ไหมว่ากทม.ตรวจพบพหุนามที่ลดค่าไม่ได้อย่างไม่ถูกต้องหรือเป็นไปไม่ได้เนื่องจากการดำเนินการนั้นถูกต้อง
Score:0
ธง ng

LFSR ทั้งหมดสามารถวิศวกรรมย้อนกลับได้ด้วยเอาต์พุตตัวอย่างที่ถูกต้องและยาวเพียงพอ และการใช้งาน Berlekamp-Massey ที่ถูกต้อง

แต่ไม่ใช่ลำดับสุ่มหลอกทั้งหมดที่มีจุดประสงค์คล้ายกับลำดับสุ่มหลอกที่สร้างโดย LFSR ก็สร้างโดย LFSR เช่นกัน! ตัวอย่างที่กล่าวถึงใน คำถามนี้.

หากบางสิ่งใช้การเข้ารหัสที่ดี แม้ว่าอัลกอริทึมจะเป็นแบบสาธารณะ ไม่มีทางที่จะค้นหาคีย์และทำนายลำดับจากตัวอย่างได้

neolith avatar
cn flag
ใช่ นี่คือข้อสรุปที่เรากำลังมาเช่นกัน หากรหัสถูกเข้ารหัส ซึ่งไม่สามารถใช้งานได้จริงจากมุมมองด้านประสิทธิภาพ แต่นักพัฒนาก็มีเหตุผลที่ดีบางประการที่จะ - ไม่มีทางที่จะค้นหาพหุนามหรือ LFSR ที่สร้างได้หากไม่มีงานและประสบการณ์มากมาย ในกรณีนี้ฉันจะยอมแพ้ แต่ฉันยังไม่พร้อมที่จะทำเช่นนั้น

โพสต์คำตอบ

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