Score:1

ความลับที่ใช้ร่วมกันของ ECDH แสดงใน SoftHSM อย่างไร

ธง ve

ฉันกำลังดำเนินการนำ ECDH ไปใช้กับ HSM บางส่วน ตามทฤษฎีที่อยู่เบื้องหลัง ECDH ความลับร่วมที่สร้างขึ้นคือจุดบนเส้นโค้งวงรี (x, y) ซึ่งเป็นสิ่งที่ HSM ส่งคืนทุกประการ

แต่เมื่อฉันทดสอบกับ SoftHSM ผ่านไลบรารี PKCS#11 ฟังก์ชัน ECDH จะส่งคืนคีย์สมมาตรโดยตรงแม้ว่าจะตั้งค่าพารามิเตอร์ KDF เป็น null ก็ตาม ฉันทำการค้นคว้าและพบว่าบางไบต์ของความลับที่ใช้ร่วมกันส่งคืนเป็นค่าของคีย์สมมาตร: https://github.com/google/boringssl/blob/master/include/openssl/ecdh.h#L82

อย่างไรก็ตาม ฉันสับสนว่าการดำเนินการดังกล่าวสามารถดำเนินการกับความลับที่ใช้ร่วมกันได้อย่างไร หากแสดงในรูปแบบของจุด EC (x, y)

ไม่มีใครรู้ว่า SoftHSM จัดการ ECDH ด้วยพารามิเตอร์ KDF เป็นโมฆะได้อย่างไร โดยเฉพาะอย่างยิ่ง ความลับที่ใช้ร่วมกันในรูปแบบใดหลังจากถูกสร้างขึ้นใน SoftHSM แต่ก่อนที่จะถูกประมวลผลและใส่ในออบเจกต์คีย์

ขอบคุณ

Maarten Bodewes avatar
in flag
โดยปกติแล้ว พิกัด X, Y จะถูกเข้ารหัสเป็นค่าที่ไม่ได้ลงนาม ขนาดคงที่ ค่าจำนวนเต็มขนาดใหญ่ แล้วนำมาต่อกัน ไบต์จะถูกนำมาจากด้านซ้ายมือ ถ้าฉันต้องเดานั่นน่าจะเป็นสิ่งที่ห้องสมุดทำ แต่เพื่อให้แน่ใจว่าคุณต้องดูซอร์สโค้ด *หรือ* ทดสอบกับไลบรารี / คู่คีย์อื่น
cn flag
การใช้งาน ECDH จำนวนมากจะคำนวณเพียงพิกัดเดียวของความลับที่ใช้ร่วมกัน
kelalaka avatar
in flag
https://github.com/opendnssec/SoftHSMv2
Maarten Bodewes avatar
in flag
@CodesInChaos เฮ้ ดีใจที่คุณยังอยู่ที่นี่! ใช่ ฉันสงสัยว่าฉันควรจะบอกว่านั่นเป็นอีกทางเลือกหนึ่งที่ใช้เฉพาะพิกัด X เท่านั้น แต่เดี๋ยวก่อน เมื่อมาจากด้านซ้าย หวังว่าจะไม่สร้างความแตกต่างมากนัก (แน่นอนว่าด้านหนึ่งอาจใช้แค่ X สำหรับการได้มาของคีย์ และอีกด้านใช้ X และ Y)
Fan Zhang avatar
ve flag
ขอบคุณ @MaartenBodewes สำหรับการตอบกลับฉันได้ตรวจสอบโค้ดของ SoftHSM แล้ว และมันก็ค่อนข้างจะทำในสิ่งที่คุณพูด โดยใช้เวลาส่วนหนึ่งจากความลับที่สร้างขึ้น แต่ฉันสับสนว่าความลับที่สร้างขึ้นนั้นเปลี่ยนจากจุด EC เป็นไบต์ได้อย่างไร x และ y แปลงเป็นไบต์และต่อกันหรือมีวิธีการเฉพาะหรือไม่ ตัวอย่างเช่น ECPublicKey มีรูปแบบเหมือนแท็ก + x + y ขอบคุณ!
Fan Zhang avatar
ve flag
ขอบคุณ @CodesInChaos สำหรับการตอบกลับ If I have a generated secret as (64830192060261760049283727294808668110354933976341491567578109548061246609139, 59423428101938593951845145007294894818095890801518227616691263742277914054172) and want an AES128 key, you mean most implementations take the x coordinate and convert it into a byte array and then extract the first 128 bits of it? ขอบคุณ
Maarten Bodewes avatar
in flag
ตามที่ระบุไว้ในความคิดเห็นแรก โดยปกติจะไม่แปลงเป็นการเข้ารหัส DER แต่คงไว้เป็นจำนวนเต็มแบบคงที่ เป็นเรื่องแปลกที่จะเข้ารหัสจุดด้วยไบต์ข้อมูลปลอม เนื่องจากคุณไม่ต้องการให้แท็กและการเข้ารหัสความยาวเป็นส่วนหนึ่งของคีย์สมมาตร คุณต้องการข้อมูลแบบสุ่มเป็นส่วนใหญ่ KDF จะช่วยได้อย่างแน่นอน โปรดทราบว่าพิกัด Y สามารถคำนวณได้จากพิกัด X ดังนั้นจึงไม่มีเหตุผลที่จะรวมไว้ในคีย์หรือในเนื้อหาคีย์อินพุตของ KDF นี่คือสาเหตุที่การใช้งานจำนวนมากใช้เฉพาะ X แทนที่จะเป็น X และ Y

โพสต์คำตอบ

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