Πώς να το χρησιμοποιήσετε
- Εισαγάγετε το μυστικό κλειδί και επιλέξτε αν είναι απλό κείμενο ή δεκαεξαδικά byte.
- Επικολλήστε το μήνυμα, για παράδειγμα ένα payload webhook ακριβώς όπως παραλήφθηκε.
- Επιλέξτε τον αλγόριθμο και την κωδικοποίηση εξόδου που χρησιμοποιεί η υπηρεσία σας. Το HMAC ενημερώνεται καθώς πληκτρολογείτε.
- Για να ελέγξετε μια υπογραφή, επικολλήστε την στο πεδίο επαλήθευσης και αναζητήστε την ένδειξη «Match».
Πώς λειτουργεί
Το HMAC (RFC 2104) συνδυάζει ένα μυστικό κλειδί με μια συνάρτηση κατακερματισμού για να παράγει μια υπογραφή που μόνο κάποιος με το κλειδί μπορεί να δημιουργήσει. Υπηρεσίες όπως webhooks και υπογεγραμμένα αιτήματα API στέλνουν ένα HMAC με κάθε μήνυμα, ώστε ο παραλήπτης να μπορεί να ελέγξει ότι το μήνυμα είναι γνήσιο και αμετάβλητο.
Αυτό το εργαλείο χρησιμοποιεί το Web Crypto API του προγράμματος περιήγησής σας (crypto.subtle.importKey και sign) και ελέγχεται βάσει των δοκιμαστικών διανυσμάτων RFC 4231 και RFC 2202. Ένα κλειδί κειμένου και το μήνυμα κωδικοποιούνται ως UTF-8. Ένα κλειδί hex αποκωδικοποιείται σε ακατέργαστα byte· τα κενά, τα άνω και κάτω τελείες και ένα αρχικό 0x αγνοούνται. Το HMAC-SHA-256 είναι η πιο συνηθισμένη επιλογή· το HMAC-SHA-1 εξακολουθεί να θεωρείται ασφαλές ως MAC, αλλά χρησιμοποιείται κυρίως από παλαιότερα API.
Εάν η υπογραφή σας δεν ταιριάζει, ελέγξτε τις λεπτομέρειες που διαφέρουν συνήθως: τα ακριβή byte του μηνύματος (πολλοί πάροχοι webhook υπογράφουν το ακατέργαστο σώμα, όχι το αναδιαμορφωμένο 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 ως μορφή κλειδιού, ώστε το εργαλείο να υπογράφει με τα αποκωδικοποιημένα byte· η αντιμετώπιση της ίδιας συμβολοσειράς ως κειμένου δίνει εντελώς διαφορετικό αποτέλεσμα.
Συχνές ερωτήσεις
Ποια είναι η διαφορά μεταξύ ενός HMAC και ενός απλού κατακερματισμού;
Οποιοσδήποτε μπορεί να υπολογίσει έναν απλό κατακερματισμό, όπως SHA-256, ενός μηνύματος. Ένα HMAC εξαρτάται επίσης από ένα μυστικό κλειδί, επομένως μόνο κάποιος με το κλειδί μπορεί να το παράγει ή να το ελέγξει. Αυτό αποδεικνύει ότι το μήνυμα προήλθε από κάτοχο του κλειδιού και δεν τροποποιήθηκε.
Γιατί το HMAC μου δεν ταιριάζει με αυτό από τον διακομιστή μου;
Τα byte εισόδου σχεδόν πάντα διαφέρουν: τερματισμοί γραμμών, κενά, σειρά κλειδιών JSON, κωδικοποίηση χαρακτήρων ή ένα κλειδί που πρέπει να αποκωδικοποιηθεί από hex ή Base64. Επίσης, συγκρίνετε την ίδια κωδικοποίηση (hex έναντι Base64) και αφαιρέστε προθέματα όπως “sha256=”.
Αποστέλλεται κάπου το μυστικό κλειδί μου;
Όχι. Το κλειδί και το μήνυμα χρησιμοποιούνται μόνο από το Web Crypto API σε αυτήν την καρτέλα του προγράμματος περιήγησης. Δεν μεταφορτώνονται, δεν αποθηκεύονται και δεν περιλαμβάνονται σε αναλυτικά στοιχεία.
Είναι ακόμα ασφαλές το HMAC-SHA-1;
Οι συγκρούσεις SHA-1 δεν παραβιάζουν άμεσα το HMAC-SHA-1 και εξακολουθεί να γίνεται δεκτό για λόγους συμβατότητας. Για νέα συστήματα, χρησιμοποιήστε HMAC-SHA-256 ή ισχυρότερο.
Απόρρητο
Το κλειδί, το μήνυμα και το αποτέλεσμα υπάρχουν μόνο σε αυτήν την καρτέλα του προγράμματος περιήγησης. Τίποτα δεν μεταφορτώνεται, δεν αποθηκεύεται ούτε αποστέλλεται σε υπηρεσίες αναλυτικών στοιχείων· καταγράφεται μόνο ένα ανώνυμο συμβάν ότι χρησιμοποιήθηκε το εργαλείο.