איך להשתמש בו
- הזינו את המפתח הסודי ובחרו אם הוא טקסט רגיל או בתים הקסדצימליים.
- הדביקו את ההודעה, למשל מטען webhook בדיוק כפי שהתקבל.
- בחרו את האלגוריתם ואת קידוד הפלט שהשירות שלכם משתמש בו; ה-HMAC מתעדכן תוך כדי הקלדה.
- כדי לבדוק חתימה, הדביקו אותה בתיבת האימות וחפשו “Match”.
איך זה עובד
HMAC (RFC 2104) משלב מפתח סודי עם פונקציית גיבוב כדי ליצור חתימה שרק מי שמחזיק במפתח יכול ליצור. שירותים כמו webhooks ובקשות API חתומות שולחים HMAC עם כל הודעה כך שהמקבל יכול לבדוק שההודעה אותנטית ולא שונתה.
הכלי הזה משתמש ב-Web Crypto API של הדפדפן (crypto.subtle.importKey ו-sign) ונבדק מול וקטורי הבדיקה של RFC 4231 ו-RFC 2202. מפתח טקסט וההודעה מקודדים כ-UTF-8. מפתח hex מפוענח לבייטים גולמיים; רווחים, נקודתיים ו-0x מוביל מתעלמים. HMAC-SHA-256 היא הבחירה הנפוצה ביותר; HMAC-SHA-1 עדיין נחשב בטוח כ-MAC אך משמש בעיקר בממשקי API ישנים.
אם החתימה שלך אינה תואמת, בדוק את הפרטים שלרוב שונים: הבייטים המדויקים של ההודעה (ספקי webhooks רבים חותמים על הגוף הגולמי, לא על JSON מעוצב מחדש), חותמת זמן או קידומת שהספק מוסיף למחרוזת החתומה, האם המפתח משמש כטקסט או שיש לפענחו קודם מ-hex או Base64, והאם החתימה הצפויה היא hex או Base64 ונושאת קידומת כמו “sha256=”, שאותה יש להסיר לפני ההשוואה.
דוגמאות
מקרה בדיקה RFC 4231
מפתח “Jefe” (טקסט), הודעה “what do ya want for nothing?” ו-HMAC-SHA-256 נותנים 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. השתמש ב“נסה דוגמה” כדי לטעון אותה.
בדיקת חתימת webhook
ספק שולח את הכותרת X-Signature: sha256=… עם כל בקשה. הדבק את גוף הבקשה הגולמי כהודעה, את סוד ה-webhook שלך כמפתח, בחר HMAC-SHA-256 ו-Hex, ואז הדבק את הערך שאחרי “sha256=” בתיבת האימות.
מפתח מקודד hex
מערכות מסוימות מנפיקות מפתחות כמחרוזות hex כמו 0b0b0b…. בחר Hex כפורמט המפתח כך שהכלי יחתום עם הבייטים המפוענחים; התייחסות לאותה מחרוזת כטקסט נותנת תוצאה שונה לחלוטין.
שאלות נפוצות
מה ההבדל בין HMAC לגיבוב רגיל?
כל אחד יכול לחשב גיבוב רגיל כמו SHA-256 של הודעה. HMAC תלוי גם במפתח סודי, כך שרק מי שיש לו את המפתח יכול לייצר או לבדוק אותו. זה מוכיח שההודעה הגיעה ממחזיק מפתח ולא שונתה.
מדוע ה-HMAC שלי אינו תואם לזה מהשרת שלי?
בייטי הקלט כמעט תמיד שונים: סיומות שורה, רווחים, סדר מפתחות JSON, קידוד תווים, או מפתח שצריך לפענח מ-hex או Base64. השווה גם את הקידוד (hex לעומת Base64) והסר קידומות כמו “sha256=”.
האם המפתח הסודי שלי נשלח לאנשהו?
לא. המפתח וההודעה משמשים רק את Web Crypto API בכרטיסיית דפדפן זו. הם אינם מועלים, מאוחסנים או נכללים בניתוח נתונים.
האם HMAC-SHA-1 עדיין מאובטח?
התנגשויות SHA-1 אינן שוברות את HMAC-SHA-1 ישירות, והוא עדיין מקובל מטעמי תאימות. למערכות חדשות, השתמשו ב-HMAC-SHA-256 או חזק יותר.
פרטיות
המפתח, ההודעה והתוצאה קיימים רק בלשונית הדפדפן הזו. שום דבר לא מועלה, לא מאוחסן ולא נשלח למערכות ניתוח; נרשם רק אירוע אנונימי שהכלי נעשה בו שימוש.