Score:0

การแลกเปลี่ยนคีย์อย่างง่าย เซิร์ฟเวอร์เดียว

ธง gn

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

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

  1. ลูกค้าใช้คีย์ RSA สาธารณะของเซิร์ฟเวอร์เพื่อเข้ารหัสคีย์เซสชันสมมาตรแบบสุ่ม
  2. ลูกค้าส่งคีย์เซสชันที่เข้ารหัสของเซิร์ฟเวอร์
  3. เซิร์ฟเวอร์ถอดรหัสคีย์เซสชันโดยใช้คีย์ RSA ส่วนตัวของเซิร์ฟเวอร์
  4. เซิร์ฟเวอร์ใช้คีย์เซสชันเพื่อเข้ารหัสข้อความ "เสร็จสิ้น"
  5. เซิร์ฟเวอร์ส่งข้อความ "เสร็จสิ้น" ที่เข้ารหัสไคลเอนต์
  6. ลูกค้าใช้คีย์เซสชันเพื่อถอดรหัสข้อความ "เสร็จสิ้น"
  7. ลูกค้ายืนยันว่าข้อความ "เสร็จสิ้น" การจับมือกันเสร็จสมบูรณ์

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

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

  1. ฝ่ายตรงข้ามมีคีย์สาธารณะของเซิร์ฟเวอร์อยู่แล้ว สามารถเข้ารหัสคีย์เซสชันแบบสมมาตรของตัวเองเพื่อจุดประสงค์ MITM
  2. ฝ่ายตรงข้ามสามารถเห็นคีย์เซสชันที่เข้ารหัสจากลูกค้า แต่ไม่สามารถถอดรหัสได้ สามารถส่งคีย์เซสชัน MITM ที่เข้ารหัสของตัวเองให้เซิร์ฟเวอร์ได้
  3. เซิร์ฟเวอร์ถอดรหัสคีย์เซสชัน MITM โดยไม่ทราบที่มา
  4. เซิร์ฟเวอร์ใช้คีย์เซสชัน MITM เพื่อเข้ารหัส "เสร็จสิ้น"
  5. เซิร์ฟเวอร์ส่งไคลเอนต์ (ในความเป็นจริงเป็นปฏิปักษ์) เข้ารหัส "เสร็จสิ้น"
  6. ฝ่ายตรงข้ามสามารถถอดรหัส "เสร็จสิ้น" แต่ไม่สามารถเข้ารหัสซ้ำและส่งไปยังไคลเอ็นต์ด้วยคีย์เซสชันของไคลเอนต์ ซึ่งฝ่ายตรงข้ามไม่สามารถถอดรหัสได้
  7. ในที่สุดไคลเอนต์จะไม่ได้รับการเข้ารหัสที่ถูกต้อง "เสร็จสิ้น" ไม่ว่าจะจากเซิร์ฟเวอร์หรือฝ่ายตรงข้าม

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

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

kelalaka avatar
in flag
[ข้ามโพสต์ด้วยความปลอดภัยของข้อมูล](https://security.stackexchange.com/questions/256651/simple-key-exchange-one-server) คุณอาจรู้ว่านี่ไม่ใช่การกระทำที่ดีในเครือข่าย SE
Bondolin avatar
gn flag
@kelalaka ฉันไม่ทราบ แต่หลังจากอ่าน meta QA จากความคิดเห็นอื่นของคุณเกี่ยวกับการโพสต์ IS แล้วมันสมเหตุสมผล ถ้าฉันต้องเลือกระหว่างสองอัน ฉันคงทิ้ง IS อันหนึ่งไว้ เพราะมันดูมีความเกี่ยวข้องมากกว่าเล็กน้อย อย่างไรก็ตาม เมื่อสิ่งนี้มีคำตอบแล้ว การลบทิ้งจะเป็นการทำผิดอีกหรือไม่ หรือใช้ช่วงเวลานี้เป็นบทเรียนและเดินหน้าต่อไป
kelalaka avatar
in flag
ใช่นั่นคือปัญหาเมื่อได้รับคำตอบ บุคคลมีอิสระที่จะลบคำถามของตน อย่างไรก็ตาม ผู้ตอบอาจพบว่าเป็นการกระทำที่หยาบคาย อนุญาติให้ทำอย่างนั้นจะเสียเวลา...คงไว้แต่คราวนี้
Score:1
ธง my

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

อย่างไรก็ตาม คำถามของคุณคือ:

หรือสิ่งนี้จะพ่ายแพ้ได้อย่างไร?

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

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

โพสต์คำตอบ

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