แนวทางของคุณใช้ได้กับ 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 ลงในเทมเพลตการค้นหาเมื่อค้นหาคีย์สาธารณะที่ต้องการใช้