Score:1

โดยทั่วไป แพลตฟอร์มการส่งข้อความ e2e จัดการกับการเปลี่ยนแปลงโครงสร้างของข้อมูลที่เข้ารหัสอย่างไร

ธง tz

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

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

ตอนนี้ฉันเผชิญกับความท้าทายต่อไปนี้: ฉันต้องการเปลี่ยนชื่อคุณสมบัติของรูปแบบข้อความที่ใช้โดยแอปพลิเคชันไคลเอนต์ (คิดว่า JSON: message.body â message.content) ปัญหาตอนนี้คือ (1) ข้อความก่อนหน้านี้ทั้งหมดถูกจัดเก็บไว้บนเซิร์ฟเวอร์ในรูปแบบเก่า และ (2) ไคลเอ็นต์ "เก่า" อาจพยายามส่งข้อความถึงไคลเอ็นต์ "ใหม่" ซึ่งบังคับให้ฉันต้องแก้ไขความไม่ตรงกันระหว่าง รูปแบบข้อความที่สื่อสาร

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

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

ฉันขออภัยหากคำถามนี้ฟังดูคลุมเครือหรือกว้างเกินไป ฉันเป็นแค่ noob ที่พยายามจะเข้าใจภาพรวม

ขอบคุณมาก.

Maarten Bodewes avatar
in flag
การแยกวิเคราะห์หรือการถอดรหัสไม่ได้แตกต่างกันทั้งหมด: ทั้งคู่ต้องการรหัสเฉพาะ โดยทั่วไปจะแก้ไขได้โดยการใส่หมายเลขเวอร์ชันในส่วนข้อความธรรมดาของข้อความ (และควรรวมไว้ในการคำนวณลายเซ็นและ/หรือข้อมูล AAD ของรหัสลับที่รับรองความถูกต้อง) หากคุณไม่มีหมายเลขเวอร์ชันในตอนนี้ คุณจำเป็นต้องใส่รหัสนี้ ลองดูที่โปรโตคอลความปลอดภัยการขนส่ง E2E อื่นๆ โดยทั่วไปจะมีหมายเลขเวอร์ชันดังกล่าว
kr flag
คำถามนี้อยู่นอกหัวข้อเกี่ยวกับ Crypto SE คำถามนี้เกี่ยวกับการออกแบบซอฟต์แวร์ที่รองรับ API หลายเวอร์ชัน ควรย้ายไปยัง SO หรือ Software Engineering SE
Score:3
ธง ng

นี่เป็นปัญหาด้านไอทีทั่วไปของความเข้ากันได้แบบย้อนหลัง ซึ่งทำได้ยากขึ้นโดยการเข้ารหัสลับ

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

เมื่อวิธีการเข้ารหัส/รับรองความถูกต้องไม่เปลี่ยนแปลง ก็จะไม่มีปัญหาเฉพาะการเข้ารหัสลับ และกลไกปกติในการจัดการกับโครงสร้างข้อมูลที่สมบูรณ์ยิ่งขึ้นโดยไม่มีการหยุดความเข้ากันได้ (เช่นใน JSON คุณสามารถเพิ่มฟิลด์ใหม่ที่แอปพลิเคชันเก่าจะข้ามไปได้) ต่อไปนี้ ฉันคิดว่า crypto มีการเปลี่ยนแปลง และฟิลด์เวอร์ชันอนุญาตให้ตรวจจับสิ่งนั้นได้

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

หากไคลเอนต์ใหม่ยังคงสามารถถอดรหัสรูปแบบเก่าได้ ก็ไม่ใช่ปัญหา นั่นคือวิธีที่จะไป!

ปัญหาที่ยากจริงๆ คือเมื่อไคลเอนต์ "ใหม่" ส่งข้อความ มีตัวเลือกมากมายซึ่งไม่มีตัวเลือกใดที่สมบูรณ์แบบ บางส่วนของเหล่านี้:

  • ลูกค้าใหม่ใช้รูปแบบใหม่เสมอ ซึ่งลูกค้าเก่าจะไม่เข้าใจ
  • ไคลเอ็นต์ใหม่ใช้รูปแบบเก่าจนกว่าจะมีทริกเกอร์ (เปลี่ยนวันที่ ข้อความจากเซิร์ฟเวอร์) จากนั้นจึงใช้รูปแบบใหม่ ไคลเอนต์เก่าจะไม่สามารถใช้งานได้หลังจากเปลี่ยน และไคลเอนต์ใหม่จะใช้งานฟีเจอร์ใหม่ของรูปแบบใหม่ไม่ได้จนกว่าจะถึงเวลานั้น
  • ลูกค้าใหม่ใช้รูปแบบใหม่หลังจากทริกเกอร์หรือหากมีเงื่อนงำบางอย่างที่ผู้รับ (หรือผู้รับทั้งหมด) เข้าใจ เช่น เนื่องจากไคลเอนต์ที่ส่งได้รับข้อความที่รับรองความถูกต้องจาก (ทั้งหมด) ผู้รับที่ระบุถึงการสนับสนุนรูปแบบใหม่ ซึ่งอาจโดยปริยายจากการใช้งาน
  • ไคลเอนต์ใหม่สร้างทั้งสองรูปแบบจนกระทั่งทริกเกอร์และส่งทั้งสองไปยังเซิร์ฟเวอร์ซึ่งจัดเก็บไว้ ลูกค้าเก่าดึงรูปแบบเก่า ลูกค้าใหม่ดึงข้อมูลใหม่ และในกรณีที่ล้มเหลวในการดึงรูปแบบเก่า เซิร์ฟเวอร์ต้องจัดการคำขอในทั้งสองรูปแบบ และต้องการพื้นที่จัดเก็บและการรับส่งข้อมูลเพิ่มขึ้นในช่วงเวลาระหว่างกาล
korolev avatar
tz flag
คำตอบที่ชัดเจนมาก ขอบคุณมาก.

โพสต์คำตอบ

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