Earlier quoted context omitted.
Is it just a perf issue, or something else?
I assume you're asking why the underlying crypto still needs to be written in asm. There are two primary reasons: 1. Performance 2. Defense against side channel attacks (e.g. constant time operations)
Memory Safe TLS Library Now Has AWS Crypto and FIPS
21–30 of 40 posts
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#22Earlier quoted context omitted.
Ish. It really depends! Fil-C is memory-safe down to the libpizlo POSIXish syscall layer, and then even those syscalls do memory safety checks (so you can't read(2) into an OOB area of a buffer, for example). So, some safe code is built on a crapton of unsafe code, while other safe code is built on a tightly controlled TCB. There's a big spectrum there.
You’re describing exactly what I am describing: you still call out into a syscall that is not safe. You prevent that by checking things in the wrapper. Very standard.
They’re not the same thing.
If they were the same thing then there would be no point to memory safety at all.
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#23Earlier quoted context omitted.
The Go crypto implementation uses some unsafe/asm part but it does not rely on external C/C++ lib. Very different.
It is still a safe wrapper around unsafe code. I agree that I would prefer that situation (mainly because of not needing an additional compiler) but it’s structurally the same thing.
Moreover, some of the assembly cores are a couple dozen lines for the hottest loops. I guess you could call the whole Go package a safe wrapper around that unsafe code, but I am used to think of a wrapper as not the place where the substantial logic is.
It's also meaningfully different from AWS-LC, discussed here, which has the entire cryptographic operation (like a signature or encryption API) implemented in C. (It's still great progress to move the TLS and X.509 implementations to a safe language, as that's where most memory safety bugs are!)
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#24Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#25Earlier quoted context omitted.
Is it just a perf issue, or something else?
I assume you're asking why the underlying crypto still needs to be written in asm. There are two primary reasons: 1. Performance 2. Defense against side channel attacks (e.g. constant time operations)
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#26Earlier quoted context omitted.
All safe code is inherently built on top of unsafe code.
The Go crypto implementation uses some unsafe/asm part but it does not rely on external C/C++ lib. Very different.
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#27Earlier quoted context omitted.
The Go crypto implementation uses some unsafe/asm part but it does not rely on external C/C++ lib. Very different.
And they now have to deal with the same kind of timing attacks related stuff as everybody else https://github.com/golang/go/issues/49702 (and they'll likely lag behind)
Anyway, not sure why relying on C/C++ would have helped us here.
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#28Earlier quoted context omitted.
It is still a safe wrapper around unsafe code. I agree that I would prefer that situation (mainly because of not needing an additional compiler) but it’s structurally the same thing.
Not really, a number of our crypto implementations are pure Go. In fact, we always have a pure Go fallback that you can select with "-tags purego". As of Go 1.23 we will be systematically testing it, too, because it enables other compilers like TinyGo. They might be slower, but with the notable exception of AES (because implementing AES in constant time without AES-NI is hell) the pure Go implementations are just as…
I think we’re making two different points. I am talking about at a very high level, when people say “yeah it’s safe but there’s unsafe under there” that that is always the case at some point in the stack. Even a pure Go or pure Rust program ends up needing to interact with the underlying system, whose hardware isn’t safe. There is still some code that has to reach outside of the ability of the language to check that it conforms to their abstract machines in order to do things at that level.
I don’t disagree that minimizing the amount of unsafety is a good general goal. Or that because there’s unsafe inside, that the code is not overall safe. Quite the opposite! I’m saying that not only is it possible, but that it’s an inherent part of how we build safe abstractions in the first place.
(Oh and to be honest, I wish Rust had gotten the same level of investment around cryptography that Go has had. Big fan. Sucks it never happened for us. I’m glad to see continued improvements in the space, but like, I am not trying to say Go is bad here in any way.)
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#29Earlier quoted context omitted.
I assume you're asking why the underlying crypto still needs to be written in asm. There are two primary reasons: 1. Performance 2. Defense against side channel attacks (e.g. constant time operations)
And one political reason: the existing implementation is FIPS, and FIPS validation is a gigantic pain in the rear :-)
It’s totally possible and it’s a thing compilers for memory safe languages sometimes have to do internally.
It wouldn’t take a lot of language engineering to make it nice. You’d end up being able to take that asm code more or less as is and annotate it with just a type proof so that Rust/Go/Fil-C can call into that shit without worrying about it blowing up your rules.
Re: Memory Safe TLS Library Now Has AWS Crypto and FIPS
#30Earlier quoted context omitted.
You’re describing exactly what I am describing: you still call out into a syscall that is not safe. You prevent that by checking things in the wrapper. Very standard.
You’re disingenuously conflating calling into a pile of userland unsafe code that does crypto using arrays and ptr math, which also does unsafe syscalls, with making all that memory safe except the syscall. They’re not the same thing. If they were the same thing then there would be no point to memory safety at all.
Cool man. Reaching for insults isn’t a good way to have a conversation. Good luck on your project.