golang 1.24在密码相关领域的改动
最近把Tape的golang版本升级到1.24了,golang 1.24里自带后量子相关的密码学TLS实践,大家感兴趣的可以自己试一下。
以下是 Go 1.24 在密码学和数学相关领域的主要改动总结:
密码学相关改动
新增包
-
crypto/mlkem
- 新增对 ML-KEM-768 和 ML-KEM-1024(原 Kyber 算法)的支持,这是后量子密钥交换机制,符合 FIPS 203 标准。
-
crypto/hkdf
- 实现 RFC 5869 定义的 HMAC 基于提取和扩展的密钥派生函数(HKDF)。
-
crypto/pbkdf2
- 实现 RFC 8018 定义的基于密码的密钥派生函数(PBKDF2)。
-
crypto/sha3
- 新增对 SHA-3 哈希函数、SHAKE 和 cSHAKE 可扩展输出函数的支持(基于 FIPS 202 标准)。
-
weak
包- 提供弱指针(weak pointers)支持,用于构建内存高效的数据结构(如弱映射、规范化缓存等)。
FIPS 140-3 合规性
- 新增
GOFIPS140
环境变量 和fips140
GODEBUG 设置,支持在构建和运行时启用 FIPS 140-3 模式。 - 标准库内部透明使用符合 FIPS 的算法实现(无需代码改动)。
现有包改进
-
crypto/aes
NewCipher
返回的值不再实现NewCTR
、NewGCM
等方法(这些方法已废弃)。应直接使用crypto/cipher
包中的函数。
-
crypto/cipher
- 新增
NewGCMWithRandomNonce
,生成随机 Nonce 并预置到密文中。 - 弃用
NewOFB
、NewCFBEncrypter
和NewCFBDecrypter
(推荐使用 AEAD 模式或NewCTR
)。 - AES-CTR 模式在 amd64/arm64 上性能提升数倍。
- 新增
-
crypto/ecdsa
- 当随机源为
nil
时,PrivateKey.Sign
现在生成确定性签名(RFC 6979)。
- 当随机源为
-
crypto/rand
Read
函数现在保证不返回错误(遇到错误时程序直接崩溃)。- Linux 6.11+ 通过 vDSO 调用
getrandom
,性能显著提升。 - 新增
Text
函数,生成加密安全的随机文本字符串。
-
crypto/rsa
- 禁止生成或使用小于 1024 位的密钥(可通过
//go:debug rsa1024min=0
临时禁用)。 - 支持 SHA-512/224、SHA-512/256 和 SHA-3 签名。
- 密钥操作在 WebAssembly 上性能提升 2 倍。
- 禁止生成或使用小于 1024 位的密钥(可通过
-
crypto/subtle
- 新增
WithDataIndependentTiming
函数,确保代码在恒定时间内执行(当前仅 arm64 支持 PSTATE.DIT 位)。 XORBytes
现在要求输出与输入完全不重叠或完全重叠(否则 panic)。
- 新增
-
crypto/tls
- 支持加密客户端问候(ECH),通过
Config.EncryptedClientHelloKeys
启用。 - 新增后量子密钥交换机制
X25519MLKEM768
(默认启用)。 - 移除实验性
X25519Kyber768Draft00
支持。
- 支持加密客户端问候(ECH),通过
-
crypto/x509
- 移除
x509sha1
GODEBUG 设置,不再支持 SHA-1 签名验证。 - 改进 RSA 密钥解析和验证逻辑(拒绝更多无效密钥)。
- 支持 RFC 5280 和 RFC 9618 的策略验证。
- 移除
数学相关改动
math/big
Float
、Int
和Rat
类型新增实现encoding.TextAppender
接口。
math/rand
- 废弃的全局
Seed
函数现在无效(需通过GODEBUG=randseednop=0
恢复旧行为)。
math/rand/v2
ChaCha8
和PCG
生成器新增实现encoding.BinaryAppender
接口。
hash
相关包
- 多个哈希函数(
md5
、sha1
、sha256
、sha512
、adler32
、crc32
、crc64
、fnv
)的实现现在支持encoding.BinaryAppender
接口。
hash/maphash
- 新增
Comparable
和WriteComparable
函数,支持对任意可比较值(如 map 键)计算哈希。
其他相关改动
runtime.AddCleanup
:新增更灵活的资源清理机制(优于SetFinalizer
)。weak
包:与runtime.AddCleanup
和maphash.Comparable
结合,支持高效缓存和规范化数据结构。
这些改动显著提升了密码学安全性、性能和后量子计算支持,同时简化了相关 API 的使用。
ref https://go.dev/doc/go1.24