| ▲ | frabert 20 hours ago | ||||||||||||||||||||||||||||||||||
This has been a sore point in a lot of discussions regarding compiler optimizations and cryptographic code, how compilers and compiler engineers are sabotaging the efforts of cryptographers in making sure there are no side-channels in their code. The issue has never been the compiler, and has always been the language: there was never a way to express the right intention from within C (or most other languages, really). This primitive we're trying to introduce is meant to make up for this shortcoming without having to introduce additional rules in the standard. | |||||||||||||||||||||||||||||||||||
| ▲ | Asooka 9 minutes ago | parent | next [-] | ||||||||||||||||||||||||||||||||||
There really ought to be a subset of C that lets you write portable assembly. One where only a defined set of optimisations are allowed and required to be performed, "inline" means always inline, the "register" and "auto" keywords have their original meanings, every stack variable is allocated unless otherwise indicated, every expression has defined evaluation order, every read/write from/to an address is carried out, nothing is ever reordered, and undefined behaviour is switched to machine-specific behaviour. Currently if you need that level of control, your only option is writing it in assembly, which gets painful when you need to support multiple architectures, or want fancy features like autocomplete or structs and functions. | |||||||||||||||||||||||||||||||||||
| ▲ | fanf2 9 hours ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||
What happened to the blog post? It was moved and now it has disappeared :-( | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
| ▲ | jfindper 11 hours ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||
>how compilers and compiler engineers are sabotaging the efforts of cryptographers I'm not exposed to this space very often, so maybe you or someone else could give me some context. "Sabotage" is a deliberate effort to ruin/hinder something. Are compiler engineers deliberately hindering the efforts of cryptographers? If yes... is there a reason why? Some long-running feud or something? Or, through the course of their efforts to make compilers faster/etc, are cryptographers just getting the "short end of the stick" so to speak? Perhaps forgotten about because the number of cryptographers is dwarfed by the number of non-cryptographers? (Or any other explanation that I'm unaware of?) | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
| ▲ | fooker 11 hours ago | parent | prev [-] | ||||||||||||||||||||||||||||||||||
> making sure there are no side-channels in their code Any side effect is a side channel. There are always going to be side channels in real code running on real hardware. Sure you can change your code, compiler, or, or even hardware to account for this but at it's core that is security by obscurity. | |||||||||||||||||||||||||||||||||||