Score:2

คำถามเกี่ยวกับการขยายคีย์ AES

ธง us

ฉันกำลังอ่านเกี่ยวกับการขยายคีย์สำหรับ AES แต่ดูเหมือนจะยังหาคำตอบสำหรับคำถามนี้ไม่ได้ หนังสือหมายถึงคีย์ตัวเลขและคีย์ขยาย (หรือกำหนดการคีย์) นี่คืออัลกอริทึมจากหนังสือ:

ขั้นตอนการขยายคีย์ (ไบต์ K[4][Nk], ไบต์ W[4][Nb (N r + 1)]) ? NK ⤠6
    สำหรับ j = 0 ถึง Nk â 1 do
        สำหรับ i = 0 ถึง 3 do
            W[i][j] â K[i][j]
        จบสำหรับ
    จบสำหรับ
    สำหรับ j = Nk ถึง Nb (N r + 1) â 1 do
        ถ้า j mod Nk = 0 แล้ว
            W[0][j] â W[0][j â Nk ] + S RD [W[1][j â 1]] + RC[j/Nk ]
            สำหรับ i = 1 ถึง 3 do
                W[i][j] â W[i][j â Nk ] + S RD [W[i + 1 mod 4][j â 1]]
            จบสำหรับ
        อื่น
            สำหรับ i = 0 ถึง 3 do
                W[i][j] â W[i][j â Nk ] + W[i][j â 1]
            จบสำหรับ
        จบถ้า
    จบสำหรับ
ขั้นตอนสิ้นสุด

คำถามที่ 1: ในบรรทัดแรก ขั้นตอนนี้ใช้คีย์ วัตถุสำคัญที่จำเป็นต้องยอมรับโดยฟังก์ชันนี้คืออะไร ดูเหมือนว่าคีย์นี้มีจำนวนคำ 32 บิตที่จำเป็นสำหรับ 128 หรือ 192 แล้ว (เนื่องจากเป็นการขยายคีย์สำหรับ 6 คอลัมน์หรือน้อยกว่า) แต่คุณจะได้รับรหัสผ่านความยาวสุ่มของผู้ใช้ได้อย่างไร PKCS7 จะถูกรันเพื่อให้คีย์ถูกเสริมหรือไม่?

คำถามที่ 2: นี่แสดงว่าคีย์ที่ป้อนจริงของผู้ใช้เป็นส่วนหนึ่งของกำหนดการคีย์ หรือคีย์ทั้งหมดในกำหนดการมาจากคีย์ดิบที่ป้อนจริงของผู้ใช้

Score:8
ธง my

ดูเหมือนว่าคีย์นี้มีจำนวนคำ 32 บิตที่จำเป็นสำหรับ 128 หรือ 192 แล้ว (เนื่องจากเป็นการขยายคีย์สำหรับ 6 คอลัมน์หรือน้อยกว่า) แต่คุณจะได้รับรหัสผ่านความยาวสุ่มของผู้ใช้ได้อย่างไร

วิธีที่คุณได้รับคีย์บิต 128, 192 (หรือ 256) นั้นอยู่นอกข้อกำหนด AES ใช้เป็นอินพุตคีย์นั้น สิ่งที่คุณทำเพื่อให้ได้กุญแจนั้นไม่ใช่เรื่องที่ต้องกังวล

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

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

การขยายคีย์สร้างคีย์ย่อย 11, 13 หรือ 15 ที่ AES ใช้ (ขึ้นอยู่กับขนาดคีย์) บล็อกเริ่มต้น 1, 3/2 หรือ 2 จะเป็นบิตที่นำมาจากคีย์ที่ป้อนโดยตรง อย่างไรก็ตาม นั่นไม่สำคัญต่อวิธีการทำงานของ AES

us flag
ขอบคุณสำหรับข้อมูลนี้
Score:7
ธง in

วัตถุสำคัญที่จำเป็นต้องยอมรับโดยฟังก์ชันนี้คืออะไร

อาร์เรย์ของไบต์

คุณจะได้รหัสผ่านความยาวแบบสุ่มของผู้ใช้ได้อย่างไร

แนวทางปฏิบัติทั่วไปคือการใช้ Password-Based Key Derivation Functions (PBKDF) เช่น PBKDF2, Bcrypt, Argon2, BalloonHash ฯลฯ โปรดทราบว่าไม่สามารถเพิ่มความแข็งแกร่งของอินพุตได้ ดังนั้นผู้ใช้ต้องเลือกรหัสผ่านที่ดีและมีความแข็งแรงเพียงพอ เช่น รหัสผ่านที่สร้างด้วยวิธี dicewire

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

นอกจากนี้ เนื้อหาหลักยังสามารถเป็นแหล่งที่มาของการแลกเปลี่ยนคีย์ เช่น DHKE ในกรณีนี้ ต้องใช้ฟังก์ชันการสืบทอดคีย์ เช่น HKDF กับเนื้อหาหลักเพื่อรับคีย์ AES (ไบต์)

PKCS7 จะถูกรันเพื่อให้คีย์ถูกเสริมหรือไม่?

ไม่มีทาง นั่นไม่ปลอดภัย หากคุณกำลังออกแบบไลบรารี ให้ปฏิเสธอินพุตของผู้ใช้ (โปรแกรมเมอร์) หากอินพุตนั้นสั้นกว่าขนาดคีย์เป้าหมาย

นี่แสดงว่าคีย์ที่ป้อนจริงของผู้ใช้เป็นส่วนหนึ่งของกำหนดการคีย์หรือคีย์ทั้งหมดในกำหนดการมาจากคีย์ดิบที่ป้อนจริงของผู้ใช้

รหัสผ่านของผู้ใช้ควรได้รับการประมวลผลด้วย PBKDF เพื่อรับคีย์ กำหนดการคีย์ต้องการอาร์เรย์คีย์ที่มีขนาดขึ้นอยู่กับ AES ที่ต้องการ (128,192,256) เดอะ กำหนดการสำคัญไม่ได้แยกแยะคุณภาพของวัสดุสำคัญ และไม่ใช่ส่วนหนึ่งของการออกแบบ ความรับผิดชอบด้านคุณภาพของเนื้อหาสำคัญอยู่ที่ผู้ใช้และห้องสมุด ไลบรารีที่เข้ารหัสควรจัดการรหัสผ่านด้วย PBKDF ที่ดีและป้อนเอาต์พุตลงในกำหนดการคีย์ กระบวนการนี้ต้องเป็นอิสระจากผู้ใช้ - ยกเว้นคำเตือนบางอย่างเกี่ยวกับคุณภาพของรหัสผ่าน

ทั้งหมดในอย่างเดียว;

  1. รับรหัสผ่านจากผู้ใช้และเตือนผู้ใช้หากรหัสผ่านสั้น
  2. รับคีย์ไบต์อาร์เรย์ที่ต้องการจากรหัสผ่านด้วย PBKDF
  3. ระบุตารางเวลาคีย์ด้วยไบต์อาร์เรย์คีย์ที่ได้รับ
us flag
"รหัสผ่านของผู้ใช้ควรได้รับการประมวลผลด้วย PBKDF เพื่อรับรหัส" ก๊อตชา. ขอบคุณ.เป็นเพียงว่าหนังสือดูเหมือนจะไม่พูดถึงเรื่องนี้เท่าที่ฉันสามารถบอกได้
Maarten Bodewes avatar
in flag
ชื่อ "หนังสือ" คืออะไร? วิธีสร้างหรือรับคีย์ AES ไม่ได้เป็นส่วนหนึ่งของอัลกอริทึม AES เอง...
us flag
@MaartenBodewes "การออกแบบของ Rijndael" ในบทที่ 3 ซึ่งมีการวางกำหนดการสำคัญ แต่ยังรวมถึง FIPS 197 ด้วย ไม่เป็นไรหากไม่ได้เป็นส่วนหนึ่งของ AES แต่นั่นจะอธิบายได้ว่าทำไมจึงไม่พูดถึงและทำไมฉันถึงไม่แน่ใจ :D
@mirkaim ฉันสงสัยว่าคีย์สมมาตรส่วนใหญ่ไม่ได้มาจากรหัสผ่านของผู้ใช้เลย พวกมันถูกสร้างขึ้นจากโปรโตคอลข้อตกลงคีย์ที่ไม่สมมาตร (เช่น TLS) หรือสร้างขึ้นแบบสุ่ม (หวังว่าจะมาจากตัวสร้างตัวเลขสุ่มที่ปลอดภัยด้วยการเข้ารหัส) จากนั้นจึงป้องกันด้วยการเข้ารหัสด้วยคีย์อื่น
Score:5
ธง in

ดูเหมือนว่าคีย์นี้มีจำนวนคำ 32 บิตที่จำเป็นสำหรับ 128 หรือ 192 แล้ว (เนื่องจากเป็นการขยายคีย์สำหรับ 6 คอลัมน์หรือน้อยกว่า) แต่คุณจะได้รับรหัสผ่านความยาวสุ่มของผู้ใช้ได้อย่างไร

รหัสผ่านไม่ใช่กุญแจโดยตัวมันเอง

ในการรับรหัสจากรหัสผ่าน คุณต้องใช้ฟังก์ชันการสืบทอดรหัสตามรหัสผ่าน คุณสามารถใช้ฟังก์ชันต่างๆ เช่น PBKDF2, Argon2 หรือ Balloon hashing อัลกอริทึมที่รู้จักกันดีอื่น ๆ ได้แก่ bcrypt และ scrypt

PKCS7 จะถูกรันเพื่อให้คีย์ถูกเสริมหรือไม่?

ไม่ การเติมที่เข้ากันได้กับ PKCS#7 คือสิ่งที่คุณเรียกใช้บนข้อความธรรมดา (หรือ - เมื่อใช้งานอย่างมีประสิทธิภาพ - บนบัฟเฟอร์ขนาดบล็อกที่ใช้สำหรับการเข้ารหัส/ถอดรหัสระหว่างการดำเนินการเข้ารหัสครั้งล่าสุด) คีย์ไม่ต้องการวิธีการเติมเมื่อสร้าง / ได้รับอย่างถูกต้อง ควรมีขนาดที่เหมาะสมเสมอ - มิฉะนั้นช่องว่างภายในศูนย์ก็จะทำงานได้ดี

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

คีย์สมมาตรประกอบด้วยบิต/ไบต์ ดังนั้นคีย์ AES จึงประกอบด้วย 128, 192 หรือ 256 บิต / 16, 24 หรือ 32 บิตตามลำดับ สิ่งอื่นที่ไม่ใช่คีย์ AES สตริงโดยทั่วไปไม่ถือว่าเป็นคีย์ แม้ว่าอาจเป็นรหัสฐานสิบหกหรือฐาน 64 ของคีย์ก็ตาม หากเป็นสตริงขนาดใดก็ตาม โดยทั่วไปจะถือว่าเป็นรหัสผ่านแทน

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

us flag
เข้าใจแล้ว. ขอบคุณมาก.

โพสต์คำตอบ

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