Golang中crypto/hmac是否符合FIPS规范?

Golang中crypto/hmac是否符合FIPS规范? 有人能帮我澄清关于 Go 语言 crypto/hmac 包的困惑吗?

参考: https://golang.org/pkg/crypto/ 以下细节取自上述链接,其中指出 HMAC 包符合 FIPS 标准。 “hmac 包实现了美国联邦信息处理标准出版物 198 中定义的密钥哈希消息认证码(HMAC)。

然而,另一方面,这个链接 https://kupczynski.info/2019/12/15/fips-golang.html 指出 Go 语言的 crypto 包本身并不符合 FIPS 标准。他们主张使用 BoringSSL、RedHat 等替代方案。

image

我对 Go 语言还比较陌生,急需这方面的帮助。请帮帮我。

提前感谢


更多关于Golang中crypto/hmac是否符合FIPS规范?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

我不了解FIPS或HMAC,但根据您引用的包文档,Go包实现了该算法,但根据截图,该实现并未“经过验证”。

更多关于Golang中crypto/hmac是否符合FIPS规范?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


根据 Go 官方文档,crypto/hmac 包确实实现了 FIPS 198 标准中定义的 HMAC 算法。这意味着该包的算法实现符合 FIPS 198 规范。然而,这并不等同于整个 Go 语言的加密模块或你的应用程序通过了 FIPS 140-2 认证。

FIPS 140-2 是美国联邦政府针对加密模块的安全标准认证,它要求整个加密模块(包括算法实现、密钥管理、随机数生成等)通过严格的测试和验证。Go 语言的 crypto 包本身并未整体通过 FIPS 140-2 认证。因此,如果你的项目要求使用经过 FIPS 140-2 认证的加密模块,那么纯 Go 的实现可能不符合要求。

在实际使用中,如果你只需要 HMAC 算法符合 FIPS 198 标准,那么 crypto/hmac 是合适的。但如果你需要整个应用程序或系统通过 FIPS 140-2 认证,你可能需要考虑使用经过认证的第三方库(如 BoringSSL)或平台(如 Red Hat Enterprise Linux 的 Go 版本)。

以下是一个使用 crypto/hmac 的示例代码,展示了如何生成 HMAC-SHA256:

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func main() {
    key := []byte("your-secret-key")
    message := []byte("message to authenticate")

    // 创建 HMAC-SHA256 哈希器
    h := hmac.New(sha256.New, key)
    h.Write(message)
    signature := h.Sum(nil)

    // 输出十六进制编码的签名
    fmt.Println("HMAC-SHA256:", hex.EncodeToString(signature))

    // 验证签名
    valid := hmac.Equal(signature, hmac.New(sha256.New, key).Sum(nil))
    fmt.Println("Signature valid:", valid)
}

这段代码演示了如何使用 crypto/hmac 生成和验证 HMAC-SHA256 签名,其算法实现符合 FIPS 198 标准。但请注意,这并不保证整个加密模块通过 FIPS 140-2 认证。

回到顶部