คำถามพิจารณาการเติมข้อความที่น่าจดจำ เช่น "cipherkey" ลงในคีย์ AES โดยเพิ่มศูนย์ไบต์ต่อท้ายนิพจน์ (UTF-8) ของข้อความนี้เป็นไบต์ จนกระทั่งถึง 16, 24 หรือ 32 ไบต์สำหรับ AES-128, AES-192 หรือ AES-256
เดอะ หลัก ปัญหานี้ก็คือว่า มันรวดเร็วและราคาไม่แพงซึ่งเป็นหายนะในบริบท: ช่วยให้ฝ่ายตรงข้ามใช้กระบวนการนั้นกับรหัสผ่านที่น่าเชื่อถือได้อย่างรวดเร็วและราคาไม่แพง และทดสอบคีย์ผลลัพธ์กับข้อความเข้ารหัส (ด้วยข้อความธรรมดาที่รู้จักหรือรู้จักซ้ำซ้อน) แล้วจึงค้นหาคีย์ นี่คือ แคร็กรหัสผ่านและมีอุตสาหกรรมขนาดเล็กที่พัฒนาซอฟต์แวร์และฮาร์ดแวร์ผสมกันสำหรับสิ่งนี้
พจนานุกรมของคำศัพท์ภาษาอังกฤษล้านคำที่ใช้บ่อยที่สุด (สำหรับคำจำกัดความเพิ่มเติมของคำบางคำ) ฉันคิดว่ามี "cipherkey" อย่างน้อย การค้นหาโดย Google พบเหตุการณ์ 78,400 รายการ และอยู่ในรายการโดเมนที่จดทะเบียนใน TLD ทั่วไปสามรายการ ด้วยคู่ของข้อความธรรมดา/ข้อความเข้ารหัสที่รู้จัก หรือข้อความเข้ารหัสสำหรับข้อความธรรมดาที่มีโครงสร้างบางอย่าง การดำเนินการนี้จะใช้เวลาไม่กี่วินาทีในการทำลายสำหรับคนที่มีเครื่องมือที่เหมาะสม
แม้ว่าจะสามารถปรับปรุงได้อย่างมาก (ดูย่อหน้าถัดไป) "cipherkey" ไม่ใช่รหัสผ่านที่ดี ขอแนะนำให้เลือกรหัสผ่านที่คาดเดาได้ยากขึ้น แค่ตั้งชื่อว่า ข้อความรหัสผ่าน จะช่วย! แต่นั่นคือ รอง ปัญหา.
เมื่อเปลี่ยนสิ่งที่น่าจดจำ (รหัสผ่าน วลีรหัสผ่าน..) ให้เป็นกุญแจ หนึ่ง ต้อง ใช้ฟังก์ชันการรับคีย์ที่มีไว้สำหรับรหัสผ่าน ซึ่งเป็นฟังก์ชันที่มีพารามิเตอร์เวิร์กแฟกเตอร์ที่อนุญาตให้ปรับต้นทุนของการได้มาของคีย์ หากค่าใช้จ่ายดังกล่าวเท่ากับ 0.5 วินาทีของเวลาคอมพิวเตอร์ที่มีประสิทธิภาพ แทนที่จะเป็น 20 นาโนวินาทีสำหรับวิธีที่เสนอ นั่นจะกลายเป็นปัญหาคอขวดสำหรับการถอดรหัสรหัสผ่าน และน่าจะทำให้พวกเขาเสียเหงื่อเป็นอย่างน้อย ด้วยข้อความรหัสผ่าน Ã la XKCD หรือ ไดซ์แวร์มันสามารถค่อนข้างปลอดภัย
หนึ่งควรใช้ เกลือซึ่งจะป้องกันการประมวลผลคีย์ที่ได้รับมาล่วงหน้า และป้องกันการตัดจำหน่ายต้นทุนของการสืบทอดดังกล่าวสำหรับคู่รหัสผ่าน/คีย์หลายคู่ นั่นเป็นอีก รอง ปัญหา.
สิ่งสำคัญคือฟังก์ชันการสืบทอดคีย์คือฮาร์ดหน่วยความจำ ซึ่งต้องใช้หน่วยความจำจำนวนมากตลอดการคำนวณ เนื่องจากจะเพิ่มต้นทุนทางการเงินในการโจมตีอย่างมาก โดยเสียค่าใช้จ่ายเพียงเล็กน้อยสำหรับผู้ใช้ที่ถูกต้องตามกฎหมาย ฟังก์ชั่นที่แนะนำ ได้แก่ อาร์กอน2 และ เข้ารหัส. ฟังก์ชันทั่วไปแต่ไม่แนะนำ ได้แก่ PBKDF2ซึ่งไม่ใช่ memory-hard และท่ามกลางการใช้เวลา CPU เพื่อวัตถุประสงค์ในการรับรหัสผ่านจากคีย์ที่แย่กว่านั้น: มันเพิ่มขอบของผู้โจมตีโดยใช้ ASICs, FPGA และแม้แต่ GPUs w.r.t. ผู้ใช้ที่ถูกต้องโดยใช้ซีพียู ฉันหา คำแนะนำของ NIST สำหรับ PBKDF2 สอดคล้องกับการผลักดันในอดีตของพวกเขา Dual_EC_DRBG:
ในขณะที่ PBKDF2 นั้นยากต่อเวลาแต่ไม่ใช่หน่วยความจำอย่างหนัก แต่ก็มีการใช้งานอย่างกว้างขวางจนไม่สามารถใช้งานได้จริง (ในขณะนี้) เพื่อแนะนำข้อกำหนดสำหรับฟังก์ชันการสืบทอดคีย์หน่วยความจำฮาร์ดคีย์