הפרימיטיב Digital Signature מאפשר לכם לוודא שאף אחד לא שינה את הנתונים שלכם. היא מספקת אותנטיות ושלמות, אבל לא סודיות, של הנתונים החתומים. היא אסימטרית, כלומר היא משתמשת בזוג מפתחות (מפתח ציבורי ומפתח פרטי).
לפרימיטיב Digital Signature יש את המאפיינים הבאים:
- אותנטיות: אי אפשר ליצור חתימה ש-
PublicKeyVerify.Verify(signature, message)מאמת, אלא אם יש לכם את המפתח הפרטי. - אסימטרית: ליצירת החתימה משתמשים במפתח שונה מזה שמשמש לאימות שלה. כך אפשר להפיץ את המפתח הציבורי כדי לאמת חתימות לצדדים שלא יכולים ליצור חתימות בעצמם.
אם לא צריך אסימטריה, כדאי להשתמש במקום זאת בפרימיטיב MAC הפשוט והיעיל יותר.
הפונקציונליות של חתימות דיגיטליות מיוצגת ב-Tink כצמד של פרימיטיבים:
- PublicKeySign לחתימה על נתונים
- PublicKeyVerify לאימות החתימה
אם המפתח הפרטי נמצא במקום שלא ניתן לשלוח אליו את ההודעה בקלות, כמו HSM או KMS, אפשר לעיין במאמר בנושא Prehash ו-SignPrehash, שבו תהליך החתימה מחולק לשלב גיבוב עם מפתח ציבורי בלבד ולשלב חתימה עם מפתח פרטי בלבד.
בחירת סוג המפתח
ברוב תרחישי השימוש מומלץ להשתמש ב-ML_DSA_44 או ב-ECDSA_P256, אבל יש מגוון אפשרויות. באופן כללי, התנאים הבאים מתקיימים:
- ML-DSA-44 הוא חסין מפני פיצוח קוונטי. אנחנו עובדים על הטמעה שלו, ועכשיו מומלץ להשתמש בו בשפות תכנות שבהן הוא זמין.
באלגוריתמים הבאים שאינם פוסט-קוונטיים, צפוי שיהיה צורך לשנות את סוג המפתח בעתיד הקרוב.
- ECDSA_P256 היא האפשרות הנפוצה ביותר ומוגדרת כברירת מחדל. עם זאת, חשוב לדעת שחתימות ECDSA הן גמישות.
- ED25519 יוצר חתימות דטרמיניסטיות ומספק ביצועים טובים יותר מ-ECDSA_P256.
- RSA_SSA_PKCS1_3072_SHA256_F4 יוצר חתימות דטרמיניסטיות ומספק את ביצועי האימות הטובים ביותר (אבל החתימה איטית בהרבה מ-ECDSA_P256 או מ-ED25519).
התחייבויות מינימליות לאבטחה
- אורך הנתונים שרוצים לחתום עליהם יכול להיות אורך שרירותי
- רמת אבטחה של 128 ביט מפני התקפות מסוג 'הודעה נבחרת אדפטיבית' עבור סכימות שמבוססות על עקומות אליפטיות
- רמת אבטחה של 112 ביט מפני התקפות מסוג 'בחירת הודעה אדפטיבית' עבור סכימות מבוססות RSA (מאפשרת מפתחות של 2,048 ביט)
גמישות
תוכנית חתימה היא גמישה אם תוקף יכול ליצור חתימה תקפה שונה להודעה שכבר נחתמה. ברוב המקרים זה לא גורם לבעיות, אבל במקרים מסוימים מתכנתים מניחים באופן מרומז שחתימות תקפות הן ייחודיות, והנחה כזו עלולה להוביל לתוצאות לא צפויות.
תרחיש שימוש לדוגמה
אפשר לעיין במאמר בנושא חתימה דיגיטלית על נתונים.