ฉันกำลังใช้ Fernet ของ python.cryptography พร้อมแฮชข้อความรหัสผ่าน PBKDF2 เพื่อเข้ารหัสชิ้นส่วนของข้อมูล (ค่า) ที่จัดเก็บ เข้ารหัส ในฐานข้อมูล วลีรหัสผ่านที่แฮชคือ ไม่ เก็บไว้ในฐานข้อมูล และด้วยเหตุนี้จึงไม่ใช่เกลือ แต่เกลือมาจากห้องเก็บรหัสผ่านในสภาพแวดล้อมรันไทม์ของแอปพลิเคชัน จากนั้นแก้ไขเพื่อให้ไม่ซ้ำกันสำหรับแต่ละค่า
คำถามหนึ่งที่ฉันมีเกี่ยวกับเรื่องนี้คือ: หากผู้โจมตีมีข้อความรหัสผ่านและข้อมูลที่เข้ารหัสเป็นค่าเดียว เป็นไปได้หรือไม่ที่ผู้โจมตีจะทำวิศวกรรมย้อนกลับกับเกลือ (ซึ่งจะช่วยให้พวกเขาบังคับข้อมูลที่เหลืออย่างโหดเหี้ยม) จะเกิดอะไรขึ้นหากพวกเขามีสำเนาของข้อมูลเวอร์ชันที่ไม่ได้เข้ารหัสสำหรับค่านั้นด้วย
(เวกเตอร์การโจมตีที่กำลังพิจารณาในที่นี้คือเวกเตอร์ที่ผู้โจมตีมีบัญชีผู้ใช้ทั่วไปในระบบ และได้รับสำเนาของฐานข้อมูลที่มีค่าการเข้ารหัส ดังนั้น พวกเขาจึงสามารถสร้างค่าเดียว (ของพวกเขา) ในที่ที่พวกเขารู้ วลีรหัสผ่านและค่าเข้ารหัสที่เป็นผลลัพธ์ นอกจากนี้ พวกเขายังสามารถเข้าถึงสำเนารหัสของแอปพลิเคชันได้เนื่องจากเป็นโอเพ่นซอร์ส)
ตามคำขอ นี่คือวิธีจัดการเกลือ:
- เกลือถูกสร้างขึ้นโดยผู้ดูแลระบบ (เราแนะนำให้ใช้ค่าสุ่ม 32 ไบต์)
- เกลือจะถูกเก็บไว้ในห้องเก็บรหัสผ่าน (บริการเครือข่าย)
- เมื่อปรับใช้แอปพลิเคชัน เกลือจะถูกฉีดที่รันไทม์
- เมื่อมีการบันทึกค่าใหม่ เกลือลับจะถูกรวมเข้ากับ ID ค่าเฉพาะเพื่อสร้างเกลือต่อค่า
- จากนั้นเกลือนี้จะใช้กับวลีรหัสผ่านที่ผู้ใช้ระบุเพื่อสร้างคีย์โดยใช้ PBKDF2 (ด้วยการวนซ้ำ 500K)
- ค่าของผู้ใช้แต่ละค่าจะถูกเข้ารหัสด้วยคีย์ของแต่ละคน
ฉันเชื่อว่าด้านบนเรียกว่ารูปแบบ "เกลือและพริกไทย"