הצעה לשיפור: KIP5
שכבה: אפליקציה.
תיאור: חתימת הודעות.
מחבר: coderofstuff.
סטטוס: פעיל.
מוטיבציה
חתימה על הודעות מספקת מנגנון להוכחת גישה לכתובת נתונה מבלי לחשוף את המפתחות הפרטיים שלך. זה סולל את הדרך להוכחת בעלות על כספים, נכסים מקוריים (שטרם יושם) ועוד מקרי שימוש אפשריים רבים.
מסמך זה שואף לספק סטנדרט שבו יישומים יכולים ליישם את פונקציונליות חתימה ואימות ההודעות שלהם.
מפרט טכני
חתימה על הודעה
חלק זה של התהליך רלוונטי ליישומים שיש להם גישה למפתח הפרטי ויחתמו על הודעה כלשהי.
נתון:
- מחרוזת באורך שרירותי. נקרא לזה raw_message
- מפתח_פרטי
פלט: חתימה המשויכת למחרוזת זו עם מפתח פרטי נתון
- גיבוב ההודעה באמצעות Blake2B. כדי ליצור הפרדת דומיינים מספקת עם sighash של קלט טרנזקציות, השתמש במפתח Blake2B אחר, PersonalMessageSigningHash (גיבובי טרנזקציות משתמשים ב-TransactionSigningHash כמפתח ל-blake2b) ובאורך תקציר של 32.
- שנור חתם על ההודעה המגובשת
לסיכום: schnorr_sign(blake2b(raw_message, digest_size=32, key='PersonalMessageSigningHash'), private_key)
למה לגיבב הודעה?
- מקטין את גודל ההודעה השרירותית ל-hash באורך קבוע
- מונע חתימה מקרית של sighashes – ההודעה הגולמית עוברת hashing עם מפתח blake2b שונה (PersonalMessageSigningHash) מזה המשמש ל-hashes של עסקאות (TransactionSigningHash), ויוצר הפרדת דומיינים מספקת.
אימות חתימת הודעה
חלק זה של התהליך רלוונטי ליישומים המבקשים מבעלים של מפתח ציבורי לספק הוכחה שיש להם גישה למפתח הפרטי של מפתח_ציבורי זה.
נתון:
- מחרוזת באורך שרירותי. נקרא לזה raw_message
- מפתח ציבורי שהאפליקציה ביקשה כדי לחתום על ההודעה
פלט: true אם החתימה תקפה, false אחרת
- בצעו גיבוב של ההודעה הגולמית באותו אופן כמו לעיל לצורך חתימה
- שנורר אימות שהחתימה תואמת את המפתח הציבורי שאתם בודקים
לסיכום: schnorr_verify(blake2b(raw_message, digest_size=32, key='PersonalMessageSigningHash'), public_key)
יישום לדוגמה
הקוד מלא ב-/kip-0005/test-cases.py
וקטורי בדיקה
המפתחות נלקחו מהקישור הבא:
https://github.com/bitcoin/bips/blob/master/bip-0340/test-vectors.csv
| index | secret key | public key | aux_rand | message_str | signature |
|---|---|---|---|---|---|
| 0 | 0000000000000000000000000000000000000000000000000000000000000003 | F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9 | 0000000000000000000000000000000000000000000000000000000000000000 | Hello Kaspa! | 40B9BB2BE0AE02607279EDA64015A8D86E3763279170340B8243F7CE5344D77AFF1191598BAF2FD26149CAC3B4B12C2C433261C00834DB6098CB172AA48EF522 |
| 1 | B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF | DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659 | 0000000000000000000000000000000000000000000000000000000000000001 | Hello Kaspa! | EB9E8A3C547EB91B6A7592644F328F0648BDD21ABA3CD44787D429D4D790AA8B962745691F3B472ED8D65F3B770ECB4F777BD17B1D309100919B53E0E206B4C6 |
| 2 | B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF | DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659 | 0000000000000000000000000000000000000000000000000000000000000001 | こんにちは世界 | 810653D5F80206DB519672362ADD6C98DAD378844E5BA4D89A22C9F0C7092E8CECBA734FFF7922B656B4BE3F4B1F098899C95CB5C1023DCE3519208AFAFB59BC |
| 3 | B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF | DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659 | 0000000000000000000000000000000000000000000000000000000000000001 | (See Test CAse 3 Full Text section) | 40CBBD3938867B10076BB14835557C062F5BF6A4682995FC8B0A1CD2ED986EEDAAA00CFE04F6C9E5A9546B860732E5B903CC82780228647D5375BEC3D2A4983A |
גילוי נאות
נכתב במקור על ידי coderofstuff.
האמור לעיל מובא לצורכי ידע כללי בלבד ואינו מהווה ייעוץ פיננסי, השקעות, מס, או המלצה למסחר בנכסים דיגיטליים או כל ייעוץ אחר ואינו תחליף להתייעצות עם גורם מוסמך.
הכותב / מתרגם ומערכת האתר אינם אחראים לכל נזק, הפסד או טעות הנובעים מהסתמכות על המידע המוצג כאן או במסמכים של צד ג' שתורגמו לעברית.
המסמך תורגם לעברית על ידי צוות kaspa.co.il למען הקהילה
במידה ומצאתם טעות בתרגום נשמח אם תעדכנו אותנו בטופס יצירת קשר