Score:1

ข้อเสียสำหรับรหัสสตรีมที่ใช้ฟังก์ชันแฮช

ธง al

ในคำตอบของ ที่นี่ มีคนกล่าวถึง:

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

ในโพสต์เดียวกันยังมีส่วนนี้เกี่ยวกับการใช้ฟังก์ชันแฮชการเข้ารหัสสำหรับการสร้างรหัสสตรีม:

ฟังก์ชันแฮชการเข้ารหัสเป็นฟังก์ชันที่ทนทานต่อพรีอิมเมจ พรีอิมเมจที่สอง และการชนกัน เท่าที่ฉันรู้ ยังไม่ได้รับการพิสูจน์ว่าเงื่อนไขเหล่านี้เพียงพอที่จะสร้างรหัสสตรีม

เท่าที่ฉันทราบอัลกอริธึมสมมาตรที่มีอยู่ในปัจจุบันทั้งหมด โดยเฉพาะอย่างยิ่ง AES เชื่อว่าปลอดภัยเท่านั้น หลักฐานเดียวที่เรามีเกี่ยวกับความปลอดภัยคือการใช้งานจริง และการโจมตีที่พยายามจนถึงตอนนี้ไม่ได้ลดความปลอดภัยของอัลกอริทึมเหล่านั้นอย่างย่อยยับ

ปัญหาที่ว่า "ยังไม่ได้รับการพิสูจน์ว่าเงื่อนไขเหล่านี้เพียงพอที่จะสร้างการเข้ารหัสสตรีม" เป็นปัญหาเดียวจริง ๆ หรือไม่ ปัญหาอื่นๆ ของรหัสสตรีมที่เกิดจากฟังก์ชันแฮชคืออะไร พวกเขาอาจมีความปลอดภัยน้อยกว่าหรือไม่? พวกเขาอาจจะช้าลง? พวกเขาอาจใช้หน่วยความจำมากเกินไปหรือไม่ เป็นเพียงว่ามีอัลกอริธึมการเข้ารหัสอื่น ๆ ที่วิจัยแล้วซึ่งให้ผลลัพธ์ที่ดีกว่าหรือไม่?

ฉันจะถือว่าฟังก์ชันแฮชที่มีขนาดบล็อกใหญ่ขึ้นมีข้อได้เปรียบที่สามารถใช้คีย์ที่ยาวขึ้นหรือ nonce ที่ยาวขึ้นได้ สำหรับ SHA-512 สามารถใช้คีย์ที่มีความยาว 384 บิตและมีความยาว 128 บิตได้ ความเป็นไปได้อีกอย่างคือการใช้คีย์ 256 บิตต่อไป ใช้ nonces 128 บิต และมีขนาดข้อความสูงสุดที่ดีกว่า 2^128 บล็อก (หรือ 2^137 บิตสำหรับ SHA-512) เมื่อเทียบกับ ~2^39 บิตสำหรับ AES-GCM ด้วย nonces 96 บิตเท่านั้น (ซึ่งน่าจะเป็นเป้าหมายที่ดีในความคิดของฉัน)

kelalaka avatar
in flag
ที่เกี่ยวข้อง [SHA-256 ปลอดภัยเป็นรหัสบล็อก CTR หรือไม่](https://crypto.stackexchange.com/q/1656/18298) และ [เราสามารถใช้ฟังก์ชัน âhashâ ในโหมด CTR แทนได้ไหม ของรหัสลับ?](https://crypto.stackexchange.com/q/37566/18298)
Score:7
ธง us

ปัญหาที่ว่า "ยังไม่ได้รับการพิสูจน์ว่าเงื่อนไขเหล่านี้เพียงพอที่จะสร้างการเข้ารหัสสตรีม" เป็นปัญหาเดียวจริง ๆ หรือไม่

ดังนั้น ความต้านทานการชนกันจึงไม่เพียงพอที่จะสร้างรหัสสตรีมที่ปลอดภัย ตัวอย่างมาตรฐานคือการใช้ฟังก์ชันแฮชที่ป้องกันการชนกันและการต่อท้ายด้วย 128 $0$ บิตไปยังเอาต์พุตสิ่งนี้สืบทอดความต้านทานการชนกันอย่างชัดเจน แต่ยังไม่ได้ให้เอาต์พุตที่แยกไม่ออกจากการสุ่ม

พวกเขาอาจจะช้าลง?

สิ่งนี้มักจะถูกระบุว่าเป็นปัญหาหลัก โดยทั่วไปแล้ว ฟังก์ชันแฮชของคอมพิวเตอร์จะช้ากว่าการคำนวณโครงสร้างสมมาตรโดยเฉพาะอย่างเช่น AES ประมาณ 3-10 เท่า สิ่งนี้เป็นไปได้มากที่สุดเนื่องจากลักษณะของการแฮชซึ่งมีรูปแบบภัยคุกคามที่ "แข็งแกร่งกว่า" โดยต้องให้การรักษาความปลอดภัยต่อหน้าที่ฝ่ายตรงข้ามรู้ค่าทั้งหมดในการคำนวณ ในขณะที่ AES จำเป็นต้องให้ความปลอดภัยเมื่อฝ่ายตรงข้ามไม่ทราบข้อมูลเดียว - กุญแจ

พวกเขาอาจมีความปลอดภัยน้อยกว่าหรือไม่?

แม้ว่าเราสามารถใช้ฟังก์ชันแฮชที่ไม่มีความสุ่มเสี่ยงในเอาต์พุต แต่โครงสร้างมาตรฐานที่เราใช้ได้รับการออกแบบอย่างระมัดระวังเพื่อให้เอาต์พุตที่ดูสุ่มอย่างสม่ำเสมอ
อาร์กิวเมนต์โดยละเอียดขึ้นอยู่กับโครงสร้างพื้นฐาน แต่โดยทั่วไปเราสามารถสร้างตัวสร้างคีย์สตรีมที่ปลอดภัยในรูปแบบต่างๆ ของ $H(k\|p\|n\|\text{ctr})$ สำหรับฟังก์ชันแฮชสมัยใหม่ที่มีการเติมที่เหมาะสม $p$.
สมมติฐานด้านความปลอดภัยพื้นฐานนั้นคล้ายกับของ HMAC ซึ่งกำหนดให้ฟังก์ชันการบีบอัดภายในของแฮช Merkle-Damgard เป็น PRF แบบอินพุตคู่ และการเปลี่ยนรูปภายในของแฮชแบบฟองน้ำเป็นการเปลี่ยนรูปแบบสุ่มซึ่งสันนิษฐานไว้แล้วว่าต้านทานการชนกัน

Maarten Bodewes avatar
in flag
อีกสิ่งหนึ่งที่อาจไม่ *จำเป็น* สำหรับฟังก์ชันแฮชก็คือ คีย์จำเป็นต้องได้รับการป้องกัน เช่น การโจมตีช่องทางด้านข้าง นั่นไม่ใช่ปัญหากับฟังก์ชันแฮชส่วนใหญ่ (ไม่เช่นนั้น HMAC จะมีปัญหา) แต่สิ่งนี้อาจไม่ปรากฏชัดจากฟังก์ชันแฮช / การใช้งาน *ใดๆ*
kelalaka avatar
in flag
นอกจากนี้ PRF ยังเป็นทางเดียวและสามารถให้การทำงานที่หลากหลายแทน PRP
Score:6
ธง us

ฟังก์ชันแฮชการเข้ารหัสเป็นฟังก์ชันที่ทนทานต่อพรีอิมเมจ พรีอิมเมจที่สอง และการชนกัน เท่าที่ฉันรู้ ยังไม่ได้รับการพิสูจน์ว่าเงื่อนไขเหล่านี้เพียงพอที่จะสร้างรหัสสตรีม

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

มีปัญหาบางประการเกี่ยวกับวิธีการนำเสนอคำถามของคุณ ไม่มีเคานเตอร์และคีย์ คุณกำลังพูดถึง nonce ด้านล่าง แต่ไม่มีตัวนับและสมการที่คุณยกมา $H(k\mathbin\|n)$ จากคำตอบมีเคาน์เตอร์ แต่ไม่มี nonce ดังนั้นคุณจึงยังไม่ชัดเจนว่าคุณใช้มันอย่างไร

อย่างไรก็ตามเท่าที่เราทราบ $H(k\mathbin\|n\mathbin\|\text{ctr})$ ที่ไหน $n$ และ $\text{ctr}$ ตามลำดับ nonce และ counter อาจเป็นตัวสร้างกระแสที่ดีสำหรับฟังก์ชันแฮชส่วนใหญ่ที่ฉันเดา ตราบใดที่ $k$, $n$ และ $\text{ctr}$ ทั้งหมดมีความยาวคงที่ (คุณไม่ต้องกังวลเกี่ยวกับการโจมตีประเภทส่วนขยายความยาวสำหรับอินพุตความยาวคงที่) แต่โดยทั่วไป คุณต้องใช้ฟังก์ชันที่คิดว่าเป็นฟังก์ชันสุ่มหลอก (เช่น HMAC) เพื่อรับประกันความปลอดภัยที่สมเหตุสมผล หากคุณต้องการใช้สตรีมตามแฮช เช่นเดียวกับใน $\operatorname{HMAC}_k(n\mathbin\|\text{ctr})$ . และเนื่องจาก HMAC ใช้ double hashing และ block ciphers เช่น AES มีการเพิ่มประสิทธิภาพสูง ฉันเดาว่ามันไม่ได้ให้ประสิทธิภาพที่สตรีมอันล้ำสมัย (chacha, AES-CTR/GCM) มอบให้แม้ว่าจะมีความปลอดภัยเพียงพอก็ตาม

kelalaka avatar
in flag
การโจมตีส่วนขยายความยาวทำงานในโหมด CTR อย่างไร
Manish Adhikari avatar
us flag
@kelalaka ฉันพูดว่า "อาจ" อันที่จริง ฉันไม่ได้คิดมากเกี่ยวกับวิธีการทำในขณะที่ฉันเขียนคำตอบฉันไม่สามารถนึกถึงสถานการณ์จริงสำหรับสิ่งนั้นได้ แต่สามารถจินตนาการถึงสถานการณ์จำลองที่ n สามารถมีความยาวเท่าใดก็ได้ตามอำเภอใจ (เช่น หลายช่วงตึก) และผู้โจมตีสามารถควบคุม IV แต่ไม่สามารถทำซ้ำได้ ดังนั้นเขาจึงสร้างบางอย่างเช่น $n' = n\|i\|padding$ และขยายความยาวจากนั้น หรือค้นหารหัสที่มี nonce ขนาดใหญ่และรูปแบบที่ถูกต้องสำหรับสิ่งนั้น และดำเนินการ CPA ด้วยการควบคุม nonce (ใช้ nonce ขนาดเล็ก) รับสตรีมและดำเนินการขยายความยาวเพื่อรับสตรีมต้นฉบับ
Manish Adhikari avatar
us flag
แน่นอนว่าการลองใช้มูลค่าของตัวนับจะไม่เป็นปัญหา
Manish Adhikari avatar
us flag
@kelalaka เมื่อนึกถึงสถานการณ์ที่ "ดุร้าย" น้อยกว่า ระบบมีข้อบกพร่องที่ทำให้มีโอกาสสูงที่จะเลือกรูปแบบ IV ที่ถูกต้องตามที่อธิบายไว้ข้างต้น และไวต่อการโจมตีแบบไซเฟอร์เท็กซ์ที่เลือก ciphertext ต้องได้รับการรับรองความถูกต้องโดยใช้ MAC แต่ไม่ต้องรับรองความถูกต้องของ IV IV ถูกผนวกเข้ากับไซเฟอร์เท็กซ์ที่เลือกและระบบจะไม่ถอดรหัสไซเฟอร์เท็กซ์เป้าหมาย (อันที่ใช้ IV ในรูปแบบที่ถูกต้อง) ในกรณีนี้ CCA2 สามารถเปิดเผยคีย์สตรีมสำหรับไซเฟอร์เท็กซ์เป้าหมายผ่านการขยายความยาว
kelalaka avatar
in flag
สิ่งนี้ไม่สมจริงในการเข้ารหัสสมัยใหม่ เหตุใดเราจึงต้องกำหนดความยาวผันแปรเพื่อทำให้การวิเคราะห์และความปลอดภัยซับซ้อน เรารู้ปัญหารอบตัวแล้ว มีแบบฝึกหัดมากมายเกี่ยวกับเรื่องนี้และ PRF ในทำนองเดียวกัน
Manish Adhikari avatar
us flag
ฉันคิดว่าใช่ ฉันควรจะใช้ถ้อยคำให้ดีกว่านี้ แก้ไขคำตอบของฉันเล็กน้อย

โพสต์คำตอบ

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