Score:1

ฟังก์ชันภายในถูกกำหนดอย่างไรสำหรับ FF3

ธง br

ฉันได้เห็น FF1 / FF3 ว่าพวกเขารักษารูปแบบเดียวกับของข้อความธรรมดา ตัวอย่างเช่น ถ้าฉันเข้ารหัสเลขฐานสิบ 1234 ค่าที่เข้ารหัสจะเป็นเลขทศนิยม 4 หลักด้วย ทั้งคู่ใช้เครือข่าย Feistel ฟังก์ชันรอบได้รับการออกแบบภายในในแต่ละรอบของโครงสร้างอย่างไรเพื่อรักษารูปแบบของข้อมูล ฉันต้องการทราบว่าการออกแบบฟังก์ชันภายในช่วยรักษารูปแบบได้อย่างไร

fgrieu avatar
ng flag
แล้วการอ่านส่วนที่ 4.1 และ 4.5 ​​ของ[ข้อมูลจำเพาะของ FF3-1](https://doi.org/10.6028/NIST.SP.800-38Gr1-draft) ล่ะ
Score:2
ธง in

จาก 4.1 การแสดงสตริงอักขระของ ข้อมูลจำเพาะร่าง NIST SP 800 38G Rev 1 ที่ถูกกล่าวถึงในความคิดเห็น:

อินพุตและเอาต์พุตข้อมูลไปยังการเข้ารหัส FF1 และ FF3-1 286 และฟังก์ชันการถอดรหัสต้องเป็นลำดับที่จำกัดของตัวเลข เช่น สตริงตัวเลข หากข้อมูลที่จะเข้ารหัสมีรูปแบบเป็นตัวอักษรที่ไม่ใช่ชุดของเลขฐาน ดังนั้นอักขระแต่ละตัวจะต้องแสดงด้วยตัวเลขที่แตกต่างกันเพื่อใช้ FF1 หรือ FF3-1

...

ทางเลือกและการใช้การโต้ตอบแบบหนึ่งต่อหนึ่งระหว่างตัวอักษรที่กำหนดกับชุดของตัวเลขฐานที่แสดงถึงตัวอักษรนั้นอยู่นอกขอบเขตของเอกสารฉบับนี้

สิ่งนี้ยังไม่ชัดเจน แต่โดยพื้นฐานแล้วคุณต้องแมปข้อมูลอินพุตของคุณกับช่วง [0, N) และกลับมาอีกครั้งระหว่างการเข้ารหัสทั้งสอง และ ถอดรหัส การแมปนี้อยู่นอกขอบเขต เนื่องจากแน่นอนว่าเป็นข้อกำหนดเฉพาะสำหรับการป้อนข้อมูล


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

ก่อนอื่นฉันจะแสดงให้คุณเห็นว่าสิ่งเหล่านี้เป็นอย่างไร $\text{เข้ารหัส}$ และ $\text{ถอดรหัส}$ ฟังก์ชั่นจะทำงาน:

สมมติว่าช่วงอินพุตเป็นตัวเลข - ไม่รวมศูนย์ - ตามด้วยอักขระใน ABC ตัวพิมพ์ใหญ่ เช่น [1-9][ก-ฮ]. ฐานของตัวเลข - ไม่รวมศูนย์ - คือ $9$แน่นอนว่าฐานของตัวอักษรนั้น $26$.

ทีนี้มาลองคำนวณค่าของ 7Z. หากคุณปฏิบัติตามกฎเหล่านี้ คุณค่าที่คุณได้รับคือ $6 \cdดอท 26 + 25 = 181$, ที่ไหน $6$ เป็นดัชนีของ 7 ใน $[1, 9]$, $26$ เป็นฐาน (จำนวนตัวอักษร) ใน ABC และ $25$ เป็นดัชนีของ Z ใน ABC นั้น

ในการแมปกลับ คุณต้องดำเนินการก่อน $181 \bmod 26$ที่ควรให้คุณ $25$ อีกครั้งซึ่งให้คุณ Z หลังจากยกเลิกการจัดทำดัชนี จากนั้นคุณแบ่ง: $\big\lceil 181 / 26 \big\rceil$และกลับไป $6$ ซึ่งเป็นดัชนีของ 7 ในช่วง $[1, 9]$.

ตอนนี้เราต้องรวมการเข้ารหัสและถอดรหัส:

ตอนนี้คุณสามารถเล่น FF1 หรือ FF3 กับผลลัพธ์ได้แล้ว $181$ และได้รับค่าที่แตกต่างกัน คุณสามารถใช้กฎเพื่อเข้ารหัสสิ่งนี้เพื่อเป็นตัวแทนที่คุณต้องการ

ดังนั้นบอกว่าคุณมี $\text{encode}(\text{"7Z"}) = 181$ และ $\text{enc}_k(181) = 26$แล้วสิ่งนี้จะให้คุณ $\text{decode}(26) = "1A"$ ที่คุณสามารถจัดเก็บ จากนั้นคุณย้อนกลับดังนี้: $\text{decode}(\text{dec}_k(\text{encode}(\text{"1A"}))) = "7Z"$. พารามิเตอร์เข้ารหัสและถอดรหัสเฉพาะสำหรับ [1-9][ก-ฮ].

เคล็ดลับข้างต้นสามารถขยายไปยังรูปแบบใด ๆ ก็ตามที่มีช่วงชัดเจน และ - เมื่อเข้ารหัสอย่างถูกต้อง - จำเป็นต้องใช้การคูณและการบวกเท่านั้นสำหรับการเข้ารหัส และต้องใช้การหารกับเศษเหลือเท่านั้นสำหรับการถอดรหัสการเข้ารหัส/ถอดรหัสควรใช้เวลาน้อยกว่าหนึ่งไมโครวินาทีเมื่อใช้งานอย่างถูกต้อง (สำหรับขนาดอินพุตที่ค่อนข้างเล็ก ซึ่งมักใช้ FPE)

fgrieu avatar
ng flag
"น้อยกว่าไมโครวินาที" สำหรับการเข้ารหัสก่อนและหลังการเข้ารหัสนั้นถูกต้องสำหรับ FF3-1 (และแม้แต่เพียงพอหากเป็นต่อหลัก) เนื่องจากพื้นที่บล็อกของ FF3-1 ถูกจำกัดไว้ที่ 192 บิต สำหรับ FF1 ขีดจำกัดดูเหมือนว่าจะเป็น 4Tib (512MiB) และสำหรับบล็อกขนาดใหญ่ เวลาต่อหลักจะมากขึ้น เนื่องจากมันเพิ่มขึ้นตามจำนวนหลัก และตามสัดส่วนเมื่อใช้อัลกอริทึมในข้อมูลจำเพาะและคำตอบ

โพสต์คำตอบ

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