ใช้โปรแกรมเข้ารหัสCipherSaberดังที่อธิบายไว้ด้านล่าง แนวทาง:
- รายการที่เล็กที่สุดเป็นไบต์ชนะ
- อย่างไรก็ตามในการออกจากบรรทัดฐานโค้ดกอล์ฟคุณสามารถโพสต์รายการที่น่าสนใจแม้ว่าพวกเขาจะไม่ได้รายการกอล์ฟที่ร้ายแรง
- โดยทั่วไปแล้วรายการจะเป็นโปรแกรมที่ใช้ข้อความธรรมดาจากอินพุตมาตรฐานและเขียน ciphertext ไปยังเอาต์พุตมาตรฐานโดยมีคีย์ที่ระบุ (โดยผู้ใช้) ในบางวิธีที่คุณต้องการ
- อย่างไรก็ตามหากคุณต้องการใช้ขั้นตอนนี้เป็นขั้นตอนก็ถือว่าใช้ได้เช่นกัน
- IV จะต้องมาจากเครื่องกำเนิดหมายเลขเทียมแบบเข้ารหัสที่มีความปลอดภัย หากภาษาของคุณไม่รองรับให้เลือกภาษาอื่น ;-)
- กรุณาอย่าใช้ไลบรารีที่เฉพาะเจาะจงเข้ารหัสลับการเรียกระบบหรือคำแนะนำใด ๆ (นอกเหนือจาก PRNG ตามที่ระบุไว้ข้างต้น) แน่นอนว่าการใช้งานระดับบิตเรตระดับต่ำทั่วไปนั้นโอเค
CipherSaber เป็นตัวแปรของ RC4 / Arcfour ดังนั้นฉันจะเริ่มต้นด้วยการอธิบายหลังจากนั้นการเปลี่ยนแปลง CipherSaber จะเป็นเช่นนั้น
0. RC4 / Arcfour
Arcfour มีการระบุอย่างสมบูรณ์ที่อื่นแต่เพื่อความสมบูรณ์ฉันจะอธิบายที่นี่ (ในกรณีที่มีความแตกต่างระหว่างร่างอินเทอร์เน็ตและคำอธิบายนี้อดีตเป็นบรรทัดฐาน)
การตั้งค่าคีย์
ตั้งค่าสองอาร์เรย์S
และS2
ทั้งความยาว 256 โดยที่k_1
เป็นไบต์แรกของคีย์และk_n
เป็นตัวสุดท้าย
S = [0, ..., 255]
S2 = [k_1, ..., k_n, k_1, ...]
( S2
เต็มไปด้วยไบต์ของคีย์ซ้ำแล้วซ้ำอีกจนกว่า 256 ไบต์ทั้งหมดจะเต็มไป)
จากนั้นเริ่มต้นj
เป็น 0 และสับเปลี่ยน 256 ครั้ง:
j = 0
for i in (0 .. 255)
j = (j + S[i] + S2[i]) mod 256
swap S[i], S[j]
end
การตั้งค่าคีย์เสร็จสมบูรณ์ S2
อาร์เรย์จะไม่ใช้ที่นี่และสามารถนำมาขัด
การสร้างสตรีมเข้ารหัส
กำหนดค่าเริ่มต้นi
และj
เป็น 0 จากนั้นสร้างกระแสหลักดังต่อไปนี้:
i = 0
j = 0
while true
i = (i + 1) mod 256
j = (j + S[i]) mod 256
swap S[i], S[j]
k = (S[i] + S[j]) mod 256
yield S[k]
end
การเข้ารหัส / ถอดรหัสข้อมูล
- หากต้องการเข้ารหัส XOR เอาต์พุต keystream ด้วยข้อความธรรมดา
- ในการถอดรหัส XOR เอาต์พุต keystream ด้วย ciphertext
1. CipherSaber
CipherSaber (ซึ่งเป็นสิ่งที่เรากำลังนำไปใช้ในคำถามนี้) คือการเปลี่ยนแปลงของ RC4 / Arcfour ในสองวิธี:
10 ไบต์ IV / nonce
เมื่อเข้ารหัสข้อความควรได้รับ 10 ไบต์แบบสุ่มเช่นผ่าน/dev/urandom
และเขียนลงใน 10 ไบต์แรกของเอาต์พุตที่เข้ารหัส เมื่อถอดรหัสข้อความ 10 ไบต์แรกของอินพุตคือ IV ที่ใช้เข้ารหัส
สเตจการติดตั้งคีย์ RC4 / Arcfour รันด้วยpassphrase || IV
คีย์ซึ่งpassphrase
เป็นวลีรหัสผ่านที่ผู้ใช้ระบุIV
ตามที่อธิบายไว้ข้างต้นและ||
ต่อกัน ข้อความรหัสผ่านของ "Hello, world!" และ IV ของ "supercalif" (ไม่น่าเป็นไปได้นั่นคือ :-P) จะส่งผลให้เกิดคีย์ "Hello, world! supercalif"
การตั้งค่าคีย์ซ้ำหลายครั้ง
เพื่อช่วยป้องกันช่องโหว่ที่ทำให้การเข้ารหัส WEP เสียอย่างสมบูรณ์วงสับของขั้นตอนการตั้งค่าคีย์ของ RC4 จะถูกเรียกใช้ตามจำนวนครั้งที่ผู้ใช้ระบุ ค่าของj
ควรถูกเก็บไว้ระหว่างการวนซ้ำ
2. ทดสอบเวกเตอร์
นี่คือเวกเตอร์ทดสอบบางส่วนที่คุณสามารถใช้เพื่อทดสอบโปรแกรมของคุณ นอกจากนี้ossifrage คลื่นไส้ยังสร้างเครื่องมือการเข้ารหัสและถอดรหัส CipherSaberที่คุณสามารถใช้เพื่อตรวจสอบผลลัพธ์ของคุณ
คุณจะต้องใช้โปรแกรมเข้ารหัสเท่านั้น คุณไม่จำเป็นต้องจัดหาโปรแกรมถอดรหัส แต่ผลลัพธ์ของโปรแกรมเข้ารหัสของคุณจะต้องไปอย่างถูกต้องไปยังอินพุตดั้งเดิมเมื่อประมวลผลด้วยโปรแกรมถอดรหัสที่นำมาใช้อย่างถูกต้องโดยใช้คีย์ที่ถูกต้อง
urandom
(ซึ่งอาจเป็นรายการแยกต่างหากหากคุณต้องการ) หากคุณสนใจเกี่ยวกับ "การชนะ" :-)