สำหรับโครงการที่ฉันกำลังทำอยู่ ฉันต้องใช้ ECDSA บนเส้นโค้ง NIST P-384 (หรือที่เรียกกันว่า secp384r1
). สำหรับสิ่งที่คุ้มค่า ทางเลือกของเส้นโค้งนั้นอยู่นอกเหนือการควบคุมของฉันในกรณีนี้
ในขณะที่ฉันมีการใช้งานที่ใช้งานได้ และนี่เป็นเพียงโครงการสัตว์เลี้ยงที่มีเดิมพันต่ำ ฉันสงสัยว่าฉันจะดูแลสิ่งนี้ได้อย่างไรในที่สุด มีประสิทธิภาพ ทางโดยเฉพาะอย่างยิ่งสำหรับส่วนการลงนาม
รายการความปรารถนาคร่าวๆ:
- ฉันต้องการพยายามอย่างจริงจังในการป้องกันการรั่วไหลของช่องด้านข้างและเวลา
- เนื่องจากฉันสนใจเฉพาะเส้นโค้ง P-384 และ ECDSA ฉันจึงต้องการโค้ดเบสที่มีรอยเท้าค่อนข้างเล็ก (เพราะฉันจะต้องระบุการเชื่อมโยงสำหรับโค้ดที่ไม่ใช่ C) การปรับให้เหมาะสมเฉพาะ P384 นั้นยินดีต้อนรับอย่างแน่นอน
- ฉันต้องการตัวเลือกเพื่อใช้การกำหนดลักษณะ RFC 6979 $k$ ค่า (หรือโครงร่างอนุพันธ์ที่ไม่มีการกำหนดอื่น ๆ )
- แบบแผนที่ฉันใช้ยังต้องการการสนับสนุนสำหรับการบีบอัดจุด
ฉันสามารถจัดการ 3 และ 4 ได้เองหาก codebase ยืมตัวเองเพื่อแก้ไข
หลังจากดูไปรอบ ๆ นี่คือสิ่งที่ฉันพบ:
- OpenSSL (และส้อมอย่าง LibreSSL/BoringSSL/...): เป็นตัวเลือกที่ชัดเจน แต่มีขนาดใหญ่ และฉันก็ไม่ชอบรูปแบบการเรียกแบบพิสดารของ OpenSSL
- แอนดรอยด์รวมถึง การใช้งาน P-256 ที่เรียบง่ายน่ารัก. ฉันไม่แน่ใจว่าจะปลอดภัยแค่ไหน เฉพาะเจาะจง หนึ่งคือ แต่เป็นตัวอย่างที่ดีของสิ่งที่ฉันกำลังมองหา (แทนที่ P-256 ด้วย P-384)
- BearSSL ของ Thomas Pornin มีการใช้งาน P-384 แบบพกพาแต่คงที่ (เท่าที่เป็นไปได้) และดูเรียบง่ายพอที่จะตัดฟังก์ชันการทำงานที่ฉันไม่ต้องการออกไป ดูเหมือนว่าจะไม่ใช้การเพิ่มประสิทธิภาพเฉพาะเส้นโค้งใด ๆ แต่ใช้การกำหนดไว้แล้ว $k$ ค่านอกกรอบ
เห็นได้ชัดว่าฉันต้องการหลีกเลี่ยงการใช้งานของตัวเอง ตอนนี้ฉันอยากจะเดินไปตามเส้นทาง "การถอด BearSSL" แต่ฉันอยากจะถามว่ามีอะไรแบบ plug-and-play อีกไหม หรือหากมีข้อกังวลใดๆ ที่ฉันพลาดไป ขอบคุณ!