Score:1

การออกแบบแชทที่เข้ารหัสตั้งแต่ต้นจนจบ

ธง au

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

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

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

อย่างไรก็ตาม การดำเนินการนี้ไม่สามารถแก้ปัญหาการกู้คืน AES ได้ฉันไม่แน่ใจว่าการจัดเก็บคีย์ AES ในฐานข้อมูลสำหรับห้องสนทนาแต่ละห้องนั้นปลอดภัยหรือไม่ แม้ว่าจะถูกเข้ารหัสด้วย RSA ก็ตาม จะต้องมีการจัดเก็บคีย์ AES ที่เข้ารหัสสำหรับแต่ละบุคคลที่เกี่ยวข้องในการแชท

ถ้าใครมีคำแนะนำหรือเคล็ดลับโปรดแจ้งให้เราทราบ

fgrieu avatar
ng flag
คุณกำลังนึกถึงการเข้ารหัสแบบไฮบริด โดยปกติแล้ว คีย์ AES จะถูกสุ่มออกมาสำหรับแต่ละข้อความ และไม่ได้จัดเก็บไว้อย่างชัดเจนในทุกที่: จะถูกเก็บไว้ข้างหรือข้างข้อความที่เข้ารหัส AES และเข้ารหัสโดยใช้คีย์สาธารณะของผู้รับแต่ละราย รวมถึงคีย์สาธารณะของ ผู้เขียนโพสต์ ท่ามกลางความยุ่งยากของสิ่งที่คุณวางแผนไว้คือการแจกจ่ายรหัสความปลอดภัย "การสร้างคีย์สาธารณะและคีย์ส่วนตัวจากวลีช่วยจำ" สามารถทำได้ แต่ผู้ใช้เลือกรหัสผ่าน/วลีรหัสผ่านที่ไม่ดี ดังนั้น อย่างน้อยที่สุดคุณต้องการให้คีย์ยืดออกเพื่อพยายามชดเชยสิ่งนั้น มีตัวเลือกอื่นๆ
Maarten Bodewes avatar
in flag
สิ่งนี้สามารถ "แก้ไข" ได้หลายวิธี ฉันใส่ "แก้ไขแล้ว" ในเครื่องหมายอัญประกาศเพราะต้องมีความไว้วางใจในระดับหนึ่งเสมอในการนำเสนอบริการ การสร้างคู่คีย์ RSA จาก "seed" เช่น ครอบคลุม [ที่นี่](https://crypto.stackexchange.com/a/30216/1172) และสังเกตตัวเลือกที่มีประสิทธิภาพที่สุด [ในคำตอบอื่น](https://crypto.stackexchange.com/a/30228/1172) . ในการสร้างเมล็ดพันธุ์ คุณจะต้องใช้ PBKDF เพื่อจัดเตรียมการยืดที่กล่าวถึงข้างต้น
Matrix avatar
au flag
@fgrieu ถ้าฉันเก็บคีย์ AES ของแต่ละคนที่เข้ารหัสด้วยคีย์สาธารณะของตัวเอง ถ้าใครสามารถถอดรหัสการเข้ารหัสนั้นได้ ข้อความทั้งหมดจะตกไปโดยไม่คำนึงว่าฉันจะใช้คีย์ AES หนึ่งอันสำหรับข้อความหรืออันใหม่สำหรับแต่ละอัน นั่นคือ ปัญหาของฉัน เหตุผลที่ฉันคิดที่จะเก็บคีย์ AES ไว้ในฐานข้อมูลก็เพื่อให้ผู้ใช้สามารถเข้าถึงข้อความบนอุปกรณ์ใหม่ได้อย่างง่ายดาย เพียงแค่นำเข้าระบบช่วยจำของพวกเขา นอกจากนี้ สำหรับการช่วยจำ ฉันใช้ bip39 ดังนั้นผู้ใช้จึงไม่สร้างการช่วยจำ
crypt avatar
cn flag
คุณสามารถใช้อัลกอริทึม rachet คู่โดย Signal เพื่อให้การเข้ารหัสตั้งแต่ต้นจนจบ การใช้งาน Java ของโปรโตคอล Signal อยู่ที่ https://github.com/signalapp/libsignal-protocol-java

โพสต์คำตอบ

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