Score:2

ตรวจสอบความถูกต้องของแท็กการพิสูจน์ตัวตน AES GCM ระหว่างการใช้งานที่แตกต่างกันสองแบบ

ธง nl

ฉันสับสนเล็กน้อยเกี่ยวกับวิธีการตรวจสอบความถูกต้องของแท็กการรับรองความถูกต้องระหว่างการใช้งาน AES GCM ที่แตกต่างกันสองแบบ

การใช้งานอย่างหนึ่ง (ในส่วนของฉัน) อยู่ใน Java อันอื่นผมไม่รู้

ในการใช้งานของฉัน ข้อความธรรมดาถูกเข้ารหัสด้วย ทำรอบชิงชนะเลิศ การทำงาน. ฉันเพิ่มเวกเตอร์การเริ่มต้นให้กับผลลัพธ์

ฉันเข้าใจว่ามีการเพิ่มแท็กการรับรองความถูกต้องที่ส่วนท้ายของข้อความที่เข้ารหัส และเมื่อทำการถอดรหัส Java จะตรวจสอบโดยอัตโนมัติ

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html ถ้า กำลังใช้โหมด AEAD เช่น GCM/CCM แท็กการรับรองความถูกต้องคือ ต่อท้ายในกรณีของการเข้ารหัสหรือตรวจสอบในกรณีของ ถอดรหัส

ข้อมูล

IV: b943f312250e7fb1f29dea93
Ciphertext (ต่อท้ายแท็ก 128 บิต): 3745a778189b041b9c452359066a9a745715f214599d010790ee8866e531d5bfe6352e
คีย์: e08ef62a4908460742b4f80b14fb452d

คำถามของฉันคือ: พวกเขาควรสามารถตรวจสอบแท็กจากอีกฝ่ายได้หรือไม่ โดยไม่คำนึงถึงการใช้งาน crypto/ผู้ให้บริการที่พวกเขาใช้?

ขอขอบคุณ

Score:2
ธง in

ใช่ แท็กการรับรองความถูกต้องระบุไว้อย่างครบถ้วนในข้อกำหนดเฉพาะของ GCM ตำแหน่งที่วางนั้นไม่สำคัญ - ตำแหน่งนั้นไม่ส่งผลต่อค่าของบิตของแท็กการรับรองความถูกต้อง

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

  • เพื่อให้สอดคล้องกับการใช้งาน Java จำเป็นต้องเพิ่มแท็กต่อท้ายข้อความเข้ารหัสหลังการเข้ารหัส โดยปกติแล้ว เป็นไปได้ที่จะปรับขนาดบัฟเฟอร์อย่างชาญฉลาดหรือใช้งานการสตรีมเพื่อให้ไม่จำเป็นต้องคัดลอกแท็ก

  • สำหรับการตรวจสอบ อาจจำเป็นต้องดึงข้อมูลจากส่วนท้ายของไซเฟอร์เท็กซ์ มักจะเป็นไปได้ง่ายๆ ระบุว่า ภายในบัฟเฟอร์ที่ถือไซเฟอร์เท็กซ์ ในกรณีนั้น ไม่จำเป็นต้องคัดลอกหรือปรับขนาด.


จำเป็นต้องมีการตกลงตามพารามิเตอร์การกำหนดค่า GCM (ประเภทและขนาด IV/nonce, ขนาดแท็กการรับรองความถูกต้อง) ล่วงหน้า โดยทั้งสองฝ่าย โดยระบุโดยตรงในโปรโตคอล หรือโดยการเลือกชุดพารามิเตอร์การกำหนดค่าที่กำหนดไว้ล่วงหน้าในระหว่างรันไทม์

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

เห็นได้ชัดว่าทั้งสองฝ่ายจำเป็นต้องใช้ข้อมูลตรวจสอบความถูกต้องเพิ่มเติม (AAD) ที่เหมือนกันสำหรับแท็กในการตรวจสอบ


โดยปกติแล้ว ขอแนะนำให้เก็บแท็กการรับรองความถูกต้องไว้ที่ขนาดสูงสุด 128 บิต (ขนาดบล็อกของอัลกอริทึม AES และขนาดของฟิลด์ Galois ของ GHASH) การใช้งาน Oracle Java ตั้งค่าเริ่มต้นเป็นขนาดนั้น ดังนั้นในกรณีดังกล่าว 16 ไบต์สุดท้ายของไซเฟอร์เท็กซ์ (ขยาย) ประกอบเป็นแท็กการตรวจสอบสิทธิ์

โพสต์คำตอบ

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