Score:0

การสร้างคู่คีย์ RSA และการจัดเก็บเฉพาะคีย์ส่วนตัว PKCS#11

ธง in

ฉันสังเกตว่า PKCS#11 รองรับ C_สร้างคีย์ ฟังก์ชันสำหรับคีย์สมมาตรและสำหรับอสมมาตรมีเท่านั้น C_สร้างคีย์คู่ การทำงาน. จากนิยามนี้ทำให้เราสร้างได้ทั้งสองอย่างเท่านั้น คู่คีย์ส่วนตัว / คีย์สาธารณะ. จากความเข้าใจของฉัน คีย์ส่วนตัวจะเก็บข้อมูลคีย์สาธารณะ (โมดูลัสและเลขชี้กำลังสาธารณะ) ซึ่งจำเป็นสำหรับการสร้างคีย์สาธารณะ ดังนั้นจึงสามารถดึงข้อมูลได้ทุกครั้งเพื่อสร้างคีย์สาธารณะ

สำหรับการใช้งานของฉัน ฉันต้องการเพียงรหัสส่วนตัวในที่จัดเก็บโทเค็น และไม่ต้องการรหัสสาธารณะจริงๆ จนกว่าจะใช้งานในอนาคต

มีข้อเสียหรือไม่หากฉันเก็บเฉพาะรหัสส่วนตัวและสร้างรหัสสาธารณะทุกครั้งที่ต้องการ

tr flag
ตามที่คุณทราบ เป็นไปได้ว่าส่วนสาธารณะของคีย์จะถูกเก็บไว้พร้อมกับส่วนส่วนตัว ดังนั้นจะไม่มีข้อเสียใด ๆ ในการลบออบเจกต์คีย์สาธารณะ แต่ไม่มีทางที่จะบอกได้อย่างแน่นอนว่าเกิดขึ้นหรือไม่ในการใช้งาน PKCS#11 พื้นฐาน
Maarten Bodewes avatar
in flag
ลองย้อนกลับคำถามนั้น: คุณคาดหวังประโยชน์อะไรจากการจัดเก็บคีย์ส่วนตัว โดยปกติแล้วคีย์ส่วนตัว RSA จะเป็นวัตถุที่มีขนาดใหญ่กว่าคีย์สาธารณะอยู่แล้ว เนื่องจากพารามิเตอร์ CRT ถูกเก็บไว้
simonskof avatar
in flag
ฉันมีโปรแกรมระบบจัดการคีย์ (KMS) และฉันจัดเก็บและใช้คีย์ส่วนตัวบน KMS เท่านั้น ในกรณีของฉันไม่ได้ใช้คีย์สาธารณะและส่งออก (แยกจากคีย์ส่วนตัว) ต่อคำขอเท่านั้น ซึ่งส่วนใหญ่จะเป็นเหตุการณ์ครั้งเดียวหรือเหตุการณ์ที่เกิดขึ้นไม่บ่อย ข้อได้เปรียบของฉันในกรณีนี้คือการจัดการด้วยแฮนเดิลคีย์เพียงอันเดียวและประหยัดพื้นที่จัดเก็บโทเค็น
Score:1
ธง tr

แนวทางของคุณใช้ได้กับ RSA เท่านั้น และเฉพาะเมื่อคุณใช้คีย์ที่สร้างขึ้นตาม PKCS#11 เวอร์ชัน >= 2.40 มาตรฐาน PKCS#11 กำหนด (ส่วน 2.1.3 "อ็อบเจ็กต์คีย์ส่วนตัว RSA" ในข้อกำหนดพื้นฐาน 3.0): "มีผลบังคับใช้กับเวอร์ชัน 2.40 โทเค็นต้องเก็บ CKA_PUBLIC_EXPONENT ด้วย"

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

ขึ้นอยู่กับโทเค็น คุณอาจใช้วัตถุคีย์ส่วนตัวแทนคีย์สาธารณะสำหรับการดำเนินการ เช่น C_Encrypt* หรือ C_Verify* เนื่องจากโทเค็นจะใช้แอตทริบิวต์สาธารณะเท่านั้น

สำหรับคีย์อสมมาตรอื่นๆ เช่น คีย์ EC ไม่มีคำจำกัดความที่คล้ายกับคีย์สำหรับ RSA ในมาตรฐาน PKCS#11 ดังนั้นจะไม่มีการจัดเก็บส่วนสาธารณะ จะขึ้นอยู่กับโทเค็นหากมีการคำนวณคีย์สาธารณะในทันที (ยืนยันความคิดเห็นของ Conrado) สิ่งนี้มีผลกระทบต่อประสิทธิภาพที่สูงขึ้นอย่างแน่นอน หากโทเค็นไม่ได้ทำโดยอัตโนมัติ จะไม่มีวิธีการเรียกใช้การคำนวณคีย์สาธารณะจากคีย์ส่วนตัวจาก PKCS#11และแน่นอนว่าคุณไม่ควรทำมันจากภายนอก - ทำไมคุณถึงใช้โทเค็น (HSM) เลยถ้าคุณใช้คีย์ส่วนตัวในภายนอกธรรมดา

สุดท้าย หากคุณใช้แอปพลิเคชันมาตรฐาน แนวทางของคุณน่าจะล้มเหลว เนื่องจากแอปพลิเคชันมักจะเพิ่ม CKA_CLASS=CKO_PUBLIC_KEY ลงในเทมเพลตการค้นหาเมื่อค้นหาคีย์สาธารณะที่ต้องการใช้

Score:1
ธง vu

สิ่งที่ชัดเจนที่สุด: ประสิทธิภาพ

ฉันรู้ว่า SPHINCS+ เป็นตัวอย่างที่การสร้างคีย์สาธารณะจากคีย์ส่วนตัวนั้นมีค่าใช้จ่ายสูงเป็นพิเศษ อาจมีแผนการอื่นที่เป็นจริง แต่ฉันไม่ทราบ

นอกจากนี้ เนื่องจากเป็นฮาร์ดแวร์ PKCS#11 ที่เรากำลังพูดถึง และเราได้กล่าวถึง SPHINCS+ ลายเซ็นไร้สัญชาติที่ใช้แฮชแล้ว เราควรพูดถึงด้วยว่า NIST ได้อนุมัติแล้ว การใช้งานฮาร์ดแวร์ ของ XMSS และ LMS สถานะ ลายเซ็นตามแฮช

โพสต์คำตอบ

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