ลายเซ็นดิจิทัล

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

Primitive ลายเซ็นดิจิทัลมีคุณสมบัติดังต่อไปนี้

  • ความถูกต้อง: คุณจะสร้างลายเซ็นที่ PublicKeyVerify.Verify(signature, message)ตรวจสอบไม่ได้ เว้นแต่คุณจะมี คีย์ส่วนตัว
  • อสมมาตร: การสร้างลายเซ็นจะใช้คีย์ที่แตกต่างจากการยืนยัน ซึ่งจะช่วยให้คุณเผยแพร่คีย์สาธารณะเพื่อยืนยันลายเซ็นไปยังบุคคลที่ สร้างลายเซ็นเองไม่ได้

หากไม่ต้องการความไม่สมมาตร ให้ลองใช้ Primitive MAC ที่ง่ายกว่าและมีประสิทธิภาพมากกว่าแทน

ฟังก์ชันการทำงานของลายเซ็นดิจิทัลจะแสดงใน Tink เป็นคู่ของ Primitive ดังนี้

  • PublicKeySign สำหรับการลงนามข้อมูล
  • PublicKeyVerify สำหรับการยืนยันลายเซ็น

หากคีย์ส่วนตัวอยู่ในที่ที่ส่งข้อความได้ยาก เช่น HSM หรือ KMS โปรดดู Prehash และ SignPrehash ซึ่งจะแบ่งการลงนามออกเป็น ขั้นตอนการแฮชคีย์สาธารณะเท่านั้นและขั้นตอนการลงนามคีย์ส่วนตัวเท่านั้น

เลือกประเภทคีย์

เราขอแนะนำให้ใช้ ML_DSA_44 หรือ ECDSA_P256 สำหรับ Use Case ส่วนใหญ่ แต่ก็มีตัวเลือกอื่นๆ ให้เลือกใช้ด้วย โดยทั่วไปแล้ว ข้อความต่อไปนี้เป็นจริง

สำหรับอัลกอริทึมที่ไม่ใช่การเข้ารหัสเพื่อรักษาความปลอดภัยจากคอมพิวเตอร์ควอนตัมต่อไปนี้ คุณจะต้องเปลี่ยนประเภทคีย์ในอนาคตอันใกล้นี้

  • ECDSA_P256 เป็นตัวเลือกที่ใช้กันอย่างแพร่หลายมากที่สุดและเป็นค่าเริ่มต้นที่เหมาะสม โปรดทราบว่าลายเซ็น ECDSA แก้ไขได้
  • ED25519 สร้างลายเซ็นที่กำหนดไว้ล่วงหน้าและให้ประสิทธิภาพที่ดีกว่า ECDSA_P256
  • RSA_SSA_PKCS1_3072_SHA256_F4 สร้างลายเซ็นที่แน่นอนและให้ ประสิทธิภาพการยืนยันที่ดีที่สุด (แต่การลงนามจะช้ากว่า ECDSA_P256 หรือ ED25519 มาก)

การรับประกันความปลอดภัยขั้นต่ำ

  • ข้อมูลที่จะลงนามมีความยาวเท่าใดก็ได้
  • ระดับการรักษาความปลอดภัย 128 บิตต่อการโจมตีแบบเลือกข้อความที่ดัดแปลงได้สำหรับรูปแบบที่อิงตามเส้นโค้งวงรี
  • ระดับการรักษาความปลอดภัย 112 บิตเทียบกับการโจมตีแบบเลือกข้อความที่ปรับเปลี่ยนได้สำหรับรูปแบบที่อิงตาม RSA (อนุญาตคีย์ 2048 บิต)

ความยืดหยุ่น

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

ตัวอย่างกรณีการใช้งาน

ดูฉันต้องการลงนามข้อมูลแบบดิจิทัล