Microsoft's blog post announces changes to their Go distribution starting with Go 1.24 to better align with Federal Information Processing Standards (FIPS). While previous versions offered a partially FIPS-compliant mode, Go 1.24 introduces a fully compliant distribution built with the BoringCrypto module, ensuring all cryptographic operations adhere to FIPS 140-3. This change requires updating import paths for affected packages and may introduce minor breaking changes for some users. Microsoft provides guidance and tooling to help developers transition smoothly to the new FIPS-compliant distribution, encouraging adoption for enhanced security.
This blog post from Microsoft, titled "Go 1.24 FIPS Update," details the changes Microsoft has implemented to ensure their distribution of the Go programming language, version 1.24 onwards, complies with the Federal Information Processing Standards (FIPS) 140-3. FIPS 140-3 is a U.S. government computer security standard used to accredit cryptographic modules, ensuring they meet specific requirements for robustness and security. The post highlights the challenges and solutions involved in achieving this compliance for Go.
Historically, Go's crypto/tls package defaulted to using OpenSSL for its cryptographic operations. However, simply using a FIPS-validated OpenSSL module was insufficient for overall Go FIPS 140-3 compliance. Go's internal handling of cryptographic algorithms and its dynamic selection based on availability created complexities in adhering strictly to FIPS-approved algorithms and processes.
The core change introduced by Microsoft involves switching Go's cryptographic backend from OpenSSL to the BoringSSL library when operating in FIPS mode. BoringSSL, a fork of OpenSSL developed by Google, offers a more streamlined approach to cryptographic operations, simplifying the process of FIPS validation. Microsoft specifically uses a FIPS-validated module of BoringSSL.
This transition to BoringSSL necessitated several adjustments within Go itself. The blog post details changes made to the crypto/tls package to function seamlessly with BoringSSL. Furthermore, Microsoft describes the modified build process for Go 1.24 and later, allowing developers to compile Go binaries that are FIPS 140-3 compliant. This process involves setting specific environment variables to trigger the use of BoringSSL and ensure adherence to FIPS-compliant settings.
Importantly, the blog post emphasizes that the FIPS-compliant mode is opt-in. By default, Go continues to function as before, using the system's OpenSSL. Developers who require FIPS 140-3 compliance must explicitly configure their build environment to enable the FIPS mode. This allows developers to choose the appropriate configuration based on their specific security needs. The post also highlights Microsoft's commitment to maintaining FIPS 140-3 compliance for their Go distribution with future Go releases.
Finally, the post provides clear instructions for developers on how to build FIPS-enabled Go binaries. This includes setting the necessary environment variables and ensuring the correct BoringSSL module is available. It also mentions the availability of pre-built FIPS-enabled Go distributions directly from Microsoft, simplifying adoption for users who prefer not to compile from source.
Summary of Comments ( 16 )
https://news.ycombinator.com/item?id=42965404
HN commenters discuss the implications of Microsoft's decision to ship a FIPS-compliant Go distribution. Some express concern about the potential for reduced performance and increased complexity due to the use of the BoringCrypto module. Others question the actual value of FIPS compliance, particularly in Go where the standard crypto library is already considered secure. There's discussion around the specific cryptographic primitives affected and whether the move is driven by government contract requirements. A few commenters appreciate Microsoft's contribution, seeing it as a positive step for Go's adoption in regulated environments. Some also speculate about the possibility of this change eventually becoming the default in Go's standard library.
The Hacker News post titled "Microsoft Go 1.24 FIPS changes" linking to a Microsoft blog post about Go 1.24 FIPS updates has generated several comments discussing the implications and context of these changes.
One commenter highlights the significance of FIPS compliance for government and regulated industries, emphasizing the need for validated cryptographic modules. They point out that while open-source libraries like BoringSSL might be FIPS compliant internally, they often lack the formal validation necessary for official FIPS compliance. This comment clarifies the distinction between using FIPS-compliant algorithms and achieving full FIPS 140 validation, which involves a rigorous certification process.
Another commenter questions the broader security implications of FIPS compliance, suggesting that achieving FIPS 140 validation might not inherently make a system more secure. They also express concern about potential performance trade-offs associated with FIPS-validated cryptographic modules.
A subsequent reply counters this argument by suggesting that FIPS validation acts as a baseline security requirement, ensuring a minimum level of cryptographic security even if it doesn't guarantee complete protection against all vulnerabilities. They emphasize the importance of FIPS compliance in highly regulated environments as a way to demonstrate adherence to established security standards.
Another thread of discussion revolves around the choice of cryptographic libraries and the challenges of managing FIPS compliance in different environments. One commenter mentions the availability of FIPS-validated OpenSSL modules and their potential relevance to Go's FIPS compliance efforts. Another user shares their experience managing FIPS-validated cryptographic modules, noting the complexities involved in ensuring their correct deployment and maintenance across various operating systems.
Finally, a comment brings attention to the "boringcrypto" project, an initiative within the Go community aimed at providing a FIPS-compliant cryptographic library specifically designed for Go. This comment suggests that "boringcrypto" could play a crucial role in enabling Go developers to meet FIPS requirements.
Overall, the comments on the Hacker News post reflect a range of perspectives on FIPS compliance within the context of Go development. They highlight the importance of FIPS validation in certain industries, discuss the potential security and performance implications, and explore various approaches to achieving FIPS compliance with Go. The discussion also demonstrates a clear awareness within the Go community of the challenges and opportunities related to FIPS compliance.