Score:1

การใช้เวกเตอร์ทดสอบเพียงหนึ่งหรือสองตัวสำหรับ ChaCha20 เพียงพอสำหรับการตรวจสอบอัลกอริทึมโค้ดหรือไม่

ธง it

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

เวกเตอร์ทดสอบที่ฉันพบในร่างข้อมูลจำเพาะของ ChaCha20 นั้นไม่ได้ให้ผลลัพธ์ที่เหมือนกันทุกประการตามที่ระบุในเวกเตอร์ทดสอบข้อมูลจำเพาะฉบับร่างเหล่านี้ พวกเขากำลังใช้ nonce ขนาดที่แตกต่างกันเมื่อเทียบกับข้อมูลจำเพาะขั้นสุดท้าย (แบบร่าง 64 บิต, 96 บิตสุดท้าย) และไม่ได้ระบุสถานะของตัวนับ (ฉันคิดว่าเป็น 0)

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

จะเป็นการดีหากมีเวกเตอร์ทดสอบเพิ่มเติมตามข้อมูลจำเพาะ ChaCha20 ขั้นสุดท้าย เพื่อให้มั่นใจว่าโค้ดจะให้ผลลัพธ์ที่ถูกต้องตามที่ต้องการ ขอขอบคุณ!

    2.3.2. ทดสอบ Vector สำหรับ ChaCha20 Block Function

   สำหรับเวกเตอร์ทดสอบ เราจะใช้อินพุตต่อไปนี้กับ ChaCha20
   ฟังก์ชั่นบล็อก:

   o คีย์ = 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:
      14:15:16:17:18:19:1น:1ข:1ค:1ง:1จ:1ฉ กุญแจสำคัญคือลำดับของ
      octets ที่ไม่มีโครงสร้างเฉพาะก่อนที่เราจะคัดลอกลงใน
      รัฐ ChaCha

   o โนเซ่ = (00:00:00:09:00:00:00:4a:00:00:00:00)

   o จำนวนบล็อก = 1

   หลังจากตั้งค่าสถานะ ChaCha แล้ว จะมีลักษณะดังนี้:

   สถานะ ChaCha พร้อมการตั้งค่าคีย์

       61707865 3320646e 79622d32 6b206574
       03020100 07060504 0b0a0908 0f0e0d0c
       13121110 17161514 1b1a1918 1f1e1d1c
       00000001 09000000 4a000000 00000000

   หลังจากวิ่ง 20 รอบ (10 รอบคอลัมน์สลับกับ 10
   "เส้นทแยงมุม") สถานะ ChaCha มีลักษณะดังนี้:

   สถานะ ChaCha หลังจากผ่านไป 20 รอบ

       837778ab e238d763 a67ae21e 5950bb2f
       c4f2d0c7 fc62bb2f 8fa018fc 3f5ec7b7
       335271c2 f29489f3 eabda8fc 82e46ebd
       d19c12b4 b04e16de 9e83d0cb 4e3c50a2

   สุดท้าย เราเพิ่มสถานะดั้งเดิมให้กับผลลัพธ์ (เวกเตอร์อย่างง่าย หรือ
   การบวกเมทริกซ์) ให้สิ่งนี้:

   สถานะ ChaCha เมื่อสิ้นสุดการดำเนินการ ChaCha20

       e4e7f110 15593bd1 1fdd0f50 c47120a3
       c7f4d1c7 0368c033 9aaa2204 4e6cd4c3
       466482d2 09aa9f07 05d7c214 a2028bd9
       d19c12b5 b94e16de e883d0cb 4e3c50a2
Score:1
ธง in

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

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

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

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

ประการสุดท้าย เนื่องจากเป็นไซต์เข้ารหัส: หากคุณอ้างสิทธิ์ใดๆ เกี่ยวกับการป้องกันการโจมตีช่องทางด้านข้าง คุณก็ควรทดสอบสิ่งเหล่านั้นด้วยเช่นกัน แน่นอนว่าคุณค่อนข้างโชคดีที่นี่ เนื่องจากโดยทั่วไปแล้ว Bernstein จะถือว่าการโจมตีในลักษณะนี้เมื่อออกแบบรหัสลับ แต่การใช้งานอาจมีความเสี่ยงไม่น้อย


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

DotNET Afficionado avatar
it flag
ขอบคุณ Maarten (ฉันต้องการโหวตคำตอบของคุณ แต่สมาชิกใหม่ที่ https://crypto.stackexchange.com/ ต้องการ 15 คะแนนจึงจะสามารถโหวตได้) นี่เป็นเรื่องน่ารู้ ฉันกำลังทดสอบกับ bytestreams ที่ฉันเข้ารหัสและถอดรหัส จากนั้นตรวจสอบว่าเหมือนกันกับ 'ข้อความธรรมดา' ดั้งเดิมหรือไม่ แต่ใช่ ฉันต้องทำให้สิ่งนี้เป็นอัตโนมัติเพื่อทดสอบ bytestreams จำนวนมากและดูว่าฉันพบกรณีขอบแปลก ๆ หรือไม่ การที่เวกเตอร์ทดสอบบางตัวจากสเปคแบบร่างไม่ได้ให้ผลลัพธ์ที่เหมือนกันทำให้ฉันค่อนข้างกังวล
DotNET Afficionado avatar
it flag
สิ่งที่น่าเป็นห่วงก็คือเอกสาร VB.NET บางอย่างดูเหมือนไม่ถูกต้องเกี่ยวกับการหมุนบิต ที่นี่กล่าวว่าแม้สำหรับจำนวนเต็มที่ไม่ได้ลงชื่อ บิตที่ 32 ก็จะถูกปิดบังให้เป็น 0 เสมอ ซึ่งไม่ใช่กรณีจริง (จะไม่สมเหตุสมผลสำหรับจำนวนเต็มที่ไม่ได้ลงนาม ). กังวลว่าบางสิ่งที่แปลกหรือมีเอกสารไม่ดีใน VB.NET จะสร้าง Edge Case ที่ฉันไม่รู้จนกระทั่งสร้างปัญหาจริงๆ ดู: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/left-shift-operator
DotNET Afficionado avatar
it flag
โพสต์นี้ยังระบุปัญหาของเวกเตอร์ทดสอบจากแบบร่างไม่ทำงาน (เสมอ) แม้ว่าเวกเตอร์ข้อมูลจำเพาะขั้นสุดท้ายจะสมบูรณ์แบบ ที่นี่เขาระบุปัญหากับตัวนับ แต่นั่นไม่ใช่สิ่งที่ฉันพบ เฉพาะเวกเตอร์ทดสอบที่เป็นเลขศูนย์ทั้งหมด (คีย์ ไม่มีค่า & ตัวนับที่ตั้งค่าเป็นศูนย์ทั้งหมด) เท่านั้นที่จะได้ผลลัพธ์ที่ถูกต้อง ถ้าฉันใช้ตัวอย่างโดยที่คีย์ = 1 (หมายถึงคำ 32 บิตสุดท้ายในคีย์ ตำแหน่ง 11 ใน ChaCha เมทริกซ์ ตั้งค่าเป็น 1) ฉันได้รับผลลัพธ์สุดท้ายที่แตกต่างกัน ดู https://crypto.stackexchange.com/questions/81337/chacha-matrix-tests-for-original-implementation-not-passing-due-to-bad-counter

โพสต์คำตอบ

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