ฉันทำผิดพลาดแบบเดียวกัน รหัสผ่านเริ่มต้นยาว 50 ดังนั้นฉันจึงใช้ powershell เพื่อสร้างสตริงสุ่มยาว 50 รายการและแทนที่ SECRET_KEY เก่าด้วย ฉันเข้าสู่ระบบและหลังจากแทนที่ SECRET_KEY เซสชันก่อนหน้าของฉันถูกใช้งานไม่ได้
ด้วย PowerShell ( แหล่งที่มา ):
# Load the .net System.Web namespace which has the GeneratePassword function
[Reflection.Assembly]::LoadWithPartialName("System.Web")
# GeneratePassword(int length, int numberOfNonAlphanumericCharacters)
[System.Web.Security.Membership]::GeneratePassword(50,5)
ด้วย Bash ( แหล่งที่มา ):
# tr includes ABCabc123 and the characters from OWASP's "Password special characters list"
cat /dev/urandom | tr -dc 'A-Za-z0-9!"#$%&\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 100 ; echo
ณ จุดนี้ฉันคิดว่าทำไมไม่ลองใช้ปุ่มที่ใหญ่กว่านี้ดังนั้นฉันจึงลองด้วยคีย์ยาว 100 และ 1,000 ทั้งสองทำงาน หากฉันเข้าใจซอร์สโค้ดวัตถุที่ส่งคืนโดยฟังก์ชันผู้ลงนามคือ hmac hash ใน base64 RFC 2104มีสิ่งนี้เพื่อบอกว่าต้องใช้ความยาวของคีย์ลับ HMAC
แอปพลิเคชันที่ใช้คีย์ที่ยาวกว่า B ไบต์จะแฮชคีย์โดยใช้ H ก่อนจากนั้นใช้สตริง L ไบต์ที่เป็นผลลัพธ์เป็นคีย์จริงของ HMAC
กุญแจสำหรับ HMAC สามารถมีความยาวใด ๆ (คีย์ที่ยาวกว่า B ไบต์จะถูกแฮชครั้งแรกโดยใช้ H) อย่างไรก็ตามน้อยกว่า L ไบต์เป็นกำลังใจอย่างยิ่งเพราะมันจะลดความแข็งแรงของการรักษาความปลอดภัยของฟังก์ชั่น ยอมรับคีย์ที่ยาวกว่า L ไบต์ แต่ความยาวพิเศษจะไม่เพิ่มความแข็งแรงของฟังก์ชันอย่างมาก (อาจใช้คีย์ที่ยาวกว่านี้หากการสุ่มของคีย์ถือว่าอ่อนแอ)
หากต้องการแปลเป็นภาษาพูดปกติขนาดของรหัสลับจะต้องมีขนาดเท่ากับเอาต์พุต ที่สำคัญยังต้องอยู่ในบิต แต่ละหลักใน base64 หมายถึง 6 บิต ดังนั้นหากคุณมีรหัสผ่าน 50 ตัวคุณจะมีรหัสลับ 50 x 6 = 300 บิต หากคุณใช้ SHA256 คุณจะต้องใช้คีย์ 256 บิต ( sha256 ใช้ 256 บิตตามคำจำกัดความ ) ดังนั้นรหัสผ่านที่ยาว 50 ควรทำงานยกเว้นว่าคุณวางแผนที่จะใช้อัลกอริทึมการแฮชที่มีขนาดใหญ่กว่า SHA256
แต่เนื่องจากบิตเพิ่มเติมในคีย์ถูกแฮชขนาดของมันจะไม่ลดประสิทธิภาพลงอย่างเห็นได้ชัด แต่จะรับประกันได้ว่าคุณมีบิตเพียงพอสำหรับฟังก์ชั่นแฮชที่ใหญ่ขึ้น SHA-512 จะครอบคลุมโดย SECRET_KEY ยาว 100 ( 50 x 6 = 600 บิต> 512 บิต )
data decode will break
และอาจชี้ให้เห็นรหัส (ในโครงการ django หรือตัวอย่าง) ที่จะพัง แก้ไข: ยังคงใช้ django 1.4 - เป็นกรณีนี้หรือไม่