Ich arbeite daran, objektive Graphalgorithmen zu erstellen, die im Grunde das Speicherzugriffsmuster eines Algorithmus verbergen. Es wird angenommen, dass der Speicher verschlüsselt ist, aber von einem Angreifer überwacht werden kann. Es wird davon ausgegangen, dass sich der Prozessor in der Cloud befindet, sicher ist und über einen eigenen Cache verfügt.Wird das Setzen einer Variablen, die sich selbst entspricht, tatsächlich in C++ ausgeführt?
Es ist bekannt, dass das Zugriffsmuster eines Diagramms Informationen über dieses Diagramm enthalten kann.
Um einen Algorithmus unbemerkt zu machen, ist es notwendig, dem Algorithmus Dummy-Arbeit hinzuzufügen. Eine solche Arbeit beinhaltet das Lesen und Schreiben von Daten, jedoch auf eine Weise, dass die Ergebnisse des Algorithmus nicht verändert werden (solche Änderungen würden den Algorithmus natürlich nutzlos machen).
Es ist notwendig, dass die Dummy-Arbeit in der Grafik selbst ist, sonst könnte der Angreifer verfolgen, welche Arbeit echt ist und welche Arbeit gefälscht ist.
Natürlich schafft Dummy Arbeit Verlangsamungen. Daher möchte ich als eine schlanke Lösung mir selbst eine Variable zuweisen. Dies würde ein Lesen und Schreiben zu einem Ort erzeugen, ohne tatsächlich irgendetwas zu ändern. Meine Frage ist, führen Compiler diesen Code tatsächlich aus (es scheint in gdb, aber ist das nur, weil es ein Debugger ist)? Ich benutze gcc, aber es wäre am besten, wenn der Algorithmus mit verschiedenen Compilern kompiliert werden könnte und trotzdem unbemerkt bleiben würde.
Die Alternative zum Festlegen einer Variablen, die sich selbst entspricht, wäre die Verwendung einer if-Anweisung: Überprüfen Sie, ob die Variable einem Wert entspricht, und legen Sie die Variable innerhalb der if-Anweisung auf diesen Wert fest. Wenn möglich, würde ich gerne Aussagen vermeiden, weil sie die Dinge verlangsamen.
Schließlich ist dieser Algorithmus Multithread. Wenn eine globale Variable gleich gesetzt ist, muss sie mit einem Mutex-Lock versehen werden? Solche Sperren werden natürlich die Dinge verlangsamen, daher möchte ich sie, wenn möglich, vermeiden.
Die "als ob" -Regel bedeutet, dass Compiler alles optimieren können, was sie nachweisen können, ohne sichtbare Wirkung (im Rahmen der Sprache). Dies umfasst die Selbstzuweisung oder das Zuweisen eines Werts zu einer Variablen, die der Compiler beweisen kann, hat bereits diesen Wert. Sie müssen flüchtige Stoffe oder vielleicht Atomics verwenden. –
Sie können definitiv überprüfen, ob ein Compiler mehrere Optimierungsebenen angegeben hat, indem Sie die Assembly überprüfen. – chris
Ich bin mir ziemlich sicher, dass die Deklaration der Variablen "volatile" die Optimierung von Zuweisungen, sogar von Eigenzuweisungen, verhindern sollte. – Barmar