TL; DR เพราะนั่นคือวิธีที่พวกเขาได้รับการออกแบบ คุณสามารถใช้ KDF เพื่อรับคีย์ที่มีการสุ่มส่วนใหญ่อยู่ในเนื้อหาคีย์อินพุต
ฉันสังเกตเห็นว่าคีย์สำหรับการเข้ารหัสแบบดั้งเดิมที่ผ่านการรับรองความถูกต้อง เช่น AES จะต้องคาดเดาไม่ได้และสุ่มแบบสม่ำเสมอเพื่อความปลอดภัย
พวกเขาต้องมี 128 บิตเพื่อให้มีความปลอดภัย ~ 128 บิตตามที่ AES สัญญาไว้ โดยหลักการแล้ว คุณสามารถสร้างคีย์สุ่ม 112 บิต จากนั้นใช้บิตที่มีค่าเป็นศูนย์ 16 บิตเพื่อสร้างคีย์ 128 บิต API ส่วนใหญ่ยอมรับเฉพาะไบต์ - เช่น ทวีคูณของ 8 บิต ดังนั้นจะเป็น 14 ไบต์แบบสุ่มและ 2 ไบต์เป็นศูนย์สำหรับคีย์ 16 ไบต์ โดยหลักการแล้ว AES ไม่ต้องการคีย์ที่มีการกระจายอย่างดี.
ฉันได้ลบคำตอบส่วนนี้แล้ว มันถูกชี้ให้เห็นในการแชทช่องด้านข้าง ที่ไม่เป็นเช่นนั้น ที่กล่าวว่า การโจมตีคีย์ที่เกี่ยวข้องกับกำหนดการคีย์จะไม่ทำงานโดยตรง เนื่องจากพวกเขาถือว่าการโจมตีเฉพาะต้องการการเปลี่ยนแปลงเฉพาะในคีย์ที่ให้มา อย่างไรก็ตาม หากไม่มีการวิเคราะห์เพิ่มเติม เราไม่สามารถพูดได้ว่าผลลัพธ์นั้นปลอดภัย สามารถดูข้อมูลเพิ่มเติมได้ ที่นี่.
ค่า IV และเมล็ดสำหรับ PRNG จะต้องคาดเดาไม่ได้และสุ่ม
ไม่จำเป็น. ข้อกำหนด IV นั้นแตกต่างกันไปในแต่ละโหมดการทำงาน ตัวอย่างเช่น CBC ต้องการ IV ที่คาดเดาไม่ได้ (ซึ่งโดยทั่วไปแปลว่า สุ่ม IV). CFB ต้องการ nonce ที่มีขนาดเท่ากับขนาดบล็อก โหมด CTR สามารถใช้ nonce ขนาดใดก็ได้ ตราบใดที่บล็อกตัวนับไม่เกิดซ้ำ โหมด GCM มักจะใช้ 12 ไบต์ nonce Nonces - ตัวเลขที่ใช้ครั้งเดียว - สามารถสุ่มได้ แต่อาจเป็นหมายเลขซีเรียลได้เช่นกัน
คำถามของฉันคือ ค่าที่คาดเดาไม่ได้และค่าสุ่มเหล่านี้แตกต่างจากค่าที่คาดเดาได้ซึ่งมีคำภาษาอังกฤษทั้งคำอย่างไร (เช่น verysecretkey123456)
โดยทั่วไปจะสร้างขึ้นโดยเครื่องสร้างตัวเลขสุ่มที่ปลอดภัย (CSPRNG หรือ DRBG) หรือได้มาจากข้อมูลอื่นๆ ตัวอย่างเช่น อาจสร้างโดยใช้ข้อตกลงคีย์ โดยปกติจะตามด้วยคีย์ตามคีย์ที่ได้มาจากฟังก์ชัน (KBKDF)
คีย์อาจถูกสร้างขึ้นจากรหัสผ่านโดยใช้ PBKDFฟังก์ชันเหล่านี้ยังต้องการเกลือและปัจจัยการทำงาน (และอาจเป็นพารามิเตอร์อื่นๆ) เพื่อลดความเสี่ยงที่ผู้โจมตีจะคาดเดารหัสผ่าน เว้นแต่จะมีมาตรการตอบโต้อื่นๆ อยู่ รูปแบบนี้อาจยังไม่ปลอดภัย เนื่องจากรหัสผ่านมักคาดเดาได้ง่าย
"verysecretkey123456" โดยทั่วไปไม่ถือว่าเป็นคีย์ แต่จะถือว่าเป็นรหัสผ่านหรือวลีรหัสผ่าน ความจริงที่ว่ามันเป็นสตริงมากกว่าไบนารีก็เพียงพอแล้วสำหรับคำใบ้นั้น
ฉันถือว่าจากมุมมองของอัลกอริทึมมันไม่สำคัญ (ตราบใดที่ความยาวของคีย์ถูกต้อง)
ถูกต้อง แม้ว่า AES จะต้องใช้บิตสตริงเป็นคีย์ ดังนั้นหากต้องการใช้งาน คุณต้องเข้ารหัสรหัสผ่านหรือวลีรหัสผ่านก่อน โปรดทราบว่าเช่น คีย์ DES มีแพริตีบิตในคีย์ที่เข้ารหัส ดังนั้นคีย์ทั้งหมดจึงใช้เพียงบิตสุ่มเท่านั้น การเข้ารหัสที่ทันสมัยกว่า DES - รวมถึง AES - โดยทั่วไปได้รับการออกแบบมาให้รับคีย์แบบสุ่มทั้งหมด
แต่ผู้โจมตีสามารถคาดเดาคีย์/รหัสผ่านที่คาดเดาได้ง่ายกว่า เนื่องจากพวกเขาจะลองใช้คีย์/รหัสผ่านที่ไม่รัดกุมก่อน ฉันถูกไหม?
ใช่ โดยทั่วไปจะเรียกว่า การโจมตีพจนานุกรม เมื่อพวกเขาลองใช้คำเฉพาะ แน่นอน พวกเขาอาจทดสอบคีย์ขนาดเล็กมากแยกกัน และการโจมตีพจนานุกรมสามารถเสริมด้วยกลอุบายอื่นๆ
และการสุ่มแบบสม่ำเสมอจะมีความหมายก็ต่อเมื่อมีการสร้างคีย์มากกว่าหนึ่งครั้งเท่านั้น ถ้าเป็นเช่นนั้น จะเกิดอะไรขึ้นเมื่อเราใช้คีย์สุ่มที่ไม่สม่ำเสมอ
ไม่ ตามที่กล่าวไว้ใน คำตอบอื่น ๆ การพูดคุยแบบสุ่มอย่างสม่ำเสมอเกี่ยวกับกระบวนการสร้าง ไม่ใช่ผลลัพธ์เช่นนี้ หากคุณมีคีย์สุ่มที่ไม่สม่ำเสมอ ก็มีโอกาสที่ฝ่ายตรงข้ามจะเดาได้ อย่างน้อยก็มีโอกาสมากกว่าคีย์สุ่มสม่ำเสมอ
ตามหลักการของ Kerckhoff โดยทั่วไป เราถือว่าผู้โจมตีรู้ว่ามีการสร้างคีย์หรือรหัสผ่านอย่างไร ดังนั้นพวกเขาจึงสามารถเดาการกระจายได้