in-toto/in-toto-golang

GitHub: in-toto/in-toto-golang

这是一个旨在保障软件供应链完整性的 in-toto 框架 Go 语言实现,支持对软件构建流程进行定义、签名及验证。

Stars: 147 | Forks: 54

# in-toto 的 Go 实现 [![build](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/268ca2a97f145347.svg)](https://github.com/in-toto/in-toto-golang/actions?query=workflow%3Abuild) [![Coverage Status](https://coveralls.io/repos/github/in-toto/in-toto-golang/badge.svg)](https://coveralls.io/github/in-toto/in-toto-golang) [![PkgGoDev](https://pkg.go.dev/badge/github.com/in-toto/in-toto-golang)](https://pkg.go.dev/github.com/in-toto/in-toto-golang) [![Go Report Card](https://goreportcard.com/badge/github.com/in-toto/in-toto-golang)](https://goreportcard.com/report/github.com/in-toto/in-toto-golang) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/in-toto/in-toto-golang/badge)](https://api.securityscorecards.dev/projects/github.com/in-toto/in-toto-golang) [in-toto specification](https://github.com/in-toto/docs/blob/master/in-toto-spec.md) 的 Go 实现。 ## 文档 若要阅读文档及示例,请运行: ``` godoc -http :8080 ``` 并导航至 `localhost:8080/pkg/github.com/in-toto/in-toto-golang/` 或者,您也可以使用 [pkg.go.dev](https://pkg.go.dev/github.com/in-toto/in-toto-golang)。 ## 示例 一个非常简单的示例,助您快速上手: ``` package main import ( "time" toto "github.com/in-toto/in-toto-golang/in_toto" ) func main() { t := time.Now() t = t.Add(30 * 24 * time.Hour) var keys = make(map[string]toto.Key) var metablock = toto.Metablock{ Signed: toto.Layout{ Type: "layout", Expires: t.Format("2006-01-02T15:04:05Z"), Steps: []toto.Step{}, Inspect: []toto.Inspection{}, Keys: keys, }, } var key toto.Key key.LoadKey("keys/alice", "rsassa-pss-sha256", []string{"sha256", "sha512"}) metablock.Sign(key) metablock.Dump("root.layout") } ``` ## 构建 下载源码,运行 `make build`。 ## CLI CLI 参考文档可在自动生成的 [docs](doc/in-toto.md) 中找到。 ## 与 SPIFFE/SPIRE 的集成 此 in-toto 实现已与 SPIFFE/SPIRE 集成。 该集成得益于 [ITE-7](https://github.com/in-toto/ITE/blob/master/ITE/7/README.adoc),这是一项为 in-toto 添加 X.509 签名支持的增强功能。 ### 运行演示 若要运行演示,请拉取源代码,安装 Go,并运行 `make test-verify`。这将使用 openssl 生成证书链。 若要使用 SPIRE 运行演示,请拉取源代码,安装 Go 和 Docker, 并运行 `make test-spiffe-verify`。 会生成符合 SPIFFE 标准的叶证书,其中包含与职能人员相对应的 SVID。 in-toto 会使用这些证书来签署链接元数据和布局策略。 在 in-toto 验证过程中,会检查证书约束,以确保构建步骤的链接元数据是使用正确的 SVID 签署的。 ### 布局证书约束 目前支持以下约束: ``` { "cert_constraints": [{ "common_name": "write-code.example.com", "dns_names": [ "" ], "emails": [ "" ], "organizations": [ "*" ], "roots": [ "*" ], "uris": [ "spiffe://example.com/write-code" ] }, { "uris": [], "common_names": ["Some User"] }] } ``` ## (尚)不支持的功能 此 Golang 实现主要专注于 admission controllers 和 kubectl 插件中的验证功能。 因此,其重点是提供一套强大、可审计的核心功能集,而不是广泛(且可能不稳定)的功能集。 换句话说,我们认为当前的功能集已足够稳定,可用于生产环境。 如果您的用例需要其中任何一项功能,请告知我们,我们将尽快提供支持。 同时,我们也欢迎通过 Pull Request 来添加新功能! * [GPG keys](https://github.com/in-toto/in-toto-golang/issues/26)
标签:CI/CD安全, DevSecOps, EVTX分析, Go实现, Go库, Go语言, in-toto, Llama, SPIFFE, SPIRE, 上游代理, 代码签名, 供应链攻击防护, 元数据签名, 布局验证, 开源安全工具, 日志审计, 程序破解, 请求拦截, 软件供应链安全, 软件完整性, 远程方法调用, 逆向工程平台