การเข้ารหัสการรักษารูปแบบจะทำงานได้ดี การเปลี่ยนแปลงที่ฉันจะทำไม่ได้ใช้เป็น 'เช็คซัม' แต่ใช้หมายเลขตั๋ว (ซึ่งอาจเป็นค่าระหว่าง 0 ถึง 699) และเข้ารหัส FPE เป็นตัวเลข 12 หลักแทน ด้วยวิธีนี้ คุณไม่ต้องกังวลเกี่ยวกับ 'เอนโทรปีจำกัด' เพราะการทำลายมันจะต้องเดาคีย์ (ซึ่งถ้าเป็น 128 บิตหรือมากกว่านั้นยากเกินไป) หรือการคาดเดาแบบสุ่มและหวังว่าคุณจะถูกต้อง บาร์โค้ด - ในกรณีนั้น หากคุณออกตั๋วที่ถูกต้อง 1,000 ใบ (และยอมรับเฉพาะค่าที่ถอดรหัสเป็น 0 ถึง 999 เท่านั้น) ความน่าจะเป็นที่จะคาดเดาได้ถูกต้องคือ $10^{3-12}$นั่นคือหนึ่งในพันล้าน - ไม่ใช่อัตราต่อรองที่ดีจริง
ปัญหาเดียวที่ฉันเห็นได้จาก FPE คือไม่มีการใช้งานทั่วไป (ซึ่งน่าเสียดาย - ฉันเชื่อว่า FPE เป็นเครื่องมือที่มีประโยชน์โดยทั่วไป)
อย่างไรก็ตาม มีทางเลือกอื่นที่หาได้ทั่วไปและใช้งานได้เช่นกัน - รหัสยืนยันข้อความ (มค.).
MAC ทำงานเหมือนลายเซ็น ยกเว้นว่าไม่มีคีย์การเซ็นชื่อและการตรวจสอบแยกกัน - แทน คีย์เดียวทำหน้าที่ทั้งสองอย่างแทน คุณต้องสร้างรหัสสุ่มและมอบให้ทั้งผู้ออกตั๋วและเครื่องสแกนตั๋ว (เช่นเดียวกับในแนวคิด FPE)
สิ่งที่คุณต้องทำคือให้ตัวเลขสามตัวแรกของตั๋วเป็นหมายเลขซีเรียล 000-999 (หรือ 699 หากคุณมีแขก 700 คน) ตัวเลขที่เหลือจะเป็น MAC ของสามหลักแรก แปลงเป็นทศนิยม (และตัดทอนอย่างเหมาะสม) ในการตรวจสอบความถูกต้องของตั๋ว เครื่องสแกนจะใช้ตัวเลขสามหลักแรกและคำนวณ MAC (โดยใช้คีย์ที่ทราบ) และตรวจสอบตัวเลขนั้นถึง 9 หลักสุดท้าย
สิ่งนี้ให้ความปลอดภัยเช่นเดียวกับแนวคิด FPE และการใช้งาน MAC ก็พร้อมใช้งาน แน่นอน ด้วย FPE คุณไม่ต้องกังวลเกี่ยวกับการแปลงสิ่งต่างๆ เป็นทศนิยม (FPE สามารถทำงานกับค่าทศนิยมได้โดยตรง); MAC มาตรฐานทำงานในเลขฐานสอง ดังนั้นเพื่อให้เป็นทศนิยม จึงจำเป็นต้องมีการแปลงฐานบางประเภท อย่างไรก็ตามโค้ดการแปลงพื้นฐานนั้นตรงไปตรงมามากกว่าโค้ด FPE ที่ใช้งานได้
มี MAC หลายประเภทให้เลือก ฉันจะอยู่ห่างจาก MAC ด้วย IV และติดกับ HMAC, KMAC และ CMAC
ประเด็นสุดท้ายที่คุณต้องพิจารณา (ซึ่งไม่เกี่ยวข้องกับคำถามของคุณ): การโจมตีที่ชัดเจนอย่างหนึ่งคือการใช้ตั๋วที่ถูกต้องและเรียกใช้ผ่านเครื่องถ่ายเอกสาร และสร้างตั๋วจำนวนหนึ่งซึ่งทั้งหมดจะตรวจสอบความถูกต้อง หากคุณมีสแกนเนอร์เครื่องเดียว คุณสามารถหยุดการทำงานนั้นได้อย่างง่ายดาย (โดยให้เครื่องสแกนจำหมายเลขซีเรียลทั้งหมดที่เคยเห็นมาก่อน) หากคุณมีหลายตัวและพวกเขาไม่สามารถสื่อสารได้ นั่นเป็นปัญหาที่ใหญ่กว่า