Score:1

ค่าเกลือในอัลกอริทึมการเข้ารหัส

ธง gf
cjd

ฉันเห็นว่ามีคำถามมากมายเกี่ยวกับการจัดการค่าเกลือ แต่จนถึงตอนนี้ฉันไม่เห็นคำถามใดที่หักล้างคำถามต่อไปนี้

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

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

เช่นเดียวกับเวกเตอร์เริ่มต้น เกลือนี้สามารถเก็บไว้ในที่สาธารณะได้หรือไม่? สำหรับกรณีการใช้งานของฉัน ทั้งสตริงที่เข้ารหัสและ IV จะถูกเก็บไว้ในสาธารณะ เกลือจะถูกจัดเก็บแบบนี้ด้วยหรือไม่

JAAAY avatar
us flag
ใช่ ทั้งหมดยกเว้นรหัสผ่านจะเรียกว่าพารามิเตอร์สาธารณะและสามารถจัดเก็บเป็นสาธารณะได้
kelalaka avatar
in flag
คุณจะใช้รหัสผ่านนี้กับไฟล์ต่างๆ กี่ครั้ง คุณต้องการใช้โหมดการเข้ารหัสแบบใด มีคำถาม/ข้อผิดพลาดมากมายเมื่อคุณต้องการเข้ารหัสไฟล์ แม้แต่ [การอัปเดตไฟล์อาจเป็นอันตรายหากคุณไม่เปลี่ยนคีย์...](https://crypto.stackexchange.com/a/84440/18298)
Score:3
ธง kr

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

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

kelalaka avatar
in flag
OP พูดถึงคีย์ AES ไม่เกี่ยวกับการรับรหัสผ่าน... นอกจากนี้ IV ยังสามารถได้รับพร้อมกับคีย์ (ไม่มีการพูดถึง IV ในโพสต์ของคุณ)
kr flag
@kelalaka: คุณแน่ใจเหรอ? OP กำลังพูดว่า: *"ฉันใช้ scrypt เพื่อสร้างคีย์สำหรับ AES ... ในการทำเช่นนี้ฉันต้องใช้รหัสผ่านของผู้ใช้ (ผู้ใช้ป้อนทุกครั้ง) และเกลือ"* ผู้เขียนขอรหัสผ่านจากผู้ใช้ จากนั้นเติมเกลือ (ฉันคิดว่าพารามิเตอร์อื่นๆ เป็นค่าคงที่บางตัว) และสร้างคีย์ ซึ่งจากนั้นจะใช้สำหรับการเข้ารหัส/ถอดรหัสด้วย AES นี่เป็นขั้นตอนมาตรฐานใน KeePass และเครื่องมืออื่นๆ
kr flag
@kelalaka: และดูที่ชื่อ: OP กำลังถามเกี่ยวกับการจัดการเกลือสำหรับการเข้ารหัส
kelalaka avatar
in flag
คุณใช้ `'ในการรับรหัสผ่านเดียวกันกับ scrypt คุณควรใช้อินพุตเดียวกัน` ควรเป็น _หากต้องการรับรหัส AES เดียวกันกับ scrypt คุณควรใช้อินพุตเดียวกัน_ สำหรับส่วน IV ความผิดพลาดของฉัน..
cjd avatar
gf flag
cjd
ใช่ สิ่งนี้ตอบคำถาม @mentallurg ดังนั้นจึงปลอดภัยที่จะเก็บเกลือ (เช่นเดียวกับ IV) ในที่สาธารณะ?
kr flag
@kelalaka: ตกลง คุณพูดถูก ฉันหมายถึง "เพื่อให้ได้ผลลัพธ์เดียวกัน คุณต้องใช้อินพุตเดียวกัน" แต่การใช้คำว่า "รหัสผ่าน" ในบริบทนี้ไม่ใช่ความคิดที่ดี OP กำลังพูดถึงคีย์ AES ดังนั้นเราควรยึดติดกับมัน ฉันได้แก้ไขคำตอบแล้ว ขอขอบคุณ
kr flag
@cjd: ใช่ มันปลอดภัยที่จะเก็บเกลือสาธารณะ แต่ตามที่ *kelalaka* ระบุไว้ในความคิดเห็นอื่น เกลืออาจไม่เพียงพอสำหรับการรักษาความปลอดภัยที่ดี ตัวอย่างเช่น หากคุณใช้เกลือเดียวกันสำหรับรหัสผ่านหลายตัว จะทำให้ประสิทธิภาพของเกลือลดลง นอกจากนี้ สิ่งสำคัญคือคุณกำลังทำอะไรกับ AES เช่น คุณกำลังเข้ารหัสไฟล์ด้วยรหัสผ่านเฉพาะเพียงครั้งเดียว หรือคุณกำลังอัปเดตไฟล์นี้เป็นครั้งคราว นอกจากนี้ สิ่งสำคัญคือคุณใช้ AES อย่างไรตามที่ *kelalaka* ถาม ดังนั้น พิจารณาด้านอื่น ๆ นอกเหนือจากเกลือด้วย

โพสต์คำตอบ

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