Computerprogrammierer rezitieren oft das Mantra, dass x86-Anweisungen völlig undurchsichtig sind: Intel sagt uns, dass sie etwas tun, aber es gibt keine Hoffnung, dass irgendjemand überprüfen kann, was passiert. Wenn die NSA ihnen also sagt, dass sie ihre RNGs durch Hintertüren schützen sollen, können wir das nicht wirklich etwas dagegen tun.
Nun, ich glaube, dass Computerprogrammierer nichts gegen dieses Problem unternehmen können. Aber wie würde ein Elektrotechniker es angreifen? Gibt es Techniken, mit denen ein Elektrotechniker überprüfen kann, ob ein Stromkreis die in seiner Spezifikation beschriebenen Vorgänge ausführt, und keine anderen Vorgänge?
cpu
reverse-engineering
user14717
quelle
quelle
Antworten:
Das beste Papier, das ich zu diesem Thema gelesen habe, sind "Stealthy Dopant-Level Hardware Trojaner" (Becker et al.) Aus dem Jahr 2014.
In dem Artikel wird beschrieben, wie die Änderung vorgenommen wird, wie schwierig es ist, das Silizium zu untersuchen, wie es vor dem Produktionstest verborgen werden kann und wie die Sicherheit eines Hardware-Krypto-RNG verringert oder Schlüsselinformationen verloren gehen können durch einen Power-Rail-Seitenkanal einer AES-Implementierung.
Seitenkanäle sind ein aufstrebendes Interessensgebiet. Intel war von Problemen im Zusammenhang mit der spekulativen Ausführung geplagt, bei denen Informationen aus dem Speicher verloren gingen, die nicht einmal vom Programm verwendet wurden. Könnte das ein bewusster Konstruktionsfehler gewesen sein? Es ist fast unmöglich zu sagen.
quelle
Gibt es Techniken, mit denen ein Elektrotechniker überprüfen kann, ob ein Stromkreis die in seiner Spezifikation beschriebenen Vorgänge ausführt, und keine anderen Vorgänge?
Theoretisch denke ich, dass dies möglich ist. Für eine komplexe CPU ist jedoch viel Zeit und Geld erforderlich. Wenn Sie das Design nicht vollständig kennen und verstehen, können Sie auch nicht beurteilen, ob eine Aktivität "legitim" ist oder nicht.
Eine CPU ist "nur" eine komplexe digitale Schaltung, die aus vielen Logikzellen besteht.
Es ist möglich, Reverse Engineering , den Chip und das Design durch die Beobachtung der Metallverbindungen zu rekonstruieren. Es können viele dieser Verbindungsschichten vorhanden sein, z. B. bis zu 8 Schichten oder mehr.
Sie benötigen Experten auf dem Gebiet, um die Logikzellen zu erkennen, und dann kann möglicherweise eine Software herausfinden, wie sie alle verbunden sind, damit Sie die Netzliste rekonstruieren können.
Sobald Sie die Netzliste haben, "kennen" Sie das Design. Das heißt nicht, dass Sie jetzt auch wissen, wie es funktioniert!
Es kann sein, dass eine bestimmte Funktion zwei Bereiche des Designs aktiviert, während Sie der Meinung sind, dass einer ausreichen sollte, damit Sie den Verdacht haben, dass eine verdächtige Aktivität stattfindet. Das Design führt jedoch einen cleveren Trick aus, von dem Sie nichts wissen, um Vorgänge zu beschleunigen.
Ohne das Design zu kennen und zu verstehen, könnte jede Schlussfolgerung, die Sie ziehen, immer noch falsch sein. Nur die Ingenieure, die die CPU entworfen haben, verfügen über alle Konstruktionsinformationen und haben die beste Chance, herauszufinden oder zu erraten, was in einer CPU tatsächlich vor sich geht oder vor sich gehen sollte.
quelle
Es gibt keine guten Möglichkeiten , Hintertüren zu finden. Eine Möglichkeit, eine Hardware-Hintertür zu finden, besteht darin, Kombinationen oder undokumentierte Anweisungen zu testen. Hier ist ein gutes Gespräch über jemanden, der dies tatsächlich tut und Audits auf x86-Hardware durchführt . Dies kann erfolgen, ohne den Chip zu knacken. Ein Problem mit Intel (bei anderen Chips bin ich mir nicht sicher) ist, dass dort tatsächlich ein Prozessor mit Linux ausgeführt wird, sodass auf einigen Prozessoren auch Software ausgeführt wird, auf die Sie angeblich keinen Zugriff haben.
Es gibt Möglichkeiten zum Testen, um die Hardware selbst zum Testen der Funktionalität zu verwenden. Da x86 einen undokumentierten Teil seines Befehlssatzes hat, wäre es ungewöhnlich, in normalen Befehlen Backdoors einzuführen, da dies die Möglichkeit von Fehlern (wie wenn Sie eine Backdoor in einem Add- oder Multibefehl hatten) mit sich bringt wäre in den undokumentierten anweisungen.
Wenn Sie die Funktionalität von regulären Anweisungen testen mussten, können Sie die Ausführungszeit für Anweisungen und den Energiebedarf für die Ausführung von Anweisungen überwachen, um festzustellen, ob es Unterschiede zu den erwarteten gibt.
quelle
Die einzige Möglichkeit wäre, den Chip Schicht für Schicht abzutrennen und jeden Transistor mit einem Elektronenmikroskop aufzuzeichnen, und dies dann in eine Art Simulationsprogramm einzugeben und dann zu beobachten, wie es abläuft.
Dies ist im Wesentlichen das Black-Box-Problem, bei dem Sie versuchen, die Interna aus den gemessenen Ein- und Ausgängen zu rekonstruieren. Sobald die Komplexität der Interna oder die Anzahl der I / O über das Triviale hinausgeht, kommt es zu einer kombinatorischen Explosion, bei der die Anzahl der möglichen internen Zustände astronomisch wird. Wo Zahlen wie Googol herumwirbeln.
quelle
Es ist außerordentlich schwer zu beweisen, dass die CPU nichts hinterhält. Das klassische Beispiel ist eine Wahlmaschine. Wenn ein einziger Teil Ihrer Stimme eine Kopie Ihrer Stimme enthält und diese später an einen Diktator weiterleitet, kann dies an manchen Stellen für Sie Leben oder Tod sein. Und es ist ziemlich schwer zu beweisen, dass es nicht ein einziges bisschen unter den Milliarden gibt.
Sie könnten überlegen, den Chip physisch zu isolieren. Es ist also praktisch, festzustellen, dass keine fehlerhaften Kabelverbindungen vorhanden sind. Und indem Sie einen anderen Chip oder mehr als einen Chip in Reihe (von verschiedenen Quellen) in die Netzwerkverbindung einbauen, wird sichergestellt, dass nur die richtige Verbindung hergestellt wird. Schalten Sie es dann aus und wieder ein, nachdem es Ihre Stimme abgegeben hat. Und in der Hoffnung, dass dort keine nichtflüchtigen Bits sind. Oder kabellose Verbindungen. Aber würden Sie Ihrem Leben vertrauen?
quelle
Das Übertragen von Daten an den NSA erfordert einen Netzwerkzugriff. Daher ist es recht einfach, eine solche Hintertür zu erkennen, indem ein Betriebssystem mit deaktivierten Netzwerkdiensten ausgeführt und die Netzwerkschnittstellen auf Datenverkehr überprüft werden. Für ein Open-Source-Betriebssystem ist es sogar möglich, mit vollständiger Netzwerkunterstützung und Spot-Rogue-Verbindung über die Ziel-IP zu arbeiten, die keiner Adresse entspricht, auf die das Betriebssystem berechtigterweise zugreifen könnte.
Eine auf RNG basierende Hintertür ohne Datenübertragung hat nur einen sehr begrenzten Nutzen. Sofern das CPU-RNG nicht die einzige Entropiequelle ist, ist die Wahrscheinlichkeit, dass eine solche Hintertür dem Angreifer einen Vorteil verschafft und gleichzeitig nicht offensichtlich ist, praktisch Null . Sofern Sie nicht darauf bestehen, dass Russels Teekanne da draußen ist, obwohl es keinen guten Grund dafür gibt, sollten Sie in der Lage sein, dasselbe Argument auf die Hardware-RNG-Hintertüren anzuwenden.
quelle
rdrand
oderrdseed
wie von Intel vorgeschlagen: als einzige Entropiequelle für einen PRNG-Samen. Linux (der Kernel) hat sich entschieden, dies nicht zu tun/dev/random
, aber die aktuelle Version von glibc / libstdc ++std::random_device
wird nur verwendet,rdrand
wenn sie zur Laufzeit verfügbar ist, anstatt sie zu öffnen/dev/random
. Betreten Sie die Standardbibliothek mit Godboltstd::random_device
ist kein kryptografisch starkes RNG. Mit dem C ++ - Standard können Sie es mit einem PRNG implementieren, wobei jedes Mal dieselbe Sequenz zurückgegeben wird. Es ist also klar, dass niemand sie für die Verschlüsselung verwenden sollte.