Score:3

รหัสผ่านที่มนุษย์สร้างขึ้นใช้กับฟังก์ชันการสืบทอดคีย์จะลดความปลอดภัยของการเข้ารหัสแบบสมมาตรหรือไม่

ธง et

ขนาดคีย์สำหรับ AES ถูกเลือกเป็น 256 เนื่องจากถือว่าเป็นขนาดคีย์ขั้นต่ำที่สามารถป้องกันการโจมตีด้วยกำลังดุร้ายได้ เช่น $2^{256}$ พยายาม

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

เหตุใดจึงไม่กังวล หรือฉันพลาดอะไรไป?

การใช้ KDF ที่ช้าจะช่วยลดการรักษาความปลอดภัยบางส่วนที่สูญเสียไปจากการใช้รหัสผ่านที่มนุษย์เลือก แทนที่จะสร้าง AES-256 แบบสุ่ม อย่างไรก็ตาม มีการวิเคราะห์เกี่ยวกับเรื่องนี้หรือไม่

fgrieu avatar
ng flag
มันเป็นเรื่องน่ากังวล แต่ดูเหมือนว่าคุณจะพลาดปัญหานี้ไปในระดับหนึ่งด้วย KDF พิเศษที่ตั้งใจให้รหัสผ่านช้า เช่น [Argon2](https://en.wikipedia.org/wiki/Argon2) และก่อนหน้านั้น PBKDF2 ที่ล้าสมัย คุณควรศึกษาแนวป้องกันนี้ ยังคงเป็นคำถามที่ดี โดยเฉพาะอย่างยิ่งถ้าคุณเพิ่ม: มาตรการลดผลกระทบเหล่านี้สามารถให้เอนโทรปีพิเศษได้กี่บิต ความก้าวหน้าทางเทคนิคส่งผลต่อความปลอดภัยของการเข้ารหัสที่ใช้รหัสผ่านอย่างไร สำหรับความลับในระยะสั้นและระยะยาว
et flag
@fgrieu - ฉันรู้เกี่ยวกับ KDF ที่ช้านั้นถูกใช้เสมอ (หรือจะใช้มากกว่านั้นเสมอ) อย่างไรก็ตาม มีการวิเคราะห์เกี่ยวกับการลดจำนวนจริงที่พวกเขามอบให้หรือไม่ เช่น การเปรียบเทียบการโจมตีด้วยกำลังดุร้ายบนคีย์ 256 บิตที่สร้างขึ้นแบบสุ่มกับคีย์ 256 ที่สร้างจากรหัสผ่าน n อักขระโดยใช้ KDF ที่ช้า ซึ่งจะให้คำแนะนำเกี่ยวกับจำนวนรหัสผ่านที่ควรเลือกและจำนวนรอบที่ KDF จะนำความปลอดภัยจากการโจมตีแบบเดรัจฉานกลับมาเหมือนกับคีย์ 256 บิต
fgrieu avatar
ng flag
ข้างต้นชี้แจงว่า [การแฮชรหัสผ่าน] (https://crypto.stackexchange.com/tags/password-hashing/info) เกี่ยวข้องกับคำถาม ฉันเพิ่มแท็กนี้และแนะนำ 1) ทบทวนว่าคำถามแตกต่างจาก [_Password เอนโทรปีต่ำกว่าเอนโทรปีของคีย์เข้ารหัสมากอย่างไร ทำไมถึงยอมรับได้?_](https://crypto.stackexchange.com/q/36851) และคนอื่นๆ ที่ติดแท็ก [tag:password-hashing] 2) จากนั้นให้เปลี่ยนอย่างน้อยย่อหน้าสุดท้ายเพื่อให้สิ่งที่ถามแม่นยำยิ่งขึ้น (เช่น การรวมความคิดเห็นด้านบนบางส่วน) หรือการลบคำถามหากซ้ำกัน
Score:5
ธง in

ขนาดคีย์สำหรับ AES ถูกเลือกเป็น 256 เนื่องจากถือว่าเป็นขนาดคีย์ขั้นต่ำที่สามารถป้องกันการโจมตีด้วยกำลังดุร้ายได้ เช่น $2^{256}$ พยายาม

ไม่ถูกต้อง $2^{128}$ หรือ - แม่นยำกว่า - ขนาดคีย์ 128 บิตสำหรับ $2^{127}$ ความพยายามโดยเฉลี่ยถือว่าเพียงพอต่อการโจมตีจริง

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

64 บิตเป็นความหวังลมๆ แล้งๆ รหัสผ่านที่มนุษย์สร้างขึ้น เฉลี่ยประมาณ 40 บิต. แน่นอน แม้แต่รหัสผ่านที่เลือกอย่างดีซึ่งมีอักขระ 8 ตัวโดยทั่วไปก็ยังใช้ชุดย่อยของ ASCII ซึ่งตัวมันเองเป็นชุดย่อยของค่าไบต์ที่เป็นไปได้ทั้งหมด ด้วยค่าพิเศษทั้งหมด 24 ค่าที่ใช้โดยทั่วไป ฉันได้รับค่า 86 ค่าจาก 256 เช่น $log_2(86) \ประมาณ 6.43$ บิตของเอนโทรปีต่อไบต์ หรือ $\ประมาณ 51.41$ บิตสำหรับ 8 อักขระดังกล่าว แต่นั่นเป็นเพียงเมื่อมีการสันนิษฐานว่ามีการแจกแจงที่สมบูรณ์แบบ และมนุษย์สร้างค่าแบบสุ่มได้แย่มาก

กำลังเดรัจฉานสามารถลองใช้ไบต์ที่ชาญฉลาดแทนที่จะใช้บิตที่ชาญฉลาดซึ่งจะช่วยลดกำลังเดรัจฉานให้น้อยกว่า $2^{64}$ พยายาม

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

ดังนั้นหมายความว่า AES256 ที่มีรหัสผ่าน 32 ตัวก็ยังอ่อนแอกว่า AES256 ที่มีรหัสที่สร้างขึ้นแบบสุ่ม

ใช่. ผ้าเช็ดปากด้านหลังจะแสดงให้คุณเห็นว่าคุณหายไป $16 \คูณ 1.5 = 24$ บิตที่ อย่างน้อยที่สุด.

เหตุใดจึงไม่กังวล หรือฉันพลาดอะไรไป?

มันคือ ใหญ่ ข้อกังวล โดยทั่วไปคุณควรพยายามหลีกเลี่ยงการใช้รหัสผ่านเลย มิฉะนั้น คุณจะใช้ฟังก์ชันการสืบทอดคีย์ด้วยรหัสผ่านที่ใช้การยืดคีย์ เช่น หนึ่งในตัวแปร Argon2 (PBKDF2, scrypt และ bcrypt น่าจะเป็นที่รู้จักกันดี) แต่สิ่งเหล่านี้ให้การป้องกันเล็กน้อยสำหรับการได้มาของคีย์แต่ละรายการเท่านั้น ประมาณ 20 บิตสำหรับการวนซ้ำหนึ่งล้านครั้ง (เช่น $log_2(1,000,000)$ ใกล้จะ 20 แล้ว) มันจะไม่ยกคุณไปอย่างแน่นอน $2^{128}$ สำหรับรหัสผ่านทั่วไป $40 + 20 = 60$ บิต ดังนั้นการทำลายการเข้ารหัสจึงมีราคาแพง แต่ก็เป็นไปไม่ได้

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

เคล็ดลับง่ายๆแสดงให้เห็นว่าคุณสามารถใช้ $$l_p = \bigg\lceil {l_k - \log_2(i) \over log_2(N)} \bigg\rceil$$ เพื่อเป็นการทราบจำนวนอักขระสำหรับแต่ละรหัสผ่าน สมมติว่าเราใช้ค่าด้านบน: $$\bigg\lceil {128 - \log_2(1,000,000) \over \log_2(86)} \bigg\rceil = \bigg\lceil {{128 - 20} \over 6.43} \bigg\rceil = 17$$ ขยายรหัสผ่านอักขระให้ถึง 128 บิตโดยใช้ KDF ที่มีการวนซ้ำ 1,000,000 ครั้ง สมมติว่าเป็นการสุ่มอย่างสมบูรณ์

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

โปรดทราบว่านี่ไม่มีปัญหาเมื่อสามารถใช้มาตรการตอบโต้ได้ เช่น. โดยทั่วไปแล้ว PIN จะมีเพียง 4-6 หลัก แต่ข้อเท็จจริงที่ว่าคุณสามารถลองได้เพียง 3 ครั้งเท่านั้นที่จะช่วยป้องกันการโจมตีได้ (โดยทั่วไปแล้วรหัส PUK จะมีขนาดใหญ่กว่ามาก เนื่องจากมักจะไม่ปิดกั้น เนื่องจากอาจนำไปสู่การปฏิเสธการให้บริการได้ โจมตี) อย่างไรก็ตาม ตัวอย่างเช่น การเข้ารหัสไฟล์ การโจมตีแบบออฟไลน์ สามารถสันนิษฐานได้โดยทั่วไป

Score:2
ธง si

คำตอบของ Maarten นั้นดี แต่ไม่ได้พูดถึงว่ามันเป็นไปได้ที่จะมีข้อความรหัสผ่านที่มนุษย์จดจำได้ด้วยเอนโทรปี >128 บิตค่อนข้างง่าย เดอะ ไดซ์แวร์ ระบบใช้ RNG ที่ดี (ลูกเต๋าคุณภาพสูงหรือ CSPRNG) ในการเลือก "อักขระ" จาก "ตัวอักษร" ขนาดมหึมา: แทนที่จะใช้ตัวอักษรภาษาอังกฤษตัวเดียว (หรืออักขระ ASCII) "อักขระ" จะเป็นทั้งคำ และ "ตัวอักษร" เป็นรายการของคำ 7776 (หรือ 1296 คำสำหรับรายการ "สั้น")

ด้วย 7776 คำ คุณจะได้รับเอนโทรปี 12.9 บิตต่อคำ ด้วย 1296 คำ คุณจะได้รับเอนโทรปี 10.3 บิตต่อคำ ดังนั้น วลี 10 คำที่ใช้พจนานุกรม 7776 คำ เช่น "ChompBuggyOkayPlatonicGrafted.KiltDecreeRecessOpacityUnedited" จึงมีเอนโทรปี 129 บิต และเป็นตัวเลือกที่ดีในการรักษาความปลอดภัยฐานข้อมูลของผู้จัดการรหัสผ่าน "." ตรงกลางเป็นเพียงสัญลักษณ์ที่จำง่าย พิมพ์ง่าย เพื่อช่วยแบ่งข้อความรหัสผ่านออกเป็นข้อความรหัสผ่าน 5 คำ 2 อัน ซึ่งทำให้การจดจำสิ่งทั้งหมดง่ายขึ้น

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

โพสต์คำตอบ

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