Ein naiver Vergleich wie bytes.Equal oder == auf zwei Strings bricht beim ersten Unterschied ab. Angreifer im Netz können diesen frühen Abbruch messen und einen MAC byteweise erraten — der passende Präfix wächst, sobald die Antwortzeit steigt. subtle.ConstantTimeCompare führt denselben Vergleich durch, liest aber stets alle Bytes und faltet das Ergebnis in einen einzigen Akkumulator: die Laufzeit hängt nur von der Länge, nicht vom Inhalt ab. Rückgabewert 1 bedeutet gleich, 0 bedeutet ungleich. Einsetzen bei HMAC-Tags, Passwort-Hashes, Session-Tokens und anderen geheimen Byte-Folgen.
package mainimport ("crypto/hmac""crypto/sha256""crypto/subtle""fmt")func sign(key, msg []byte) []byte {m := hmac.New(sha256.New, key)m.Write(msg)return m.Sum(nil)}func verify(provided, expected []byte) bool {// bytes.Equal short-circuits on the first mismatch and// would leak the matching prefix length via wall-clock// timing. ConstantTimeCompare always touches every byte.return subtle.ConstantTimeCompare(provided, expected) == 1}func main() {key := []byte("server-secret")want := sign(key, []byte("user=42"))got := make([]byte, len(want)) // attacker's guessfmt.Println("ok:", verify(got, want))}