Score:0

ฉันจะระบุค่ากลุ่ม ECDHE ที่ใช้ในเซสชัน TLS ได้อย่างไร

ธง us

ใน ECDHE กลุ่มเป็นค่าสาธารณะ ฉันต้องการรับค่านี้สำหรับเซสชัน ฉันตรวจสอบเซสชันโดยใช้ Wireshark ภายใต้ ServerHello -> ส่วนขยายการแชร์คีย์ -> รายการแชร์คีย์ ฉันพบพารามิเตอร์เหล่านี้:

รายการแบ่งปันคีย์: กลุ่ม: x25519, ความยาวของการแลกเปลี่ยนคีย์: 32
กลุ่ม: x25519 (29)
ความยาวการแลกเปลี่ยนคีย์: 32
การแลกเปลี่ยนคีย์: 22d9....88e....635... (ความยาวเต็มคืออักขระฐานสิบหก 64 ตัว, 256 บิต)

คุณช่วยอธิบายเพิ่มเติมได้ไหม ค่า Key Exchange Length เป็น 32 ได้อย่างไร แต่เป็น 256 บิตและ 64 hex char

kelalaka avatar
in flag
มันคือ 32 ไบต์และนั่นคือ 64 ถ่านฐานสิบหก คำถามเกี่ยวกับเครื่องมืออยู่นอกหัวข้อที่นี่
randomname avatar
us flag
@kelalaka ขอบคุณ! โพสต์ไม่เกี่ยวกับเครื่องมือ แต่เป็นค่าใดจากผลลัพธ์ของเครื่องมือที่โพสต์
kelalaka avatar
in flag
@knaccc นี่คือสัญกรณ์ ECC; ควรเป็น $x([a]G)$ มันคือ $x22519(a,9)$ ในสัญกรณ์ RFC ที่รัน Montgomery Ladder และส่งกลับเฉพาะพิกัดแรกเท่านั้น ฉันไม่แน่ใจว่า Wireshark เห็นสิ่งนี้อย่างไร แต่ดูเหมือนว่าพวกเขาจะข้ามการเข้ารหัสจุดฐาน ดู [rfc7748 6.1](https://datatracker.ietf.org/doc/html/rfc7748#section-6.1) และส่วนที่ 5 คุณคิดว่าคำถามนี้ตอบได้จริงหรือ TLS 1.3 บอกว่าเชื่อฟัง rfc7748 โดยที่การเข้ารหัส $9$ เป็น 32 ไบต์เช่นกัน
Maarten Bodewes avatar
in flag
ใช่ คีย์สาธารณะจะถูกบีบอัดสำหรับ x25519 นี้ในรูปแบบดิบเสมอ (เป็นเพียงจำนวนเต็มเอนเดียนขนาดใหญ่ที่มีขนาดคงที่) ขนาดคือ 256 บิต (สัญลักษณ์การเข้ารหัสลับ), 32 ไบต์ (ในโปรโตคอล) หรือ - สำหรับการใช้งานของมนุษย์เท่านั้น - อักขระฐานสิบหก 64 ตัว
Score:2
ธง es

การจับมือ TLS 1.3 ทำงานดังนี้:

ลูกค้าจะส่งโครงสร้างข้อมูล "ClientHello" ไปยังเซิร์ฟเวอร์ ในขั้นตอนนี้ ไคลเอนต์ยังไม่ทราบว่า "กลุ่ม" ใดที่เซิร์ฟเวอร์รองรับ เพื่อหลีกเลี่ยงการเดินทางไป-กลับเพิ่มเติมไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์อาจมี "องค์ประกอบกลุ่ม" สำหรับกลุ่มที่ต้องการใช้ ในกรณีที่ถามถึง องค์ประกอบกลุ่มคือคีย์สาธารณะขนาด 32 ไบต์สำหรับใช้กับ "กลุ่ม 29" (29 == hex 0x1d) ซึ่งเป็นตัวระบุ TLS สำหรับสิ่งที่เรียกกันทั่วไปว่า X25519 รายการหมายเลขสำหรับกลุ่มที่รองรับ TLS ทั้งหมดอยู่ที่นี่: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml

X25519 หมายถึงการแลกเปลี่ยน Diffie-Hellman โดยใช้จุดฐาน G ที่รู้จักกันดีบนเส้นโค้งวงรี Curve25519 ซึ่งองค์ประกอบของกลุ่มอยู่ในกลุ่มย่อยของวัฏจักรขนาดใหญ่ที่มี G ภายในเส้นโค้งนี้ ไม่จำเป็นต้องส่งจุด G เนื่องจากถูกกำหนดให้เป็นส่วนหนึ่งของ มาตรฐาน X25519 และเหมือนกันสำหรับการเรียกใช้ X25519 ทั้งหมด

คีย์สาธารณะชั่วคราวของลูกค้าคือ "องค์ประกอบกลุ่ม" ซึ่งถูกส่งโดยคาดเดา สำหรับ X25519 จะมีความยาว 32 ไบต์ (อักขระฐานสิบหก 64 ตัว หรือ 256 บิต) องค์ประกอบกลุ่มนี้แสดงเป็นค่า "การแลกเปลี่ยนคีย์" ในส่วน "การแบ่งคีย์" ของโครงสร้างข้อมูล ClientHello

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

ด้วยข้อมูลนี้ ทั้งไคลเอนต์และเซิร์ฟเวอร์จะสามารถคำนวณความลับที่ใช้ร่วมกันเดียวกันซึ่งเรียกว่า "ความลับเบื้องต้น" จากนั้นจะรวมกับข้อมูล ClientHello และ ServerHello เพื่อรับคีย์การเข้ารหัสแบบสมมาตร (ดู https://datatracker.ietf.org/doc/html/rfc8446#section-7.1). สิ่งเหล่านี้ช่วยให้เซิร์ฟเวอร์และไคลเอ็นต์สื่อสารกันได้อย่างปลอดภัยโดยใช้การเข้ารหัสที่รับรองความถูกต้อง เช่น AES-GCM

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

TLS 1.0-1.2 จัดการ ECDHE แตกต่างกัน -- หากเป็นเช่นนั้น เนื่องจากมีตัวเลือกให้เลือก ในโปรโตคอลเหล่านั้น ชุดการเข้ารหัสจะระบุการแลกเปลี่ยนคีย์และการรับรองความถูกต้อง ตลอดจนการเข้ารหัสข้อมูลและแฮชสำหรับ HMAC (หากไม่ใช่ AEAD) และ PRF (หากเป็น 1.2) ไคลเอนต์ส่งรายการรหัสลับ ClientHello ที่รองรับ บางส่วน บางส่วน หรือทั้งหมดอาจใช้ ECDHE ร่วมกับการรับรองความถูกต้อง RSA หรือ ECDSA (เช่น ใบรับรอง) และ ส่วนขยายกลุ่มที่รองรับ (หรือเส้นโค้งที่รองรับก่อน RFC7919) ระบุเส้นโค้งที่รองรับ หากเซิร์ฟเวอร์ตกลงกับชุดรหัส ECDHE ที่เสนอและเส้นโค้งที่เสนอ เซิร์ฟเวอร์จะส่ง ServerHello ที่ระบุชุดการเข้ารหัส จากนั้นจึงเชนใบรับรอง จากนั้น ServerKeyExchange ที่มีรหัสโค้งและรหัสสาธารณะชั่วคราวไคลเอนต์ (หากยอมรับใบรับรอง) ส่ง ClientKeyExchange ที่มีคีย์สาธารณะชั่วคราว หลังจากนั้นการคำนวณความลับที่ใช้ร่วมกันจะดำเนินการในทำนองเดียวกัน แม้ว่ารายละเอียดของวิธีรับคีย์การทำงานจะแตกต่างจาก 1.3 และระหว่าง 1.2 และก่อนหน้าด้วย

kelalaka avatar
in flag
นี่คือสัญกรณ์ ECC; ควรเป็น $x([a]G)$ มันคือ $x22519(a,9)$ ในสัญกรณ์ RFC ที่รัน Montgomery Ladder และส่งกลับเฉพาะพิกัดแรกเท่านั้น ฉันไม่แน่ใจว่า Wireshark เห็นสิ่งนี้อย่างไร แต่ดูเหมือนว่าพวกเขาจะข้ามการเข้ารหัสจุดฐาน ดู [rfc7748 6.1](https://datatracker.ietf.org/doc/html/rfc7748#section-6.1) และส่วนที่ 5 คุณคิดว่าคำถามนี้ตอบได้จริงหรือ TLS 1.3 บอกว่าเชื่อฟัง rfc7748 โดยที่การเข้ารหัส $9$ เป็น 32 ไบต์เช่นกัน
knaccc avatar
es flag
@kelalaka ฐานสิบหก "การแลกเปลี่ยนคีย์" ใน ServerHello คือคีย์สาธารณะของเซิร์ฟเวอร์ ซึ่งเป็นจุดฐาน (พิกัด x ของ 9) สเกลาร์คูณด้วยคีย์ส่วนตัวของเซิร์ฟเวอร์ หรือ X25519(server_private_key, 9) ในรูปแบบ rfc7748ไม่แน่ใจว่าคุณหมายถึงอะไรโดย "ข้ามการเข้ารหัสจุดฐาน" - ไม่จำเป็นต้องส่งจุดฐาน 9 เนื่องจากเป็นที่ทราบกันดีว่าเป็นส่วนหนึ่งของข้อมูลจำเพาะ X25519
kelalaka avatar
in flag
ดังที่ฉันได้กล่าวไว้ภายใต้คำถามเกี่ยวกับการแมปมาตรฐานกับ WireShark ซึ่งไม่ให้ข้อมูลเกี่ยวกับจุดฐานที่เข้ารหัส $9$ ทำไมพวกเขาแสดงเช่นนี้ขึ้นอยู่กับทางเลือกของนักออกแบบ
knaccc avatar
es flag
@kelalaka ฉันคิดว่าเราตีความคำถามแตกต่างกัน ฉันคิดว่าปัญหาคือผู้โพสต์สับสนเกี่ยวกับความหมายของ "กลุ่ม" โดยเฉพาะอย่างยิ่งเนื่องจาก group อาจหมายถึง "กลุ่ม 29" อาจหมายถึงองค์ประกอบกลุ่มที่เป็นคีย์สาธารณะของเซิร์ฟเวอร์ หรืออาจหมายถึงกลุ่มของจุดฐาน ดังนั้นวิธีการของฉันคือการอธิบายคำศัพท์ทั้งหมด
Score:0
ธง vu

กลุ่มที่ใช้ในการแลกเปลี่ยนคีย์ X25519 ซึ่งใช้ Curve25519 ของ DJB (Daniel J. Bernstein)

มีชุดมาตรฐานทางการค้าที่เรียกว่า SEC#* (Standard for Efficient Cryptography) ซึ่งระบุการเข้ารหัสแบบเส้นโค้งวงรี คีย์สาธารณะ (จุด) ในมาตรฐานเหล่านี้มีความยาว 2x+1 (พิกัด x-y ที่ไม่บีบอัดพร้อมไบต์ส่วนหัว) หรือ x+1 (พิกัด x ที่บีบอัดด้วยไบต์ส่วนหัว)

นอกจากนี้ยังมี DJB และทีมงานของเขา ความพยายามในการสร้างเส้นโค้งที่มีประสิทธิภาพและไร้ช่องทางด้านข้างในขณะนี้ รู้จักกันในนาม X25519 (สำหรับการแลกเปลี่ยนคีย์) และ Ed25519 (สำหรับลายเซ็นดิจิทัล) คีย์สาธารณะเป็นจุดเช่นกัน แต่ถูกกำหนดโดยตรงในแง่ของการเข้ารหัสไบต์ของพิกัดใน 1 มิติ ดังนั้นจึงไม่จำเป็นต้องมีไบต์ส่วนหัว

เครื่องมือของคุณระบุว่าเป็น x25519 ซึ่งสร้างโดย DJB

คุณอาจสนใจที่จะรู้ว่า มีมาตรฐานอีกชุดหนึ่งที่เรียกว่า PKCS#* (มาตรฐานการเข้ารหัสคีย์สาธารณะ) ชุดแรกในซีรี่ส์ระบุการเข้ารหัส RSA ที่ใช้ในอินเทอร์เน็ต (มีมาตรฐาน RSA อื่นๆ ที่ใช้ที่อื่น) .

kelalaka avatar
in flag
X25519 ไม่ได้ใช้พิกัด $y$

โพสต์คำตอบ

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