Klassische Kanäle: eine Ausführungszeit, die von geheimen Bits abhängt (Kocher, 1996), von Geheimnissen abhängige Speicherzugriffe, die über gemeinsam genutzte Caches beobachtet werden (Flush+Reload und ähnliche Verfahren), Messkurven von Stromverbrauch und elektromagnetischer Abstrahlung bei Smartcards und Mikrocontrollern sowie Fehlerinjektion (Spannungs- oder Taktglitches, Laser, Rowhammer), die ein Gerät dazu bringt, eine fehlerhafte Signatur auszugeben, aus der sich der Schlüssel berechnen lässt. Auch Timing-Angriffe aus der Ferne sind praktikabel: Lucky Thirteen (2013) griff über das Netzwerk die Padding-Prüfung von TLS im CBC-Modus an.
Asymmetrische Kryptografie ist besonders angreifbar, weil Skalarmultiplikation und modulare Exponentiation in Schleifen über die Bits des Schlüssels oder der Nonce laufen. Gegenmaßnahmen sind zeitkonstanter Code (keine von Geheimnissen abhängigen Verzweigungen, Speicherindizes oder Instruktionen mit variabler Laufzeit), Blinding von Skalaren und Nachrichten, vollständige Formeln mit gleichförmigen Leitern (Ladders) sowie gegen Fehlerangriffe das Prüfen der Signatur vor ihrer Herausgabe und Hedged Nonces.
Die praktische Regel für die Entwicklung: Nutze gepflegte Bibliotheken, die sich bei zeitkonstantem Code bewährt haben (BoringSSL, OpenSSL, libsodium, die crypto-Pakete von Go, RustCrypto, die noble-Bibliotheken), und implementiere die Arithmetik nie selbst neu. In Sprachen mit JIT-Compilern oder Garbage Collection lässt sich zeitkonstantes Verhalten nur anstreben, nicht garantieren; das ist auf gemeinsam genutzten Hosts und in Browsern relevant.