-
Notifications
You must be signed in to change notification settings - Fork 17.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
proposal: crypto/md5: deprecated cryptography used for security purposes or in security sensitive codepaths #70043
Comments
Related Issues and Documentation (Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.) |
FIPS is #69536 h1 is sha256, not md5 |
But TLS prf imports md5, and so does SMTP, and so does internal/hash, and also sha1. Whilst FIPS is one angle of this request, I also want to advocate to not use weak or inefficient cryptography for non-fips use case alone. Regular users also deserve better. |
I will double check but it seems that FIPS is #69536 is for the compiled applications. Not for the compiler itself, which has no capability right now to be compiled in a supported and compliant configuration. Note this is w.r.t. compiler itself. |
I don't see any specific proposal here, you may get what you want after #69536 and building the go toolchain with fips enabled. |
Yeah, there are improvements to be made here. As this portion of the tasks has gaps. I will create individual small code commits to explain the small issues that add to this being harder than it could be. |
A reminder that the Go+BoringCrypto GOEXPERIMENT is not a supported mode, and its forks are definitely not supported. Note that TLS 1.0 requires MD5+SHA1 for its KDF, and removing TLS 1.0 support is a major change that should be approached with more motivation than just "it makes FIPS forks easier", if that's what you're asking. |
True. And we also have forever go 1 backwards compat. I think what I am asking for a symetrical godebug to what tls10server is but for client. I.e. tls10client defaults to 1; but allows to set it at application compile time to 0; such that even if client tls version is requested below 1.2, it gets blocked. Also something similar, to block import of crypto/md5 side-effects => as importing it registers it as a valid hash with the crypto subsystem, and can enable code that didn't import md5 to be able to process md5. Such that there is backwards compat for client tls below 1.2; but it is possible to opt out of it; even when not using FIPS-forks. As regular non-fips users should have ability to only support strong cryptography as well (without the need to forcing FIPS usage onto themselves). |
Proposal Details
Goals:
Issues:
go get
functionality, computing and verifying h1: go module hashesgo get
functionalityHopes & Dreams:
go get
functionality with CGO with FIPS-approved/certified cryptographic implementation. However, I am not confident it if it possible to splitgo get
andh1
calculation out of thego
binary into one of thetools
binaries like for examplepkg/tool/$arch/nm
is a standalone program. As that would allow using non-fips-certified hashes in cmd/internal/hash/hash.go whilst the security sensitive tool that does TLS and h1: forgo get
is using strong and optionally certified cryptography.Successful changes:
Minimal proposal:
go get
and h1 calculation functionality into a separate tool binary or a separate pluginI hope the above reasoning and goals are reasonable, the path to resolving all of the above is open-ended however, so not sure if this issue will simply end up being locked for future reference. Or if smaller items get resolved, such that it is 80% done.
Code references:
Sample toolchains that operate in FIPS mode, including the go toolchain itself:
The text was updated successfully, but these errors were encountered: