Fragen? Antworten! Siehe auch: Alternativlos
New hotness: clang baut in Branchless-Code wieder Branches ein.
Branchless heißt, dass der Code keine conditional jumps hat, d.h. keine If-Statements. Das kann eine wichtige Optimierung sein, wenn ein Branch sehr schwierig vorhersagbar ist, und die CPU den immer mispredicted. Es kann aber auch lebenswichtig sein für Krypto-Code, wenn das If-Statement auf Teilen des Schlüssels oder Klartexts basiert, und man möchte, dass das immer mit konstanter Zeit abläuft, damit ein Beobachter keine Rückschlüsse ziehen kann.
In diesem Fall geht es um KYBER, einen der wichtigeren Post-Quantum-Algorithmen. Die haben da eine Transformation absichtlich branchless formuliert, um Timing-Angriffe zu vermeiden, und clang hat das hilfreich wieder zurück"optimiert" und leakt dann halt den Plaintext.
Ja geil ey! (Danke, Oliver)