Στην κρυπτογραφία, ο Κωδικός Αυθεντικοποίησης Μηνύματος (KAM, αγγλικά: Message Authentication code, MAC), ή κωδικός ελέγχου ταυτότητας μηνύματος, γνωστός επίσης ως ετικέτα, είναι ένα μικρό τμήμα δεδομένων που χρησιμοποιείται για την αυθεντικοποίηση ενός μηνύματος — με άλλα λόγια, για να επιβεβαιωθεί ότι το μήνυμα προήλθε από τον φερόμενο ως αποστολέα (αυθεντικότητα) και ότι δεν έχει τροποποιηθεί (ακεραιότητα). Ο KAM προστατεύει την ακεραιότητα των δεδομένων του μηνύματος και την αυθεντικότητα του μηνύματος, επιτρέποντας σε όποιον προβεί στην επαλήθευση (χρησιμοποιώντας το μυστικό κλειδί) να αντιληφθεί αν έχει επέλθει τροποποίηση στο περιεχόμενο του μηνύματος.
Ανεπίσημα, ένα σύστημα κωδικού αυθεντικοποίησης μηνύματος αποτελείται από τρεις αλγόριθμους:
Ένας ασφαλής κωδικός αυθεντικοποίησης μηνύματος πρέπει να είναι ανθεκτικός έναντι των προσπαθειών ενός αντιπάλου να δημιουργήσει πλαστές ετικέτες, για αυθαίρετα, συγκεκριμένα, ή όλα τα μηνύματα, ακόμη και υπό συνθήκες γνωστού ή επιλεγμένου απλού κειμένου. Θα πρέπει να είναι υπολογιστικά ανέφικτο να υπολογιστεί μια έγκυρη ετικέτα για το δοθέν μήνυμα χωρίς γνώση του κλειδιού, ακόμη και στη χειρότερη περίπτωση, στην οποία υποθέτουμε ότι ο αντίπαλος γνωρίζει την ετικέτα όλων των μηνυμάτων εκτός από το υπό κρίση[1].
Επίσημα, ένα σύστημα κωδικού αυθεντικοποίησης μηνύματος (ΚΑΜ) συνίσταται από μια τριάδα αποδοτικών[2] αλγορίθμων (G, S, V) για τους οποίους ισχύει ότι:
Οι S και V πρέπει να πληρούν τα παρακάτω:
Ένας ΚΑΜ είναι μη πλαστογραφήσιμος αν για κάθε αποδοτικό αντίπαλο A
όπου AS(k, ·) δηλώνει ότι ο A έχει πρόσβαση στο μαντείο S(k, ·) και Ερώτημα(AS(k, ·), 1n) δηλώνει το σύνολο των ερωτημάτων στο S που έκανε ο A, το οποίο γνωρίζει το n. Προφανώς απαιτείται ότι κανένας αντίπαλος δεν μπορεί να υποβάλλει απευθείας το κείμενο x ως ερώτημα στο S, καθώς διαφορετικά ο αντίπαλος αυτός μπορεί να αποκτήσει εύκολα μια έγκυρη ετικέτα[4].
Παρότι οι συναρτήσεις ΚΑΜ είναι παρόμοιες με τις κρυπτογραφικές συναρτήσεις κατακερματισμού, έχουν διαφορετικές απαιτήσεις ασφάλειας. Για να θεωρείται ασφαλής, μια συνάρτηση KAM πρέπει να αντιστέκεται στην υπαρξιακή πλαστογράφηση υπό επιθέσεις επιλεγμένου απλού κειμένου. Αυτό σημαίνει ότι ακόμη κι αν ο επιτιθέμενος έχει πρόσβαση σε μαντείο που διαθέτει το μυστικό κλειδί και που παράγει ΚΑΜ για τα μηνύματα που επιλέγει ο επιτιθέμενος, ο επιτιθέμενος δεν μπορεί να μαντέψει τον ΚΑΜ για άλλα μηνύματα, που δεν έχουν τεθεί ως ερωτήματα στο μαντείο, παρά μόνο αν προβεί σε υπολογισμούς ανέφικτου εύρους.
Οι ΚΑΜ διαφέρουν από τις ψηφιακές υπογραφές, καθώς η τιμή του ΚΑΜ παράγεται και επαληθεύεται με το ίδιο μυστικό κλειδί. Από αυτό υπονοείται ότι ο αποστολέας και ο λήπτης του μηνύματος πρέπει να συνεννοηθούν για το κοινό κλειδί πριν ξεκινήσουν την επικοινωνία, όπως συμβαίνει στη συμμετρική κρυπτογραφία. Για τον ίδιο λόγο, οι ΚΑΜ δεν προσφέρουν την ιδιότητα της μη-απάρνησης, την οποία προσδίδουν οι ψηφιακές υπογραφές ιδίως στην περίπτωση που το κοινό μυστικό κλειδί έχει μοιραστεί με ολόκληρο το δίκτυο: κάθε χρήστης που μπορεί να επαληθεύσει τον ΚΑΜ ενός συγκεκριμένου μηνύματος έχει και τη δυνατότητα να παράγει ΚΑΜ για άλλα μηνύματα. Αντίθετα, μια ψηφιακή υπογραφή παράγεται χρησιμοποιώντας το ιδιωτικό κλειδί από ένα ζεύγος κλειδιών, διαδικασία που συνιστά κρυπτογραφία δημόσιου κλειδιού. Επειδή αυτό το ιδιωτικό κλειδί βρίσκεται στη διάθεση αποκλειστικά και μόνο του κατόχου του, μια ψηφιακή υπογραφή αποδεικνύει ότι μόνο ο κάτοχος του κλειδιού μπορεί να έχει υπογράψει το έγγραφο. Έτσι, οι ψηφιακές υπογραφές όντως προσφέρουν μη-απάρνηση. Ωστόσο, η μη-απάρνηση είναι δυνατό να παρέχεται και από συστήματα που συνδέουν με ασφάλεια πληροφορίες για τη χρήση του κλειδιού με το κλειδί ΚΑΜ· το ίδιο κλειδί βρίσκεται στην κατοχή δύο προσώπων, αλλά ο ένας έχει ένα αντίγραφο του κλειδιού που μπορεί να χρησιμοποιηθεί για τη δημιουργία ΚΑΜ ενώ ο άλλος έχει ένα αντίγραφο του κλειδιού σε μια συσκευή υλισμικού ασφαλείας η οποία επιτρέπει μόνο την επαλήθευση του ΚΑΜ.
Οι αλγόριθμοι ΚΑΜ μπορεί να καταρτίζονται από άλλες στοιχειώδεις τεχνικές κρυπτογράφησης, όπως οι κρυπτογραφικές συναρτήσεις κατακερματισμού (κατά την περίπτωση του HMAC) ή από κρυπταλγόριθμους τμήματος (OMAC, CCM, GCM, και PMAC). Ωστόσο, πολλοί από τους πιο γρήγορους αλγόριθμους ΚΑΜ, όπως οι UMAC-VMAC και Poly1305-AES καταρτίζονται βάσει καθολικού κατακερματισμού[5].
Συναρτήσεις κατακερματισμού που βασίζονται εγγενώς σε κλειδί, όπως ο SipHash, είναι εξ ορισμού και αλγόριθμοι ΚΑΜ· μπορεί να είναι ακόμη πιο γρήγοροι από τους αλγόριθμους ΚΑΜ που βασίζονται σε καθολικό κατακερματισμό.[6]
Επιπλέον, ο αλγόριθμος ΚΑΜ μπορεί να συνδυάσει σκόπιμα δύο ή περισσότερες στοιχειώδεις τεχνικές κρυπτογράφησης, έτσι ώστε να παραμένει ασφαλής ακόμη και αν αργότερα βρεθεί ότι μια από αυτές είναι ευάλωτη. Για παράδειγμα, στο TLS, τα δεδομένα εισόδου διχοτομούνται, το κάθε μισό υφίσταται επεξεργασία με διαφορετική αυθύπαρκτη τεχνική κατακερματισμού (SHA-1 και SHA-2) και επί των αποτελεσμάτων εκτελείται XOR ώστε να παραχθεί ο ΚΑΜ.
Ο καθολικός κατακερματισμός και ιδιαίτερα οι συναρτήσεις κατακερματισμού ανά δύο ανεξάρτητων παρέχουν έναν ασφαλή κωδικό αυθεντικοποίησης μηνύματος αρκεί το κλειδί να χρησιμοποιείται το πολύ μια φορά. Αυτό μπορεί να θεωρηθεί αντίστοιχο του σημειωματάριου μιας χρήσης για την αυθεντικοποίηση.
Η απλούστερη τέτοια συνάρτηση κατακερματισμού ανά δύο ανεξάρτητων ορίζεται από το τυχαίο κλειδί, key = (a, b), και η ετικέτα ΚΑΜ για το μήνυμα m υπολογίζεται ως ετικέτα = (am + b) mod p, όπου ο p είναι πρώτος αριθμός.
Γενικότερα, οι συναρτήσεις κατακερματισμού ανά k ανεξάρτητων παρέχουν έναν ασφαλή κωδικό αυθεντικοποίησης μηνύματος αρκεί το κλειδί να χρησιμοποιείται λιγότερο από k φορές για συναρτήσεις κατακερματισμού ανά k ανεξάρτητων.
Οι κωδικοί αυθεντικοποίησης μηνύματος και η αυθεντικοποίηση προέλευσης δεδομένων έχουν συζητηθεί και στο πλαίσιο της κβαντικής κρυπτογραφίας. Αντίθετα με άλλες κρυπτογραφικές διαδικασίες, όπως η διανομή κλειδιών, για μια αρκετά ευρεία κατηγορία κβαντικών ΚΑΜ έχει αποδειχθεί ότι οι κβαντικοί πόροι δεν προσφέρουν πλεονέκτημα έναντι ενός άνευ όρων ασφαλούς κλασικού ΚΑΜ μιας χρήσης.[7]
Διάφορα πρότυπα ορίζουν αλγόριθμους ΚΑΜ. Σε αυτά περιλαμβάνονται:
Τα ISO/IEC 9797-1 και -2 ορίζουν κατά γένος μοντέλα και αλγόριθμους που μπορούν να χρησιμοποιηθούν με κάθε κρυπταλγόριθμο τμήματος ή συνάρτηση κατακερματισμού, και μια σειρά από άλλους παραμέτρους. Αυτά τα μοντέλα και οι παράμετροι επιτρέπουν τον καθορισμό πιο ειδικών αλγόριθμων με την επιλογή των παραμέτρων. Για παράδειγμα, ο αλγόριθμος στο FIPS PUB 113 είναι λειτουργικά ισοδύναμος με τον αλγόριθμο ΚΑΜ 1 από το ISO/IEC 9797-1 αν επιλεγεί η μέθοδος συμπλήρωσης 1 και ο κρυπταλγόριθμος τμήματος DES.
[15] Σε αυτό το παράδειγμα, ο αποστολέας του μηνύματος το περνά από έναν αλγόριθμο ΚΑΜ για να παραχθεί μια ετικέτα δεδομένων ΚΑΜ. Το μήνυμα και η ετικέτα ΚΑΜ στέλνονται μετά στον λήπτη. Ο λήπτης με τη σειρά του περνά το μέρος της μετάδοσης που αποτελεί το αρχικό μήνυμα από τον ίδιο αλγόριθμο ΚΑΜ χρησιμοποιώντας το ίδιο κλειδί, παράγοντας μια δεύτερη ετικέτα δεδομένων ΚΑΜ. Κατόπιν, ο λήπτης συγκρίνει την πρώτη ετικέτα ΚΑΜ, την οποία έλαβε με τη μετάδοση, με τη δεύτερη ετικέτα ΚΑΜ, την οποία παρήγαγε. Αν είναι πανομοιότυπες, ο λήπτης μπορεί να υποθέσει με ασφάλεια ότι το μήνυμα δεν τροποποιήθηκε ούτε αλλοιώθηκε κατά τη μετάδοση (ακεραιότητα δεδομένων).
Ωστόσο, για να είναι δυνατό στον λήπτη να εντοπίσει επιθέσεις επανάληψης, το ίδιο το μήνυμα πρέπει να περιλαμβάνει δεδομένα που να εξασφαλίζουν ότι το μήνυμα αυτό μπορεί να σταλεί μόνο μια φορά (π.χ. χρονοσφραγίδα, σειριακός αριθμός ή χρήση ΚΑΜ μιας χρήσης). Διαφορετικά ένας επιτιθέμενος θα μπορούσε να καταγράψει αυτό το μήνυμα, χωρίς καν να καταλαβαίνει το περιεχόμενό του, και να το αποστείλει εκ νέου αργότερα, προξενώντας το ίδιο αποτέλεσμα με τον αρχικό αποστολέα.