Score:0

การสร้างคีย์ส่วนตัวตามรายการของชุดเข้ารหัสที่มีอยู่

ธง my

ฉันกำลังสร้างเครือข่ายที่ใช้ MQTT ของตัวเอง ซึ่งฉันจะสร้างเอง ca/เซิร์ฟเวอร์/ไคลเอนต์ ใบรับรองสำหรับการรับรองความถูกต้อง

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

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

ตัวอย่างเช่น นี่คือรายการชุดการเข้ารหัสที่อนุญาตซึ่งไคลเอนต์สามารถใช้ได้:

ซิเฟอร์สวีท รหัส
TLS-PSK-ด้วย-AES-128-CBC-SHA256 00เอ
TLS-PSK-ด้วย-AES-256-CBC-SHA384 00 อ
TLS-PSK-ด้วย-AES-128-CBC-SHA 008ค
TLS-PSK-ด้วย-AES-256-CBC-SHA 008d
TLS-PSK-ด้วย-3DES-EDE-CBC-SHA 008b
TLS-RSA-WITH-AES-128-CBC-SHA256 003ค
TLS-RSA-WITH-AES-256-CBC-SHA256 003d
TLS-RSA-WITH-AES-128-CBC-SHA 002ฉ
TLS-RSA-WITH-AES-256-CBC-SHA 0035
TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA c013
TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA c014
TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256 c027
TLS-ECDHE-RSA-ด้วย-AES-256-CBC-SHA384 c028

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

ตอนนี้ฉันมีคำถามสองสามข้อคือ:

  • จากรายการ ciphersuite สามารถคีย์ส่วนตัวใด ๆ (CA, Server หรือไคลเอนต์) เป็น EC หรือทั้งหมดต้องเป็น RSA?

  • ฉันควรเก็บแพ็คเกจ MQTT แต่ละแพ็คเกจที่ห่อด้วย TLS ให้เล็กที่สุดเท่าที่จะเป็นไปได้หรือเป็นสิ่งที่จะถูกเสริม ด้วยไบต์เพิ่มเติม? (เช่น จะสร้างความแตกต่างหรือไม่หากแพ็คเกจของฉัน มีขนาดเล็กถึง 5 ไบต์หรือฉันสามารถเขียนแพ็คเกจที่มีขนาด 25 ไบต์ได้อย่างอิสระ ยาว)

  • มีอะไรอีกบ้างที่ฉันควรคำนึงถึงหากต้องการลดแบนด์วิธทราฟฟิก

  • ชุดการเข้ารหัส ECDHE-RSA ทำให้ฉันปวดหัว พวกเขาใช้ EC สำหรับการแลกเปลี่ยนคีย์ แต่ RSA สำหรับ PKI ? นี่หมายความว่าเซิร์ฟเวอร์สามารถมีรหัสส่วนตัวของ EC

dave_thompson_085 avatar
cn flag
เพื่อให้ชัดเจนสำหรับชุดใดๆ ที่ไม่ใช่ PSK คุณต้องส่งใบรับรองเซิร์ฟเวอร์ไปยังไคลเอนต์ และสำหรับ ECDHE-RSA จะต้องมีลายเซ็นด้วย การตรวจสอบสิทธิ์ไคลเอ็นต์เป็นทางเลือก แต่ถ้าใช้ คุณต้องส่งลายเซ็นใบรับรองไคลเอ็นต์ _and_ ไปยังเซิร์ฟเวอร์ด้วย สร้างใบรับรองของคุณเองด้วยเนื้อหาขั้นต่ำ สำหรับ RSA 2048 บิต คุณจะได้รับแต่ละรายการประมาณ 700-800 ไบต์ ยกเว้น 1.3 ซึ่งชุดของคุณไม่ใช่ การจับมือมาตรฐานที่เหลือรวมถึงลายเซ็นรับรองความถูกต้องของลูกค้าอาจมีขนาดมากกว่า 700-1,000 ไบต์ คุณสามารถทำดาต้าได้มากมาย (เท่าที่อุปกรณ์อย่างคุณทำได้) ด้วยการจับมือกันเพียงครั้งเดียว
Score:1
ธง in

จากรายการ ciphersuite คีย์ส่วนตัวใด ๆ (CA, เซิร์ฟเวอร์หรือไคลเอนต์) สามารถเป็นแบบ EC หรือทั้งหมดต้องเป็น RSA?

ไม่ใช่แค่ RSA หรือความลับแบบสมมาตรที่แชร์ไว้ล่วงหน้าสำหรับ TLS-PSK แน่นอน

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

ฉันควรเก็บแพ็คเกจ MQTT แต่ละแพ็คเกจที่ห่อด้วย TLS ให้เล็กที่สุดเท่าที่จะเป็นไปได้หรือเป็นสิ่งที่จะเสริมด้วยไบต์เพิ่มเติม (เช่น.มันจะสร้างความแตกต่างหรือไม่หากแพ็คเกจของฉันมีขนาดเล็กถึง 5 ไบต์หรือฉันสามารถเขียนแพ็คเกจที่มีความยาว 25 ไบต์ได้อย่างอิสระ)

AES จะเข้ารหัสเป็นทวีคูณของ 16 ไบต์ 3DES เป็นทวีคูณของ 8 3DES ยังคงปลอดภัยพอสมควร แต่ก็ไม่ควรใช้อีกต่อไป โชคดีที่ TLS ใช้ 3DES 3 คีย์ ดังนั้นจึงเป็นเช่นนั้น

ชุดการเข้ารหัส ECDHE-RSA ทำให้ฉันปวดหัว พวกเขาใช้ EC สำหรับการแลกเปลี่ยนคีย์ แต่ RSA สำหรับ PKI ? นี่หมายความว่าเซิร์ฟเวอร์สามารถมีรหัสส่วนตัวของ EC

ถูกต้อง แต่ E ใน ECDHE หมายถึง Ephemeral-ephemeral Diffie-Hellman ทั้งไคลเอ็นต์และเซิร์ฟเวอร์จะสร้างคู่คีย์ใหม่สำหรับการเชื่อมต่อแต่ละครั้ง การสร้างคู่คีย์สำหรับ EC นั้นเร็วพอๆ กับการทำข้อตกลงคีย์ DH แม้ว่าจะเร็วกว่าการสร้างคู่คีย์ RSA มาก

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

dave_thompson_085 avatar
cn flag
นอกเหนือจากการเติมเพื่อปิดกั้นขอบเขตสำหรับการเข้ารหัสแล้ว ชุดโปรแกรมในรายการจะเพิ่มอย่างน้อย 20 ไบต์ (ประมาณ 24 หรือ 32 ไบต์) สำหรับ HMAC และทั้งหมดเพิ่มส่วนหัวเป็น 5 ไบต์ (หรือ 13 สำหรับ DTLS แต่ _removes_ TCP นั้นชดเชยมากกว่า)
my flag
อย่างไรก็ตาม MQTT ไม่ได้ใช้ DTLS? เฉพาะ TLS บน TCP ใช่ไหม

โพสต์คำตอบ

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