go / expert
Snippet
Minderung von Timing-Seitenkanal-Lecks mittels subtle.ConstantTimeCompare
Standard-Byte- oder String-Vergleiche in Go brechen beim ersten nicht übereinstimmenden Byte vorzeitig ab. Dies erzeugt variable Ausführungszeiten, die anfällig für Timing-Seitenkanalangriffe sind. Die Verwendung von crypto/subtle.ConstantTimeCompare wertet jedes Byte unabhängig von frühen Abweichungen aus und läuft in konstanter Zeit, um sensible Geheimnisse wie API-Schlüssel und kryptografische Signaturen sicher zu vergleichen.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package mainimport ("crypto/subtle""errors")var ErrInvalidToken = errors.New("authentication token mismatch")func VerifyAuthToken(expected, provided []byte) error {if len(expected) == 0 || len(provided) == 0 {return ErrInvalidToken}if subtle.ConstantTimeCompare(expected, provided) != 1 {return ErrInvalidToken}return nil}
Erklärung
1
if len(expected) == 0 || len(provided) == 0 {
Schützt vor leeren Eingabe-Slices vor der Ausführung von Konstanzzeit-Prüfungen.
2
if subtle.ConstantTimeCompare(expected, provided) != 1 {
Vergleicht Slice-Bytes in konstanter Zeit und gibt 1 bei Gleichheit und 0 andernfalls zurück, ohne vorzeitige Lecks zu erzeugen.