Τι είναι αυτό το εργαλείο;
Το HMAC σημαίνει Hash-based Message Authentication Code. Συνδυάζει ένα μυστικό κλειδί με ένα μήνυμα και μια τυπική συνάρτηση κατακερματισμού (όπως το SHA-256) για να παράγει ένα σύνοψη σταθερού μήκους. Οποιοσδήποτε έχει το ίδιο κλειδί και μήνυμα θα υπολογίσει ακριβώς το ίδιο HMAC — αλλά χωρίς το κλειδί, είναι υπολογιστικά ανέφικτο να παραχθεί ένα έγκυρο HMAC για ένα μήνυμα, ακόμα κι αν γνωρίζετε τον χρησιμοποιούμενο αλγόριθμο κατακερματισμού.
Αυτή είναι η βασική διαφορά από έναν απλό κατακερματισμό: ένας απλός κατακερματισμός (MD5, SHA-256, κ.λπ.) δέχεται μόνο το μήνυμα ως είσοδο, οπότε οποιοσδήποτε μπορεί να τον υπολογίσει και δεν αποδεικνύει τίποτα για το ποιος τον δημιούργησε. Ένα HMAC δέχεται το μήνυμα *και* ένα μυστικό κλειδί, οπότε ένα έγκυρο HMAC αποδεικνύει ότι ο αποστολέας κατείχε το μυστικό — είναι μηχανισμός αυθεντικοποίησης, όχι απλός έλεγχος ακεραιότητας.
Το HMAC τυποποιείται επίσημα από το NIST στο FIPS 198-1 και ορίζεται για διαδικτυακά πρωτόκολλα στο IETF RFC 2104. Αυτό το εργαλείο υπολογίζει HMAC χρησιμοποιώντας το εγγενές Web Crypto API του προγράμματος περιήγησής σας (`crypto.subtle.sign` με τον αλγόριθμο HMAC), το οποίο υλοποιεί σωστά το RFC 2104 αντί για μια χειροποίητη έκδοση JavaScript.
Γιατί να το χρησιμοποιήσετε;
- Υπογράψτε αιτήματα API ώστε ο διακομιστής παραλαβής να μπορεί να επαληθεύσει ότι το αίτημα προήλθε από κάτοχο του κοινού μυστικού και δεν παραποιήθηκε.
- Επαληθεύστε τα payload των webhooks (η Stripe, το GitHub, το Shopify και παρόμοιες υπηρεσίες υπογράφουν όλες τα σώματα webhook με HMAC-SHA256).
- Δημιουργήστε διακριτικά αυθεντικοποίησης ή κωδικούς μίας χρήσης που εξαρτώνται από ένα κοινό μυστικό.
- Συγκρίνετε την έξοδο της δικής σας υλοποίησης HMAC με μια γνωστή σωστή τιμή αναφοράς.
- 100% τοπικό: το μυστικό κλειδί και το μήνυμά σας δεν εγκαταλείπουν ποτέ το πρόγραμμα περιήγησης, οπότε είναι ασφαλές να δοκιμάσετε πραγματικά μυστικά.
Πώς χρησιμοποιείται
- Εισαγάγετε το μυστικό σας κλειδί στο πεδίο "Secret Key".
- Εισαγάγετε το μήνυμα που θέλετε να αυθεντικοποιήσετε στο πεδίο "Message".
- Τα αποτελέσματα HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 και HMAC-SHA512 δημιουργούνται άμεσα (επιλέξτε "Uppercase output" αν το σύστημα-στόχος σας αναμένει κεφαλαία γράμματα).
- Κάντε κλικ στο "Copy" δίπλα σε όποιο HMAC χρειάζεστε.
Παράδειγμα
Είσοδος
Secret Key: key
Message: The quick brown fox jumps over the lazy dogΈξοδος
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Αυτό είναι ένα τυπικό δημοσιευμένο διάνυσμα δοκιμής: με το κλειδί "key" και αυτό ακριβώς το μήνυμα, τα HMAC-SHA256 και HMAC-SHA1 παράγουν πάντα αυτές τις τιμές σε οποιαδήποτε σωστή υλοποίηση, οπότε μπορείτε να επαληθεύσετε ανεξάρτητα την έξοδο αυτού του εργαλείου.
HMAC έναντι απλού κατακερματισμού: πότε χρειάζεστε κλειδί
Το καθοριστικό ερώτημα είναι: χρειάζεται να αποδείξετε ποιος δημιούργησε αυτή τη σύνοψη ή απλώς ότι το περιεχόμενο δεν έχει αλλάξει; Αν αρκεί ένα δημόσιο checksum — επαλήθευση ότι ένα κατεβασμένο αρχείο ταιριάζει με αυτό που δήλωσε ο εκδότης, αποδιπλασιασμός εγγραφών — ένας απλός κατακερματισμός λειτουργεί και οποιοσδήποτε μπορεί να τον ελέγξει, χωρίς κλειδί. Αν χρειάζεται να αποδείξετε ότι η σύνοψη θα μπορούσε να παραχθεί μόνο από κάποιον που κατέχει ένα συγκεκριμένο μυστικό — αυθεντικοποίηση ενός καλούντα API, εμπιστοσύνη στον αποστολέα ενός webhook — χρειάζεστε HMAC, επειδή ένας απλός κατακερματισμός δίνει σε έναν επιτιθέμενο χωρίς μυστικό την ίδια ικανότητα να πλαστογραφήσει μια έγκυρη σύνοψη όπως ο πραγματικός αποστολέας.
→ Multi-Algorithm Hash Generator · JWT Decoder · MD5 Generator
Σύγκριση των τεσσάρων αλγορίθμων HMAC
Και οι τέσσερις χρησιμοποιούν την ίδια κατασκευή HMAC από το RFC 2104, διαφέροντας μόνο στην υποκείμενη συνάρτηση κατακερματισμού και επομένως στο μήκος εξόδου.
| Αλγόριθμος | Μέγεθος εξόδου | Τυπική χρήση |
|---|---|---|
| HMAC-SHA1 | 160-bit (40 δεκαεξαδικοί χαρακτήρες) | Παλαιά API, παλαιότερες υπογραφές OAuth 1.0a |
| HMAC-SHA256 | 256-bit (64 δεκαεξαδικοί χαρακτήρες) | Υπογραφή αιτημάτων API, JWT HS256, επαλήθευση webhook |
| HMAC-SHA384 | 384-bit (96 δεκαεξαδικοί χαρακτήρες) | Υπογραφές υψηλότερης διασφάλισης όπου απαιτείται μεγαλύτερη έξοδος |
| HMAC-SHA512 | 512-bit (128 δεκαεξαδικοί χαρακτήρες) | Σύνοψεις μέγιστου μήκους για εφαρμογές υψηλής ασφάλειας |
Κοινές περιπτώσεις χρήσης
- Υπογραφή εξερχόμενων αιτημάτων API με ένα κοινό μυστικό ώστε ο διακομιστής να μπορεί να επαληθεύσει την ταυτότητα του καλούντα.
- Επαλήθευση εισερχόμενων payload webhook (οι κεφαλίδες Stripe-Signature, GitHub X-Hub-Signature-256 και παρόμοιες χρησιμοποιούν όλες HMAC-SHA256).
- Δημιουργία και επικύρωση του τμήματος υπογραφής ενός JWT υπογεγραμμένου με HS256/HS384/HS512.
- Δοκιμή ότι η υλοποίηση HMAC στην πλευρά διακομιστή ή πελάτη σας ταιριάζει με την αναμενόμενη έξοδο πριν την ανάπτυξη.
Συχνές ερωτήσεις
Τι είναι το HMAC;
Το HMAC (Hash-based Message Authentication Code) συνδυάζει ένα μυστικό κλειδί με ένα μήνυμα χρησιμοποιώντας μια συνάρτηση κατακερματισμού για να παράγει μια σύνοψη που αποδεικνύει τόσο την ακεραιότητα του μηνύματος όσο και την κατοχή του κλειδιού από τον αποστολέα. Ορίζεται στα NIST FIPS 198-1 και IETF RFC 2104.
Ποια είναι η διαφορά μεταξύ HMAC και απλού κατακερματισμού;
Ένας απλός κατακερματισμός (SHA-256, MD5, κ.λπ.) δέχεται μόνο ένα μήνυμα ως είσοδο — οποιοσδήποτε μπορεί να τον υπολογίσει, οπότε αποδεικνύει μόνο ότι το μήνυμα δεν αλλοιώθηκε, όχι ποιος το έστειλε. Ένα HMAC δέχεται ένα μήνυμα συν ένα μυστικό κλειδί: αν χρειάζεται να αποδείξετε ότι ένα μήνυμα προήλθε από κάποιον που κατέχει ένα συγκεκριμένο μυστικό (μια υπογραφή API, έναν αποστολέα webhook), χρειάζεστε HMAC. Αν απλώς πρέπει να ελέγξετε ότι ένα αρχείο ή μήνυμα δεν έχει αλλάξει και δεν σας ενδιαφέρει η απόδειξη της συγγραφής, αρκεί ένας απλός κατακερματισμός.
Αποστέλλεται το μυστικό μου κλειδί σε διακομιστή;
Όχι. Αυτό το εργαλείο υπολογίζει το HMAC εξ ολοκλήρου στο πρόγραμμα περιήγησής σας χρησιμοποιώντας το Web Crypto API. Το κλειδί και το μήνυμά σας δεν μεταδίδονται ποτέ πουθενά — μπορείτε να δοκιμάσετε με ασφάλεια πραγματικά μυστικά παραγωγής.
Ποιον αλγόριθμο πρέπει να χρησιμοποιήσω — SHA-1, SHA-256, SHA-384 ή SHA-512;
Χρησιμοποιήστε HMAC-SHA256 εκτός αν ένα συγκεκριμένο σύστημα απαιτεί διαφορετικά — είναι το de facto πρότυπο για την υπογραφή API (χρησιμοποιείται από AWS, Stripe, webhooks GitHub και τα περισσότερα σύγχρονα API) και προσφέρει ισχυρό περιθώριο ασφαλείας. Το HMAC-SHA1 εξακολουθεί να είναι κοινό σε παλαιά συστήματα (όπως παλαιότερες υλοποιήσεις OAuth 1.0a) αλλά ο υποκείμενος κατακερματισμός SHA-1 θεωρείται πιο αδύναμος· τα HMAC-SHA384/512 χρησιμοποιούνται όπου απαιτείται συγκεκριμένα μεγαλύτερη έξοδος ή επιπλέον περιθώριο ασφαλείας.
Είναι το HMAC-SHA1 ανασφαλές, εφόσον το απλό SHA-1 έχει σπάσει;
Οι επιθέσεις σύγκρουσης του 2017 έσπασαν το SHA-1 ως απλή συνάρτηση κατακερματισμού, αλλά το HMAC-SHA1 εξακολουθεί να θεωρείται κρυπτογραφικά αξιόπιστο επειδή η ασφάλεια του HMAC δεν εξαρτάται από την αντίσταση σε συγκρούσεις με τον ίδιο τρόπο. Παρ' όλα αυτά, προτιμήστε HMAC-SHA256 ή υψηλότερο για νέα συστήματα — δεν υπάρχει πρακτικό μειονέκτημα και αποφεύγεται εντελώς το ζήτημα.
Ποιες είναι οι κοινές πραγματικές χρήσεις του HMAC;
Υπογραφή αιτημάτων REST API ώστε ένας διακομιστής να μπορεί να επαληθεύσει ότι ο καλών κατέχει το κοινό μυστικό API· επαλήθευση payload webhook από υπηρεσίες όπως Stripe, GitHub και Shopify ώστε να γνωρίζετε ότι ένα αίτημα προήλθε πραγματικά από αυτές και δεν πλαστογραφήθηκε· δημιουργία κωδικών μίας χρήσης βάσει χρόνου (TOTP/HOTP) για την επαλήθευση δύο παραγόντων· και υπογραφή διακριτικών JWT με τους αλγόριθμους HS256/HS384/HS512.