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

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

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

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

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

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

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

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

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

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

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

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

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

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

ความอ่อนไหว

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