Score:1

ใน TLS 1.3 อะไรคือเหตุผลสำหรับการใช้บันทึกการจับมือที่แตกต่างกันสำหรับ Resumption Master Secret และ Application Traffic Secrets

ธง in

TLS 1.3 RFC หัวข้อ 7.1 แสดงรายการนี้เป็นส่วนสุดท้ายของกำหนดการสำคัญ:

https://datatracker.ietf.org/doc/html/rfc8446#section-7.1

            ...
   0 -> HKDF-Extract = ความลับหลัก
             |
             +-----> ได้รับความลับ (., "c ap การจราจร",
             | ClientHello...เซิฟเวอร์เสร็จสิ้น)
             | = client_application_traffic_secret_0
             |
             +-----> Derive-Secret(., "s ap การจราจร",
             | ClientHello...เซิฟเวอร์เสร็จสิ้น)
             | = server_application_traffic_secret_0
             |
             +-----> ได้รับความลับ (., "exp master",
             | ClientHello...เซิฟเวอร์เสร็จสิ้น)
             | = ผู้ส่งออก_master_secret
             |
             +-----> ได้รับความลับ (., "res master",
                                   ลูกค้าสวัสดี...ลูกค้าเสร็จแล้ว)
                                   = resumption_master_secret

การคำนวณสามรายการแรกใช้เวลา มาสเตอร์ซีเคร็ทรวมกับป้ายกำกับ S "c ap การจราจร" / "s ap การจราจร" / "มาสเตอร์ประสบการณ์" (ตามลำดับ) และก แฮชบันทึกการจับมือกันของ ลูกค้า สวัสดี ผ่าน เซิร์ฟเวอร์เสร็จสิ้น. ผลลัพธ์ของแต่ละสิ่งเหล่านี้คือสามคีย์: client_application_traffic_secret_0, server_application_traffic_secret_0, ผู้ส่งออก_master_secret.

การคำนวณครั้งสุดท้ายใช้เวลา มาสเตอร์ซีเคร็ทรวมกับป้ายกำกับ "มาสเตอร์เรส"และ ก แฮชบันทึกการจับมือกันของ ลูกค้า สวัสดี ผ่าน ลูกค้าเสร็จแล้ว. ผลลัพธ์ที่ได้คือ resumption_master_secret.

คำถามของฉัน:

อะไรคือเหตุผลที่อยู่เบื้องหลังการใช้ Client Hello ผ่าน Client Finish แทน Client Hello ผ่าน Server Finish เมื่อคำนวณ Resumption Master Secret

Score:1
ธง gb

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

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

เท่าที่ฉันทราบ ข้อมูลจำเพาะไม่ได้ปรับให้เข้ากับการตัดสินใจในการออกแบบทั้งหมด แต่โดยส่วนตัวแล้วฉันคิดว่าสิ่งนี้สมเหตุสมผล เนื่องจาก (ดังที่คุณเห็นในโปรโตคอลการจับมือกันด้านล่าง) การมี ClientHello...ClientFinished เกี่ยวข้องกับการจับมือทั้งหมด

       ไคลเอ็นต์เซิร์ฟเวอร์

คีย์ ^ ClientHello
แลกเปลี่ยน | + คีย์_แชร์*
     | + ลายเซ็น_อัลกอริทึม*
     | + psk_key_exchange_modes*
     v + pre_shared_key* -------->
                                                  ServerHello ^ คีย์
                                                 + key_share* | แลกเปลี่ยน
                                            + pre_shared_key* v
                                        {EncryptedExtensions} ^ เซิร์ฟเวอร์
                                        {CertificateRequest*} กับ Params
                                               {ใบรับรอง*}
                                         {CertificateVerify*} | รับรองความถูกต้อง
                                                   {เสร็จสิ้น} v
                               <-------- [ข้อมูลการสมัคร*]
     ^ {ใบรับรอง*}
รับรองความถูกต้อง | {ใบรับรองตรวจสอบ*}
     v {เสร็จสิ้น} -------->
       [ข้อมูลแอปพลิเคชัน] <------> [ข้อมูลแอปพลิเคชัน]
```
Eddie avatar
in flag
ขอบคุณสำหรับคำตอบ. มันสมเหตุสมผลดีว่าทำไมต้องรวม "ทั้งสองฝ่าย" ของการจับมือด้วยแต่ฉันเดาว่าข้อกังวลหลักของฉันคือเหตุใดจึงไม่รวมเซิร์ฟเวอร์ที่เสร็จสิ้นแล้วในการคำนวณคีย์การเริ่มต้นใหม่ด้วย เหตุใดคีย์สามคีย์ก่อนหน้านี้จึงรวมเซิร์ฟเวอร์ที่เสร็จสิ้นแล้ว แต่คีย์การเริ่มต้นใหม่รวมเฉพาะไคลเอ็นต์ที่เสร็จสิ้นแล้วเท่านั้น เหตุใดจึงทำให้คีย์ *นั้น* แตกต่างจากคีย์ก่อนหน้า
Eddie avatar
in flag
เอ่อ เดี๋ยวก่อน... ในการตอบกลับคุณ ฉันคิดว่าตอนนี้ฉันเข้าใจคำตอบของคุณดีขึ้นแล้วเซิร์ฟเวอร์เสร็จสิ้นคือการจับมือกันอย่างสมบูรณ์ในเวลาที่เซิร์ฟเวอร์หมายถึงการเริ่มใช้คีย์การรับส่งข้อมูลของแอปพลิเคชัน C/S แต่ในขณะนั้น เซิร์ฟเวอร์ไม่มีประโยชน์ที่จะมีคีย์การเริ่มต้นใหม่ ดังนั้นจึงพอใจที่จะรอจนกว่าจะมีข้อความถัดไปจากลูกค้าเพื่อคำนวณ ดังนั้นการมีคีย์การเริ่มต้นใหม่จึงมีข้อมูล "เพิ่มเติม" จากการจับมือกันครั้งแรก
Eddie avatar
in flag
ฉันให้เครื่องหมายถูก การดูว่าคีย์ใดเข้าสู่คีย์เมื่อเทียบกับการจับมือกันทำให้เข้าใจได้ว่าทำไมคีย์เริ่มต้นใหม่มีโอกาสที่จะรวมการถอดเสียงการจับมือในการสร้างคีย์มากกว่าคีย์ทราฟฟิกของแอปพลิเคชัน ขอบคุณ Reppiz!

โพสต์คำตอบ

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