Score:1

ตรวจสอบต่อสาธารณะว่าตั๋วออกโดยหน่วยงานที่มีตัวเลขประมาณ 8 หลัก

ธง cn

ฉันกำลังสร้างแบ็กเอนด์สำหรับเว็บแอป เพื่อให้เราสามารถขายตั๋วสำหรับกิจกรรมของเราได้ สามารถรองรับแขกได้ตั้งแต่ 100-700 คน

เราขายตั๋วออนไลน์และเราต้องการให้สามารถสแกนตั๋วได้ที่ทางเข้า ทำได้ผ่านบาร์โค้ด-128 แต่ในกรณีที่ไม่สามารถสแกนรหัสได้ ควรพิมพ์รหัสและตรวจสอบด้วยวิธีนี้ ดังนั้นรหัสไม่ควรยาวเกิน 12 หลัก

เนื่องจากในบางสถานที่เราไม่มีอินเทอร์เน็ต จึงควรดาวน์โหลดบางอย่างเช่นคีย์สาธารณะก่อนเทศกาล

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

จากนั้นฉันก็คิดว่า: โอเค มาทำแบบเดียวกัน ใช้ตัวระบุสองตัวและเข้ารหัสแบบอสมมาตรดังนั้นฉันจึงสามารถแบ่งปันคีย์ส่วนตัวได้ และเฉพาะในกรณีที่ส่วนที่สองสามารถถอดรหัสได้ด้วยคีย์สาธารณะและตรงกับส่วนแรกเท่านั้น ตั๋วจึงจะใช้ได้ วิธีการเข้ารหัส async ที่ฉันรู้ว่าสร้างข้อความที่ยาวมาก ปัญหาเดิมเช่นเดิม

จากนั้นฉันก็พบ นี้ ซึ่งดูเหมือนจะดี แต่ฉันสงสัยว่า FPE นั้นง่ายเกินไปที่จะทำลายหรือไม่ เนื่องจากผลรวมตรวจสอบมีเพียง 5 ถึง 8 หลักเท่านั้น และนั่นไม่ใช่ค่าเอนโทรปีมากนัก

ฉันต้องกังวลเกี่ยวกับเรื่องนี้หรือไม่? หรือใครมีความคิดที่แตกต่างและดีกว่า? ความรู้ด้านการเข้ารหัสของฉันมีจำกัด บางทีฉันอาจเข้าใจอะไรผิดไป

Score:0
ธง my

การเข้ารหัสการรักษารูปแบบจะทำงานได้ดี การเปลี่ยนแปลงที่ฉันจะทำไม่ได้ใช้เป็น 'เช็คซัม' แต่ใช้หมายเลขตั๋ว (ซึ่งอาจเป็นค่าระหว่าง 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

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

Alex avatar
cn flag
โอเค ขอบคุณสำหรับคำตอบที่กว้างขวาง! ฉันไม่สามารถโหวตได้เพราะฉันมีกรรมน้อยเกินไป และขอบคุณสำหรับปัญหาเพิ่มเติม ฉันคิดเกี่ยวกับเรื่องนี้และคิดว่าฉันพบทางออกที่ดีซึ่งใช้ได้ผลสำหรับเรา แต่กับ MAC ฉันจะมีปัญหาเดียวกันเหมือนกับการเซ็นชื่อ ฉันจะต้องแบ่งปันความลับที่ฉันไม่ชอบ จะมีทางออกอื่นไหม คุณคิดว่าเป็นไปได้ไหมที่จะทำในสิ่งที่ฉันต้องการ
poncho avatar
my flag
@Alex: จริง ๆ แล้ว FPE จะแบ่งปันปัญหาเดียวกัน หากคุณไม่เชื่อถือผู้ตรวจสอบด้วยรหัส ก็จะไม่ทำงาน ในทางกลับกัน คุณสามารถเชื่อถือผู้ตรวจสอบได้มากแค่ไหน? หากคุณสามารถเชื่อถือผู้ตรวจสอบได้ว่าจะไม่สร้างตั๋วสำหรับกิจกรรมนี้ (แต่คุณไม่ต้องการเชื่อถือพวกเขาเกี่ยวกับกิจกรรมอื่นๆ) วิธีที่ชัดเจนในการทำเช่นนั้นคือสร้างคีย์ใหม่สำหรับแต่ละกิจกรรม - สำหรับเครื่องสแกน ให้ดาวน์โหลดเท่านั้น กุญแจสำคัญของงานนี้...
Alex avatar
cn flag
ใช่ ตอนแรกฉันคิดว่ามีวิธีที่ไม่สมมาตรในการทำเช่นนี้ แต่ฉันพบเพียงกระดาษแผ่นเดียว ผมว่าต้องยอมครับ
fgrieu avatar
ng flag
สิ่งนี้ไม่เป็นไปตามข้อกำหนดของ _public_ ด้วยทศนิยมน้อยกว่า 70 หลัก (ให้หรือรับ) ไม่มีสิ่งใดที่ปลอดภัย

โพสต์คำตอบ

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