ฉันรู้ว่าสิ่งนี้ขึ้นอยู่กับการใช้งานของฉันและการใช้งานไลบรารีที่ฉันใช้ ฉันถามเกี่ยวกับกระบวนการของฉันโดยสมมติว่าไลบรารีการเข้ารหัสและรหัสของฉันไม่มีข้อบกพร่อง/ถูกบุกรุก รหัสผ่านของผู้ใช้มีความปลอดภัย และเครื่องไม่ได้ถูกบุกรุก
เป้าหมายที่นี่คือการปกป้องความลับของไฟล์ด้วยรหัสผ่าน และสามารถเข้ารหัสได้โดยไม่ต้องป้อนรหัสผ่าน
ตั้งค่าเริ่มต้น:
- สร้างคู่กุญแจ RSA
- แจ้งให้ผู้ใช้ป้อนรหัสผ่านและถือว่าผู้ใช้ใช้รหัสผ่านที่ปลอดภัยเพียงพอ
- เข้ารหัสคีย์ส่วนตัวในรูปแบบ DER, pkcs=8, scheme = scryptAndAES256-CBC ด้วยรหัสผ่านผู้ใช้
สำหรับแต่ละไฟล์:
- สร้างคีย์เซสชันแบบสุ่มขนาด 32 ไบต์
- เข้ารหัสเซสชันคีย์ด้วยรหัสสาธารณะเริ่มต้น
- สร้าง nonce แบบสุ่ม 12 ไบต์
- เขียนไปยังไฟล์ที่ส่งออก:
- คีย์เซสชันที่เข้ารหัส
- ไม่มี
- สตรีมไฟล์ที่เข้ารหัสด้วย AES GCM โดยใช้คีย์เซสชันแบบสุ่ม 32B และ 12B nonce
เมื่อทำการถอดรหัสไฟล์
- แจ้งให้ผู้ใช้ป้อนรหัสผ่าน ถอดรหัสคีย์ส่วนตัวเริ่มต้น
- อ่านคีย์เซสชันที่เข้ารหัสและไม่ใช่จากจุดเริ่มต้นของไฟล์
- ถอดรหัสเซสชันคีย์ด้วยคีย์ส่วนตัวเริ่มต้น
- ถอดรหัสสตรีมไฟล์ด้วยคีย์เซสชันและไม่ใช่
สิ่งอื่นที่ควรทราบคือฉันเลือก GCM เนื่องจากความเร็วมากกว่า CBC เป็นต้น ฉันยังทราบถึงปัญหาการชนกันของการใช้ nonce แบบสุ่ม แต่ฉันเข้าใจว่านี่จะเป็นปัญหามากกว่าหากฉันมีไฟล์หลายพันล้านไฟล์โดยใช้คีย์เซสชันเดียวกัน และด้วยคีย์สุ่ม 32 ไบต์โดยทั่วไปฉันมีพื้นที่ 44 ไบต์เพื่อหลีกเลี่ยงการชนกัน เป็นที่พึงปรารถนาสำหรับฉันที่จะไม่ต้องติดตาม nonce
มีปัญหาใด ๆ กับแผนนี้หรือนี่จะเป็นวิธีที่ปลอดภัยในการปกป้องความเป็นส่วนตัวของไฟล์โดยสมมติว่ามีการใช้รหัสจำลองอย่างถูกต้องหรือไม่