ฉันกำลังอ่านการทำความเข้าใจการเข้ารหัสโดย Christof Paar และ Jan Pelzl ในบทที่ 2 (Stream Ciphers) มีส่วนที่พูดถึง "การเพิ่ม Key Streams จาก PRNGs"
พวกเขาถือว่า PRNG ขึ้นอยู่กับตัวสร้างความสอดคล้องเชิงเส้น:
$$S_0 = เมล็ดพันธุ์ $$
$$S_{i+1} \equiv AS_i + B\mod m, i=0,1,...$$
โดยที่เราเลือก m ให้มีความยาว 100 บิต และ $ S_i,A,B \ใน \{0,1,...,m-1\} $ โปรดทราบว่าสิ่งนี้
PRNG สามารถมีคุณสมบัติทางสถิติที่ยอดเยี่ยมหากเราเลือกพารามิเตอร์อย่างระมัดระวัง
โมดูลัส m เป็นส่วนหนึ่งของโครงร่างการเข้ารหัสและเป็นที่รู้จักต่อสาธารณะ ความลับ
คีย์ประกอบด้วยค่า (A,B) และอาจเป็นเมล็ด S0 โดยแต่ละค่ามีความยาว 100
นั่นทำให้เรามีความยาวของคีย์ 200 บิต ซึ่งเพียงพอสำหรับการป้องกัน
การโจมตีด้วยกำลังดุร้าย เนื่องจากนี่คือรหัสสตรีม Alice สามารถเข้ารหัส:
$$y_i \equiv x_i + s_i \mod 2 $$
ที่ไหน $s_i$ เป็นบิตของการแทนเลขฐานสองของ PRNG สัญลักษณ์เอาต์พุต $S_j$
แต่ออสการ์สามารถโจมตีได้อย่างง่ายดาย สมมติว่าเขารู้ 300 บิตแรกของ
ข้อความธรรมดา (นี่แค่ 300/8=37.5 ไบต์) เช่น ข้อมูลส่วนหัวของไฟล์ หรือเขาเดา
ส่วนหนึ่งของข้อความธรรมดา เนื่องจากเขารู้รหัสไซเฟอร์เท็กซ์อย่างแน่นอน ตอนนี้เขาจึงสามารถคำนวณได้
คีย์สตรีม 300 บิตแรกเป็น:
$$s_i \equiv y_i + x_i \mod m , i = 1,2,...,300$$
300 บิตเหล่านี้ให้สามตัวแรกทันที สัญลักษณ์เอาต์พุต ของ PRNG:$S_1 = (s_1,...,s_{100}), S_2 = (s_{101},...,s_{200})$ และ $S_3 = (s_{201},...,s_{300}).$
(เน้นของฉัน)
คำถามของฉันคือ:
- สัญลักษณ์เอาท์พุตคืออะไร?
- วิธีที่เรากำหนดสัญลักษณ์ผลลัพธ์ (# ของบิต ฯลฯ )