มีฟังก์ชั่นใด ๆ $f : \text{seed}, \text{range}, \text{state} \mapsto n$,
ใช่; พวกเขารู้จักกันในนาม รูปแบบการรักษาการเข้ารหัส ฟังก์ชั่น. นี่คือฟังก์ชันที่เป็นรหัสบล็อกขนาดตามอำเภอใจ:
- ข้อกำหนด 1: ช่วงเอาต์พุตอาจมีขนาดเล็ก เช่น. จาก $0$ ถึง $10^6$.
ใช่ พวกเขาสามารถใช้ช่วงที่ค่อนข้างเล็ก จากประสบการณ์ของฉัน FPE มักจะไม่ชอบช่วงที่มีขนาดเล็กมาก (เช่น ช่วงที่มีค่าน้อยกว่า 100) ช่วงหนึ่งล้านมีมากมายสำหรับคนที่ฉันรู้จัก
- ข้อกำหนด 2: ไม่มีการชนกันของเมล็ดพืชต่างๆ
หากเราใช้เมล็ดเป็นคีย์ FPE และสถานะเป็นข้อความธรรมดา FPE สิ่งนี้รับประกันได้ - การดำเนินการ FPE นั้นกลับด้านได้ (นั่นคือ โดยการวางการดำเนินการ FPE ในโหมดถอดรหัสและป้อนคีย์เดียวกัน มันจะแปลงข้อความไซเฟอร์ กลับเป็นข้อความธรรมดา) ดังนั้นข้อความธรรมดาสองรายการจึงไม่สามารถแปลงเป็นข้อความไซเฟอร์เดียวกันได้
ข้อกำหนด 3: ไม่สามารถคาดเดาได้ว่าหมายเลขถัดไปคืออะไรเว้นแต่จะเรียกใช้ฟังก์ชัน $f$
จริงด้วย; FPE ได้รับการออกแบบมาให้มีความปลอดภัย (เว้นแต่คุณจะทราบคีย์) ดังนั้นวิธีเดียวที่จะคาดเดาได้ว่าข้อความธรรมดาจะถูกแปลงอย่างไรคือการใช้คีย์
ฟังก์ชั่น FPE ยังใช้ 'ปรับแต่ง' (อินพุตเพิ่มเติมที่ไม่จำเป็นต้องเป็นส่วนตัวซึ่งเปลี่ยนการแมปที่กำหนดโดยการเข้ารหัส) - ฉันขอแนะนำให้ใช้ช่วงเป็นส่วนหนึ่งของการปรับแต่ง (นอกเหนือจากการแก้ไขวิธีการทำงานของฟังก์ชัน FPE ภายใน) - ด้วยวิธีนี้ คุณไม่ต้องกังวลเกี่ยวกับฟังก์ชันที่มีช่วงหนึ่งข้อมูลเกี่ยวกับฟังก์ชันที่มีช่วงอื่นรั่วไหล
ตอนนี้ ถ้าคุณต้องการคำแนะนำว่าจะใช้ฟังก์ชัน FPE ใด ฟังก์ชันที่ดีที่สุดที่ฉันพบคือ FF1 กำหนดไว้ที่นี่ การทำงาน; จากที่ผมเพาะดูจะค่อนข้างแข็ง