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

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

องค์ประกอบพื้นฐานลายเซ็นดิจิทัลมีพร็อพเพอร์ตี้ต่อไปนี้

  • ความถูกต้อง: การสร้างลายเซ็นที่ 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 บิตเพื่อป้องกันการโจมตีแบบเลือกข้อความแบบปรับเปลี่ยนได้สำหรับรูปแบบที่อิงตามรูปไข่
  • ระดับความปลอดภัย 112 บิตเพื่อป้องกันการโจมตีแบบเลือกข้อความแบบปรับเปลี่ยนได้สำหรับรูปแบบที่อิงตาม RSA (อนุญาตคีย์ 2048 บิต)

ความสามารถในการปรับเปลี่ยน

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

ตัวอย่าง Use Case

ดูหัวข้อฉันต้องการเซ็นชื่อข้อมูลแบบดิจิทัล