it-swarm.com.de

Sind variable Zeitvergleiche im Kryptografiecode immer ein Sicherheitsrisiko?

Ich bin auf das Kryptografie-Paket python) gestoßen und habe festgestellt, dass es das Folgende zum Melden von Sicherheitslücken enthält:

Beispiele für Dinge, die wir nicht als Sicherheitsproblem betrachten würden: Verwenden Sie irgendwo einen variablen Zeitvergleich, wenn es nicht möglich ist, ein bestimmtes Programm zu formulieren, in dem dies zu einer problematischen Offenlegung von Informationen führen würde.

Ich dachte, keine variablen Zeitvergleiche zu haben, war eines der Dinge, die Kryptographie-Implementierungen sicherstellten. Sollte dies ein Ziel aller sicheren Kryptographie-Bibliotheken sein? Wenn nicht, unter welchen Bedingungen spielt es für die Sicherheit keine Rolle, ob ein konstanter Zeitvergleich verwendet wird oder nicht?

12
curiousgeorge7

Nein, sie sind nicht immer ein Risiko, und tatsächlich ist es unmöglich, eine praktische kryptografische Bibliothek zu erstellen, in der jede Funktion eine konstante Zeit hat.

Nehmen Sie zum Beispiel eine Entschlüsselungsfunktion. In einer realen kryptografischen Bibliothek ist das Entschlüsseln einer 10-Byte-Nachricht schneller als eine 10-Gigabyte-Nachricht. Sie könnten theoretisch eine Bibliothek erstellen, in der die Entschlüsselung für jede Nachricht mit unterstützter Größe eine konstante Zeit war, aber das wäre absurd. Sie haben also eine variable Zeitfunktion, die (nutzlose) Informationen über die Größe der zu entschlüsselnden Nachricht verliert. Einer der spezifischen Gründe, warum dies kein Problem ist, ist die Annahme, dass der Angreifer möglicherweise Informationen über die Nachrichtengröße hat, die in die Sicherheitsnachweise integriert sind. Sicherheitseigenschaften übernehmen im Allgemeinen nur die Sicherheit für Nachrichten einer bestimmten Größe. Da sie nicht für Nachrichten unterschiedlicher Größe gelten, hat dies keine Auswirkungen auf die entworfene Sicherheit eines Systems, wenn die Nachrichtengröße den Zeitpunkt der Funktionserfüllung beeinflusst.

In anderen Fällen kann das Timing möglicherweise empfindlich sein, aber eine Funktion kann so konzipiert sein, dass alle Informationen entfernt werden, die ein Angreifer für die Funktion verwenden könnte. Double-MAC'ing ist ein Beispiel dafür. Die Bewertung eines MAC ist definitiv eine Funktion, die empfindlich auf Timing-Angriffe reagiert. In einem (zum Beispiel) verschlüsselten MAC-Schema vergleichen Sie einen mit einem Chiffretext gesendeten MAC mit einem frisch gegen den Chiffretext berechneten MAC. Ein Timing-Angriff könnte es einem Gegner ermöglichen, modifizierte Chiffretext/MAC-Kombinationen wiederholt zu senden und einen gültigen MAC ohne zu iterieren den richtigen geheimen Schlüssel kennen. Wenn Sie jedoch bei jedem Vergleich den MAC mit einem kurzlebigen Schlüssel erneut MAC-und erneut vergleichen, spielt es keine Rolle, ob Zeitprobleme auftreten. Der kurzlebige Schlüssel im zweiten MAC verhindert, dass ein Gegner iterativ einen korrekten MAC erzeugen kann, da der neue kurzlebige Schlüssel, der für jede nachfolgende Auswertung erzeugt wird, die Suche nach gültigen Bits vereitelt.

12
Xander

Variable Zeitvergleiche führen zu Informationslecks. Wenn die Offenlegung der verglichenen Daten keinen Schaden anrichtet, ist die Verwendung variabler Zeitvergleiche kein Problem. Wenn es wichtig ist, dass es geheim bleibt, verwenden Sie einen konstanten Zeitvergleich.

Einige theoretisch ausnutzbare variable Zeitvergleiche sind in der Praxis möglicherweise schwer auszunutzen. Die Qualität der Timing-Daten, die ein Hacker sammeln kann, ist möglicherweise nicht gut genug, damit ein Timing-Angriff in bestimmten realen Kontexten erfolgreich ist.

Ein Timing-Angriff ist beispielsweise schwieriger, wenn die Software, die geheime Informationen verarbeitet, auf Hardware ausgeführt wird, die bereits inkonsistente, unvorhersehbare Laufzeiten aufweist (für identische Eingaben). selbst wenn jemand Zugriff auf nanosekundengenaue Zeitdaten hat.

Wenn die geheimen Informationen auch nicht so sensibel sind und eine kurze Lebensdauer haben, ist das mit einem solchen Timing-Angriff verbundene Risiko möglicherweise zu gering, um sich Sorgen zu machen.

Allerdings gibt es Möglichkeiten, verrauschte Zeitdaten zu umgehen. Möglicherweise verwendet ein Hacker andere Seitenkanäle, um Zeitdaten zu ergänzen. Vielleicht sendet er Ihren Server spezifische Anfragen, die das Timing vorhersehbarer machen. Und natürlich kann er den Angriff viele Male ausführen und den Lärm irgendwie herausrechnen.

(Wenn Sie sich als Entwickler nicht sicher sind, verwenden Sie Operationen mit konstanter Zeit. Gehen Sie nicht einfach davon aus, dass es zu schwer zu nutzen ist.)


Dinge, die definitiv nicht mit einem variablen Zeitalgorithmus verglichen werden sollten:

  • Geheime (symmetrische) Schlüssel oder private (asymmetrische) Schlüssel
  • Nachrichtenauthentifizierungs-Tags
  • Nachrichten (oder Hashes von Nachrichten), die Geheimnisse enthalten
  • Fest codierte (oder vom Benutzer konfigurierbare) Geheimnisse

Beispiele, für die es wichtig sein kann oder nicht :

  • Öffentliche Schlüssel
  • Geheimtext
  • Öffentliche IP-Adressen
  • Öffentliche Kennungen (ausgenommen personenbezogene Daten)

Denken Sie daran, dass die Beeinträchtigung der Privatsphäre der Benutzer ein Sicherheitsproblem sein kann. (Auch wenn Sie nicht persönlich glauben, dass Sie einige Arten von Informationen privat halten müssen.) Daher sollten Entwickler immer noch berücksichtigen Seitenkanalangriffe, selbst wenn Sie mit Daten arbeiten, die Sie möglicherweise nicht für so sensibel halten.

6
Future Security

Erstens ist Kryptographie ein weit gefasster Begriff, und die Bibliothek Python cryptography enthält nicht nur Grundelemente, sondern auch X.509-Behandlung usw.

Die Hauptfrage ist, ob die Timing-Probleme von einem Angreifer verwendet werden können, um Geheimnisse zu erlangen oder die Komplexität des Problems und damit die Zeit zu verringern, um Geheimnisse auf einen Wert zu bringen, der Angriffe realistisch macht. Dies bedeutet zum einen, dass der Angreifer die Zeit zunächst mit ausreichender Granularität messen kann. Dies ist beispielsweise normalerweise bei komplexen Webanwendungen nicht der Fall, bei denen Schwankungen der Netzwerklatenz und der Ausführungszeit von SQL-Abfragen usw. wahrscheinlich dazu führen, dass kleine zeitliche Unterschiede bei den kryptografischen Vorgängen nicht über Remote-Daten gemessen werden können. Beachten Sie, dass die frühzeitige Verwendung der Kryptografie wie beim TLS-Handshake möglicherweise immer noch betroffen ist, da in diesem frühen Stadium alle anderen Overheads und Variationen in der Anwendung noch keine großen Auswirkungen haben.

Dies bedeutet auch, dass der Angreifer genügend Experimente durchführen kann, um die Geheimnisse endgültig zu entschlüsseln. Die Details hängen davon ab, wie viele Informationen tatsächlich aus den Zeitunterschieden verloren gehen, sind jedoch häufig praktisch nicht durchführbar.

Und dann sind möglicherweise weniger komplexe Angriffe möglich. Wenn es sich um eine lokale Anwendung handelt, ist es möglicherweise billiger, sie einfach zurückzuentwickeln, anstatt sie meistens als Black Box zu behandeln. Wenn die Anwendung beispielsweise in einem manipulationssicheren Gehäuse enthalten ist (wie bei Smartcards), sind Timing-Angriffe oder andere Seitenkanäle (wie Strahlung, Schwankungen der verwendeten Leistung, ...) möglicherweise der einzige Weg.

Zusammenfassend: Widerstand gegen Timing-Angriffe ist relevant, wenn a) der Timing-Unterschied mit ausreichender Granularität gemessen werden kann und b) genügend Experimente durchgeführt werden können und c) keine offensichtlich billigeren Angriffe möglich sind. Da insbesondere a) und b) stark vom tatsächlichen Anwendungsfall abhängen, ist es wichtiger, dass die kryptografischen Grundelemente resistent sind, da sie in einer Vielzahl von Anwendungsfällen verwendet werden können.

3
Steffen Ullrich

Der Hauptzweck der Vermeidung eines variablen Zeitvergleichs bestand darin, eine unbeabsichtigte Offenlegung von Informationen zu verhindern, die zu zeitbasierten Angriffen auf die Anwendung führen.

Schauen Sie sich zum Beispiel Padding Oracle Attack und Time Based Blind SQL Injection Attack an. Das Aufräumen aller variablen Zeitvergleiche im Programm ist mit bestimmten Kosten verbunden, die das Paket cryptography python) zu vermeiden versucht, da aufgrund dieser Fälle keine Offenlegung von Informationen erfolgt.

Es ist leicht, solche Anwendungsfälle für sicherheitsrelevanten Code zu übersehen, daher würde ich es vorziehen, variable Zeitvergleiche zu vermeiden.

1
Karan Bansal

Das Wichtigste bei durchgesickerten Informationen ist, zu identifizieren, welche Informationen unter bestimmten Umständen durchgesickert sind und was der Angreifer wissen und/oder kontrollieren würde.

Nehmen wir zum Beispiel die Passwortprüfung. Alte Klartext-Passwörter wurden in den schlechten alten Zeiten oft von einer Bibliothek ohne Gedanken an Sicherheit zeichenweise verglichen. Dies bedeutet, dass es etwas länger dauern würde, wenn Sie den ersten Buchstaben des Passworts richtig verstanden hätten, als wenn Sie den ersten Buchstaben falsch verstanden hätten (da es einige Zeit dauern würde, den zweiten Buchstaben zu überprüfen). Sie können jeden möglichen ersten Buchstaben ausprobieren, bis Sie den richtigen treffen, dann diesen ersten Buchstaben plus jeden möglichen zweiten Buchstaben und so weiter. Auf diese Weise können Sie den Arbeitsaufwand von 64 ^ 6 auf 64 * 6 reduzieren (unter der Annahme von 6 Symbolen aus einem Satz von 64 möglichen Symbolen).

Selbst wenn Sie das Kennwort vor dem Überprüfen hashen, können Sie es auch auf vorberechnete Rainbow-Tabellen anwenden. Suchen Sie ein Kennwort mit einem Hash, der mit Byte 00 beginnt. Wenn die Überprüfung länger dauert als ein Kennwort mit 01, können Sie alle Kennwörter entfernen mit einem Hash, der nicht mit 01 beginnt.

Wenn im Beispiel der Verschlüsselung die zu entschlüsselnde Nachricht vom Angreifer bereitgestellt wird, weiß er, wie groß sie ist. Wenn das Lesen einer Nachricht doppelt so lange dauert, lernen sie daraus nichts Neues.

Wenn andererseits das Entschlüsseln einer Nachricht länger dauert, wenn sich der SCHLÜSSEL unterscheidet, erhalten Sie Informationen zum Schlüssel, die dem Angreifer sonst nicht bekannt sind.

0
AMADANON Inc.