Score:2

ตัวนับหมายถึงอะไรในโหมดตัวนับ (CTR) มันเหมือนกับ nonce หรือไม่?

ธง cn

ตามที่ถามข้างต้น "เคาน์เตอร์" หมายถึงอะไรกันแน่? มันเหมือนกับ nonce หรือไม่?

นอกจากนี้ หนังสือ Network Security Essentials (6ed.) จาก William Stallings ระบุว่า "โดยปกติแล้ว ตัวนับจะเริ่มต้นเป็นค่าบางค่า และจากนั้นเพิ่มขึ้น 1 สำหรับแต่ละบล็อกที่ตามมา (โมดูโล $2^b$, ที่ไหน $ข$ คือขนาดบล็อก)" ข้อความนี้หมายความว่าอย่างไร

Score:2
ธง in

"เคาน์เตอร์" หมายถึงอะไรกันแน่?

ตัวนับตามคำจำกัดความของ Wikipedia;

ในลอจิกดิจิทัลและการคำนวณ ตัวนับคืออุปกรณ์ที่เก็บ (และบางครั้งแสดงผล) จำนวนครั้งที่เหตุการณ์หรือกระบวนการหนึ่งๆ เกิดขึ้น

ในบริบท CTR; มันถูกใช้เพื่อสร้างอินพุตที่แตกต่างกันสำหรับการเข้ารหัส จากนั้นเอาต์พุตจะถูก x-ored ด้วยข้อความธรรมดาเพื่อสร้างข้อความไซเฟอร์ มันมักจะดำเนินการโดยการเพิ่มขึ้น แม้ว่าจะสามารถใช้ LFSR ได้เช่นกัน

ป้อนคำอธิบายรูปภาพที่นี่

มันเหมือนกับ nonce หรือไม่

ไม่ ไม่เหมือน nonce ( ตัวเลขใช้ครั้งเดียว )

โหมด CTR รวม nonce และ counter เป็นอินพุตสำหรับการเข้ารหัส อินพุตรวมจากสองส่วน

  • ส่วนหนึ่ง; โดยทั่วไปแล้วจะสร้างแบบสุ่มต่อเซสชันการเข้ารหัสหรือโดยการใช้ เคาน์เตอร์/LFSR.
  • เคาน์เตอร์; เริ่มแรกตั้งค่าศูนย์ จากนั้นเพิ่มขึ้นสำหรับการเข้ารหัสทุกบล็อค

เราสามารถมีการเข้ารหัสแบบสุ่มและแต่ละบล็อกสามารถสร้างเอาต์พุตที่แตกต่างกันภายใต้คีย์เดียวกันได้หากเราใช้ PRP เช่น AES (ส่วน PRF นั้นซับซ้อนกว่าและจริง ๆ แล้ว CTR ถูกกำหนดสำหรับ PRF เนื่องจากไม่จำเป็นต้องมีการผกผัน)

"โดยปกติแล้วตัวนับจะเริ่มต้นเป็นค่าบางค่า และเพิ่มทีละ 1 สำหรับแต่ละบล็อกที่ตามมา (โมดูโล $2^b$, ที่ไหน $ข$ คือขนาดบล็อก)" ข้อความนี้หมายความว่าอย่างไร

พิจารณาว่าเรามี nonce 64 บิตและตัวนับ 64 บิต

 ไม่มีเคาน์เตอร์
9237AF71A232BC82E4 0000000000000000

บล็อกแรกใช้ 9237AF71A232BC82E40000000000000000 เป็นอินพุต จากนั้นบล็อกต่อมาใช้เป็น

 ไม่มีเคาน์เตอร์
9237AF71A232BC82E4 0000000000000001
9237AF71A232BC82E4 0000000000000002
9237AF71A232BC82E4 0000000000000003
9237AF71A232BC82E4 0000000000000004
 ... ...
9237AF71A232BC82E4 เอฟเอฟFFFFFFFFFFFFFF
9237AF71A232BC82E4 FFFFFFFFFFFFFFFF
 ... ...
9237AF71A232BC82E5 0000000000000000 ???

หากคุณสามารถเข้ารหัสได้ $2^{64}$ บล็อกที่คุณจะไปถึงจุดสิ้นสุดของเคาน์เตอร์ ขึ้นอยู่กับกรณีที่อาจเป็นอันตรายได้

  • หากคุณดำเนินการต่อจากเคาน์เตอร์ 0 9237AF71A232BC82E40000000000000000 จากนั้นคุณจะมีปัญหาที่ไม่ใช้ซ้ำ (แผ่นสองครั้ง) ในโหมด CTR; ความลับจะหายไป ผู้สังเกตการณ์สามารถดำเนินการลากเปลแบบแมนนวลได้แม้กระทั่งแบบอัตโนมัติ

  • หากคุณยังคงเพิ่มขึ้นกว่า 9237AF71A232BC82E50000000000000000 คุณอาจกดอินพุตอื่นที่สามารถเปลี่ยนเป็นแป้นสองเวลาได้เช่นกัน

หยุดอยู่ตรงนั้น ที่จริงให้หยุดก่อนถึงตรงนั้น หากคุณใช้ PRP แทน PRF.


หมายเหตุเกี่ยวกับการใช้คำ nonce IV ที่แตกต่างกัน;

  • คำจำกัดความของ NIST ใช้ตัวนับเป็นอินพุตทั้งหมด สำหรับการเข้ารหัส

  • Wikipedia สร้างความแตกต่าง ฉันชอบคำจำกัดความของ Wikipedia ในกรณี GCM NIST ใช้ IV และตัวนับแยกกัน

  • ในหนังสือของพวกเขา Lindell&Katz ใช้ IV เป็น the $3n/4$ ส่วนหนึ่งของขนาดบล็อกและ $1/4$ สำหรับเคาน์เตอร์ การเข้ารหัสถูกกำหนดเป็น $y_i := F_k (IV || \langle ฉัน \rangle)$ แสดงว่าหากเลือก IV อย่างสม่ำเสมอ การใช้ IV ซ้ำถือเป็นเหตุการณ์เล็กน้อย ดังนั้นโหมด CTR จึงมีความปลอดภัย CPA

Titanlord avatar
tl flag
ฉันรู้ว่า CTR เป็น CPA ที่ปลอดภัยโดยไม่ต้องใช้ IV ซ้ำ CPA ยังปลอดภัยอยู่หรือไม่ หากมีใครพิจารณา IV-reuse ฉันจะบอกว่าไม่ แต่ฉันไม่แน่ใจ 100\%
kelalaka avatar
in flag
@Titanlord มันยังมีสมมติฐานบางอย่าง ลินเดลล์และแคตซ์จัดการกับสิ่งนี้ในหนังสือของพวกเขาโดยสมมติว่า IV ถูกเลือกแบบสุ่มอย่างสม่ำเสมอ จากนั้นเหตุการณ์จะไม่สำคัญถ้าขนาด IV คือ $3n/4$
Maarten Bodewes avatar
in flag
"IV" ไม่ได้กำหนดไว้สำหรับโหมด CTR เท่าที่ฉันทราบ หากมีอยู่ การนำไปใช้งานมักจะหมายถึงค่าเริ่มต้นสำหรับ nonce & counter เช่น บล็อกทั้งหมดที่ใช้เป็นอินพุตเริ่มต้นไปยังรหัสบล็อก ในกรณีนั้น *ไม่* เทียบเท่ากับ nonce
kelalaka avatar
in flag
@MaartenBodewes Lindell&Katz เรียกมันว่า IV เป็นขนาด $3n/4$ ของขนาดบล็อก $n$ กับ $y_i := F_k (IV || )$. ใช่ ฉันทราบดีว่า NIST ดั้งเดิมไม่ได้เรียกมันว่า IV แต่เรียกอินพุตทั้งหมดว่าเป็นตัวนับ ฉันพร้อมที่จะสม่ำเสมอมากขึ้น ให้ฉันพยายาม. ฉันเดาว่าพวกเขาทำเช่นนี้เพื่อแสดงให้เห็นว่าการชนกันของ IV นั้นเล็กน้อยโดยการเลือกแบบสุ่ม
Maarten Bodewes avatar
in flag
ในความคิดของฉัน หนังสือของ Lindell & Katz ไม่ใช่เอกสารอ้างอิงที่เชื่อถือได้สำหรับข้อกำหนดและคำจำกัดความ หนังสือเล่มนี้ยังสร้างความสับสนให้กับคีย์ลับและคีย์ส่วนตัวอีกด้วย * คุณไม่สามารถแบ่งปันส่วนตัว *.แน่นอนคุณสามารถกำหนด "IV" 3n/4 ขนาดของขนาดบล็อกได้ อย่างไรก็ตาม *นั่นไม่ใช่วิธีที่คนอื่นใช้คำนี้* - สำหรับความรู้ของฉันอยู่ดี
kelalaka avatar
in flag
@MaartenBodewes Paar ใช้วิธีเดียวกันด้วย Amussen ใน Serious Cryptography, Bruce et, al ในวิศวกรรมการเข้ารหัสเช่นเดียวกับ Wikipedia การใช้งานอื่นๆ เช่นเดียวกับ [เอกสารต้นฉบับของ Diffie-Hellman](https://ee.stanford.edu/~hellman/publications/32.pdf) ทุกอย่างสวนทางกับที่ NIST ทำ
Maarten Bodewes avatar
in flag
ฉันไม่สามารถโต้แย้งได้ว่า โปรดทราบว่า Crypto API ส่วนใหญ่ใช้ IV เป็นอินพุตแบบเต็มไปยัง API และเนื่องจากโดยทั่วไปแล้วพวกเขาใช้โมดูโล endian ขนาดใหญ่ $2^n$ สำหรับตัวนับ IV จึงเท่ากับ $n$ ขนาดบล็อกเดียว มันไม่ได้แยกจากเคาน์เตอร์หรือไม่มีเลย ด้วยวิธีนี้พวกเขาเข้ากันได้กับคำจำกัดความส่วนใหญ่ของโหมดตัวนับ (ยกเว้น WinZip ดังที่กล่าวไว้ในคำตอบของฉัน เนื่องจากมันใช้ little endian)
kelalaka avatar
in flag
ก็เห็นจะไม่เป็นการตกลงแต่อย่างใด ฉันรู้ว่าคุณรู้เรื่อง API ดีกว่าฉันมาก APIs เกือบจะเป็นไปตามกระดาษต้นฉบับและ NIST (ตัวนับเปลี่ยนเป็น IV) ก็ไม่แปลกเลย อันที่จริงเรามักจะพูดว่า IV reuse ในกรณีนี้การพูดว่า IV part แทน nonce ยังคงสมเหตุสมผลอยู่มาก (ฉันจะอธิบายให้ชัดเจนในภายหลัง) จริง ๆ แล้วฉันกำลังพิจารณาที่จะลบสิ่งนี้ อย่างไรก็ตาม เมื่อคุณสังเกตเห็น ฉันได้ดูแหล่งที่มาอีกครั้ง มันอยู่ที่นั่น
Score:1
ธง in

ไม่ nonce และตัวนับเป็นคำที่แตกต่างกันอย่างแน่นอน

  • nonce คือค่าที่ไม่ซ้ำกันต่อข้อความ
  • ตัวนับเป็นค่าที่ไม่ซ้ำกันและเรียงตามลำดับสำหรับหลายบล็อกของข้อความเดียวกัน

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


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

สิ่งนี้สะท้อนให้เห็นจากส่วนหนึ่งของหนังสือที่คุณอ้างถึง:

นอกจากนี้ หนังสือ Network Security Essentials (6ed.) จาก William Stallings ระบุว่า:

"โดยปกติแล้วตัวนับจะเริ่มต้นเป็นค่าบางค่า และเพิ่มทีละ 1 สำหรับแต่ละบล็อกที่ตามมา (โมดูโล $2^b$, ที่ไหน $ข$ คือขนาดบล็อก)".

ข้อความนี้หมายความว่าอย่างไรกันแน่?

สมมติว่าเป็นรหัสบล็อก 128 บิตเช่น AES สมมติว่าแต่ละไบต์แสดงด้วยตัวอักษร คุณมี:

 CCCCCCCC_CCCCCCCC = NNNNNNN_00000000

โดยที่แต่ละ C เป็นไบต์ในตัวนับเริ่มต้นและ N เป็นไบต์ภายใน nonce เคาน์เตอร์เริ่มต้นมักจะถือว่าเป็น "IV" ตอนนี้การใช้งานจะเพิ่มโมดูลัสค่าเริ่มต้นนี้ $2^{128}$: เช่น เมื่อมันกระทบ $2^{128} - 1$ ค่าถัดไปจะเป็นศูนย์ทั้งหมด

อย่างไรก็ตามนั่นหมายความว่าหลังจากนั้น $2^{64}$ การเพิ่มตัวนับของคุณจะเพิ่มไบต์ nonce ด้านขวาสุด ซึ่งอาจนำไปสู่ค่าตัวนับที่ซ้ำกัน ซึ่งหมายความว่าแอปพลิเคชันจำเป็นต้องนับจำนวนบล็อกที่ได้รับการเข้ารหัส เหตุผลนี้ก็คือ nonce สามารถประกอบด้วย จำนวนไบต์เท่าใดก็ได้ดังนั้นจึงไม่รู้ว่า nonce ได้รับผลกระทบเมื่อใด กล่าวอีกนัยหนึ่ง การใช้งานไม่รู้ว่าเมื่อใดที่โอเวอร์โฟลว์เข้าสู่ nonce เกิดขึ้นหรือเมื่อตัวนับชนกัน


หมายเหตุ:

  • โดยหลักการแล้ว โครงร่างใดๆ ใช้ได้กับ CTR ตราบใดที่ตัวนับไม่ทำซ้ำสำหรับคีย์เดียวกัน การได้รับรหัสใหม่สำหรับแต่ละข้อความจะทำให้คุณมีจำนวนบล็อคที่แทบไม่สิ้นสุด ($2^{128}$ บล็อก 16 ไบต์สำหรับ AES)
  • แม้ว่าตัวนับไม่ได้ถูกกำหนดให้เป็น endian ใหญ่หรือน้อย แต่ตัวนับ endian ใหญ่ดูเหมือนจะเหนือกว่า ฉันเจอโปรโตคอลหนึ่งที่ใช้ตัวนับ endian เล็กน้อย - WinZip ถ้าหน่วยความจำให้บริการฉันถูกต้อง
  • nonce อาจไม่ใช่องค์ประกอบเดียวที่ทำให้ตัวนับ (เริ่มต้น) ไม่ซ้ำกัน องค์ประกอบข้อมูลอื่นๆ อาจรวมอยู่ในค่าตัวนับ (เริ่มต้น) บางครั้งตัวระบุสำหรับการแยกโดเมนจะรวมอยู่ด้วย เช่น ตัวระบุสำหรับผู้รับ
  • NIST ลงรายละเอียดเกี่ยวกับวิธีสร้างบล็อกรหัสใน NIST SP 800-38a ภาคผนวก B โดยระบุในตอนท้ายว่าตัวนับโดยทั่วไปเป็นโปรโตคอลเฉพาะ และต้องทดสอบข้อกำหนดเอกลักษณ์แยกกัน
Score:0
ธง tl

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

ในโหมด CTR ทุกค่าจะแตกต่างกัน และ (โดยทั่วไป) จะใช้เพียงครั้งเดียว ดังนั้นเวกเตอร์การเริ่มต้นและตัวเลขที่เป็นผลลัพธ์จึงดูเป็น nonce ได้

(หมายเหตุ: ในบางกรณี ผู้เขียนอาจสร้างความแตกต่างอย่างชัดเจนระหว่างค่า CTR และ Nonces ในกรณีนี้ ผู้เขียนอาจมีคำจำกัดความที่แตกต่างกันหรือต้องพิจารณาข้อจำกัดเพิ่มเติม)

vn flag
Nonces ไม่จำเป็นต้องเป็น "random/pseudorandom" เพียงแค่ไม่ซ้ำกัน (ภายในขอบเขตของคีย์เดียว) ในความเป็นจริง เป็นเรื่องปกติที่จะใช้ตัวนับข้อความ (â ตัวนับบล็อก) เป็น nonce

โพสต์คำตอบ

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