TPMs take this a step further and create not only logical but physical separation between the main CPU and many cryptographic functions.
Exploits still happen but you need a much longer chain of vulnerabilities to pull it off.
Do you have links to those papers?
All programs are exploitable; the objective is to limit the nature and scope of their exploitability.
People keep writing new programs in C.
It's the only systems level language with a formally verified compiler afaik.
rust is a no go because you can't trust the compiler's output (remember, we can't trust people to write correct code, so we obviously can't trust the compiler writers either).
From a security perspective, demanding a formally verified C compiler is rearranging the deck chairs on the Titanic. Switching to a safer language like Rust will do much more to improve security, even if the compiler is not verified.
Trusting trust is an interesting paper, but it was never meant as a gotcha, it was meant as a “don’t forget to look at the whole picture from time to time”.
And you plan to stop me?
Also, why have you forgot telling linus in 1991, that he should implement linux in something like ADA?
If people don't put up with buying a defect pair of shoes, they should behave the same towards software.
Until you rewrite it all in rust
Memory safeness is just an illusion to me or a way to avoid responsibilities in case of issues.
The most glorious example of this is comparing C23's #embed with Rust's include_bytes! macro. These are both ways to include a file full of data into your program - which if you're a C programmer you will know was really annoying to do cross-platform before #embed
In C23 the data is just some literals like 1, 86, 69, 204 that are promised to be one unsigned byte each and you do with them whatever you want. How long do they live? -shrug- in some sense forever, but, then again maybe not, it depends.
But in Rust it's specifically &'static [u8; N] -- a reference to an array of N bytes which has the 'static lifetime, it lives potentially for the life of your program.
Have you considered the fact that the chances that a single developer messes up memory management in an application with thousands of malloc/free/strcpy/strcat/sprintf are much higher than the chances that something breaks in a compiler that took smart people years to build just to solve the problem of memory management?
Of course, if it breaks in C you can only blame yourself. But, in my opinion, it's better to blame the compiler/VM e.g. once a year, rather than blaming oneself once a week.
Ever heard of the concept called "abstraction" and "separation of concerns"?