Score:-1

การแชร์ไฟล์ที่เข้ารหัสด้วยคีย์ที่สร้างขึ้นตามกำหนดจากรหัสผ่านผู้ใช้

ธง tr

ข้อมูลความเป็นมา:

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

โซลูชันทางเทคนิค:

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

สำหรับผู้ใช้แต่ละราย ให้สร้างคีย์อื่น "Ku" จากรหัสผ่านผู้ใช้ด้วยฟังก์ชันการสืบทอดคีย์ เช่น PBKDF2 โดยใช้รหัสผู้ใช้เป็นเกลือ จากนั้นเข้ารหัสคีย์ "Kw" ด้วยคีย์ "Ku" โดยใช้ AES และบันทึกคีย์เข้ารหัส "Kw" นี้ในฐานข้อมูลพร้อมข้อมูลผู้ใช้

จากนั้นในการเข้าสู่ระบบของผู้ใช้แต่ละครั้ง ให้สร้างคีย์ "Ku" ใหม่จากรหัสผ่านของผู้ใช้โดยใช้ฟังก์ชันการสืบทอดคีย์ เช่น PBKDF2 รับคีย์เข้ารหัส "Kw" และถอดรหัสด้วย Ku จากนั้นใช้ Kw เพื่อถอดรหัส/เข้ารหัสไฟล์

โซลูชันนี้มีความปลอดภัยเพียงพอที่จะจัดเก็บไฟล์ที่ละเอียดอ่อน เช่น เอกสารการรักษาพยาบาล หรือไม่

ขอขอบคุณล่วงหน้าสำหรับการตอบรับของคุณ

DannyNiu avatar
vu flag
การตรวจสอบการออกแบบโครงร่างทั้งหมดนั้นนอกหัวข้อ อย่างไรก็ตาม เพื่อเป็นประโยชน์ คุณอาจต้องพิจารณาเฟรมเวิร์กคีย์เอสโครว์ของคุณ (การเข้ารหัสแบบสมมาตร) ใหม่ เนื่องจากนี่ดูเหมือนจะเป็นสาระสำคัญของความสำเร็จของโซลูชันของคุณ โดยเฉพาะอย่างยิ่งเมื่อคุณ **ตั้งใจจริง** ที่ได้คีย์มา
Gravity avatar
tr flag
ขอบคุณสำหรับการตอบสนองของคุณ ! ไม่ใช่การตรวจสอบการออกแบบ แต่เป็นคำแนะนำเพิ่มเติมหากฉันพลาดสิ่งที่ "ใหญ่" ซึ่งอาจทำให้ความปลอดภัยลดลงอย่างมากเนื่องจากฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัย / การเข้ารหัส
DannyNiu avatar
vu flag
ฉันเพิ่งสังเกตว่าคุณพูดว่า "เอกสารการรักษาพยาบาล" เหตุใดคุณจึงขอคำแนะนำจากฟอรัมอินเทอร์เน็ตสาธารณะแทนที่จะเป็นบริษัทรักษาความปลอดภัยที่จัดตั้งขึ้น เช่น RSA, Security Innovation, OnBoard Security ฉันนึกถึงชื่อเหล่านี้เพราะ RSA คิดค้นโดยผู้ร่วมก่อตั้งของ RSA และ Security Innovation และ OnBoard Security ก็เป็นเจ้าของ NTRU มาระยะหนึ่งแล้ว
Gravity avatar
tr flag
ฉันใช้ตัวอย่างเอกสารด้านการดูแลสุขภาพเพื่ออธิบายเท่านั้น แต่อาจเป็นเอกสารที่ละเอียดอ่อน (สำหรับมุมมองของผู้ใช้) ที่ผู้ใช้ต้องการให้ "เข้ารหัส"
Score:0
ธง vu

เรามาทำลายสิ่งนี้กันก่อน

ขั้นแรก เรามีคีย์ต่อไปนี้:

  • $K_w$ - คีย์พื้นที่ทำงานสำหรับการเข้ารหัสไฟล์
  • $K_u$ - รหัสต่อผู้ใช้สำหรับการเอสโครว์ $K_w$.

ประการที่สองมีตัวแปรที่ซ่อนอยู่เช่นกัน

  • เดอะ เกลือ สำหรับสร้าง $K_u$ จากรหัสผ่านผู้ใช้ เดอะ ธงแดงขนาดใหญ่ นี่คือ OP รับค่าจาก User ID ซึ่งในความเป็นจริง ค่านี้ควรสุ่มและบันทึก

  • เดอะ ไม่เคย สำหรับอัลกอริทึมการเข้ารหัสไฟล์ - ในการเข้ารหัสไฟล์ คุณต้องมีโหมดการทำงานของรหัสบล็อกหรือรหัสสตรีม อัลกอริทึมการเข้ารหัสดังกล่าวต้องการ nonce เพื่อให้ปลอดภัยในการใช้คีย์เดียวกันหลายครั้งอัลกอริทึมการเข้ารหัสควรได้รับการพิสูจน์ตัวตนตามอุดมคติ นั่นคือ มีแท็ก MAC ต่อท้ายข้อความเข้ารหัส หรือเพียงแค่ใช้อัลกอริทึม AEAD เช่น AES-GCM หรือ ChaCha20-Poly1305

ตอนนี้เรามาทบทวนคำถามกัน

สร้าง Kw คีย์ที่สร้างขึ้นแบบสุ่มสำหรับพื้นที่ทำงานสำหรับการเข้ารหัสไฟล์ด้วย AES

ไม่มีอะไรร้ายแรงนอกจากภาระงานหนักที่อาจเกิดขึ้นกับ CSPRNG ที่นี่

... และบันทึกคีย์เข้ารหัส "Kw" นี้ในฐานข้อมูลพร้อมข้อมูลผู้ใช้

ซึ่งหมายความว่าคุณเข้ารหัส $K_w$ กับ $K_u$ และคุ้มกันการเข้ารหัส $K_w$ ในฐานข้อมูล

Gravity avatar
tr flag
ขอบคุณสำหรับคำติชมของคุณ ดังนั้นก่อนอื่นอย่าใช้ ID ผู้ใช้เป็นเกลือ แต่สร้างเกลือแบบสุ่มและบันทึกด้วยข้อมูลผู้ใช้ ประการที่สอง ใช้ AES-GCM สำหรับการเข้ารหัสไฟล์
Gravity avatar
tr flag
สำหรับขั้นตอนสุดท้าย ใช่ เข้ารหัส Kw จะถูกบันทึกไว้ในฐานข้อมูล สำหรับฉัน ปัญหาด้านความปลอดภัยคือรหัสผ่านผู้ใช้ถูกส่งอย่างชัดเจน (พร้อม https แน่นอน) ไปยังแบ็กเอนด์ในเวลาเข้าสู่ระบบ ดังนั้นแฮ็กเกอร์สามารถฟังและแยกรหัสผ่านผู้ใช้ที่ชัดเจน จากนั้นสร้าง Kw ใหม่เพื่อถอดรหัสไฟล์ ฉันถูกไหม ? แต่ฉันไม่รู้ว่ามีวิธีแก้ปัญหาสำหรับจุดนี้หรือไม่

โพสต์คำตอบ

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