theupdateframework/go-tuf
GitHub: theupdateframework/go-tuf
go-tuf 是用于安全软件更新的框架TUF的Go语言实现,旨在保护更新流程免受供应链攻击。
Stars: 705 | Forks: 119
[](https://github.com/theupdateframework/go-tuf/actions/workflows/ci.yml?query=branch%3Amaster)
[](https://codecov.io/github/theupdateframework/go-tuf)
[](https://pkg.go.dev/github.com/theupdateframework/go-tuf)
[](https://goreportcard.com/report/github.com/theupdateframework/go-tuf)
[](https://opensource.org/licenses/Apache-2.0)
#
go-tuf/v2 - 用于保护软件更新系统的框架
[更新框架 (The Update Framework, TUF)](https://theupdateframework.io/) 是一个用于
安全内容分发和更新的框架。它可防御多种类型的
供应链攻击,并在系统遭受入侵时提供韧性。
## 关于更新框架
更新框架 (TUF) 的设计有助于开发者维护软件更新系统的安全性,
即使仓库或签名密钥遭到攻击者入侵。
TUF 提供了一个灵活的
[规范](https://github.com/theupdateframework/specification/blob/master/tuf-spec.md)
该规范定义了开发者可在任何软件更新系统中使用
或根据自身需求重新实现的功能。
TUF 由 [Linux 基金会](https://www.linuxfoundation.org/) 主办,隶属于
[云原生计算基金会](https://www.cncf.io/) (CNCF),其设计已被多家科技公司和开源组织
[在生产环境中使用](https://theupdateframework.io/adoptions/)。
更多关于 TUF 的信息,请访问 [TUF 官网](https://theupdateframework.com/)!
## 概述
go-tuf v2 项目提供了一个轻量级库,具有以下功能:
* 创建、读取和写入 TUF 元数据
* 采用面向对象的简便方式与 TUF 元数据进行交互
* 一致性快照
* 签署和验证 TUF 元数据
* 支持 TUF 最新规范中引用的 ED25519、RSA 和 ECDSA 密钥类型
* 顶层角色委派
* 通过标准委派和哈希桶委派进行目标委派
* 支持[简洁哈希桶委派](https://github.com/theupdateframework/taps/blob/master/tap15.md),可显著减小 TUF 元数据的大小
* 支持元数据中的未知字段(即通过 `root.Signed.UnrecognizedFields["some-unknown-field"]` 保留和访问,也用于验证/签名(如果包含在元数据的 Signed 部分中))
* TUF 客户端 API
* TUF 多仓库客户端 API(实现了 [TAP 4 - 多仓库对受托目标的共识](https://github.com/theupdateframework/taps/blob/master/tap4.md))
## 示例
有几个示例可以作为如何使用该库及其功能的指南,包括:
* [basic_repository.go](examples/repository/basic_repository.go) 示例,演示如何*手动*使用底层元数据 API 创建和
维护仓库元数据。
要运行它,请执行 `make example-repository`(生成的文件位于 `examples/repository/` 目录)。
* [client_example.go](examples/client/client_example.go) 示例,演示如何使用 [updater](metadata/updater/updater.go) 包实现一个客户端。
要运行它,请执行 `make example-client`(生成的文件位于 `examples/client/` 目录)。
* [tuf-client CLI](examples/cli/tuf-client/) - 一个实现更新框架 (TUF) 规范中指定客户端工作流程的命令行工具。
要运行它,请执行 `make example-tuf-client-cli`。
* [多仓库客户端示例 (TAP4)](examples/multirepo/client/client_example.go) 演示如何使用 [multirepo](metadata/multirepo/multirepo.go) 包实现一个多仓库 TUF 客户端。
要运行它,请执行 `make example-multirepo`。
## 包详细信息
### `metadata` 包
* `metadata` 包提供了一种对元数据文件的抽象,该抽象严格遵循 TUF 规范的文档格式。此 API 处理文件和字节流的序列化与反序列化。它还涵盖了创建和验证元数据签名的过程,并使访问和修改元数据内容变得更加容易。它纯粹专注于单个元数据块,不提供诸如“仓库”或“更新工作流”之类的概念。
### `trustedmetadata` 包
* `TrustedMetadata` 实例确保其包含的元数据集合在整个客户端更新工作流中都是有效且可信的。它提供了便捷的方式来更新元数据,由调用者决定更新哪些内容。
### `config` 包
* `config` 包存储 `Updater` 实例的配置。
### `fetcher` 包
* `fetcher` 包定义了一个用于抽象网络下载的接口。
### `updater` 包
* `updater` 包提供了 TUF 客户端工作流的实现。
它提供了安全查询和下载目标文件的方式,同时在后台处理 TUF 更新工作流。它基于元数据 API 实现,可以相对轻松地用于实现各种 TUF 客户端。
### `multirepo` 包
* `multirepo` 包提供了 [TAP 4 - 多仓库对受托目标的共识](https://github.com/theupdateframework/taps/blob/master/tap4.md)的实现。它提供了在多个仓库中安全搜索特定目标的功能。它提供了实现所需的功能,以使拥有独立信任根的多个仓库能够对相同的目标进行签名确认,从而有效地建立“与”关系,并确保获取的任何文件都是可信的。它提供了一种使用 `map.json` 文件初始化多个仓库的方式,以及安全查询和下载目标文件的机制。它基于 Updater API 实现,可以相对轻松地用于实现各种多仓库 TUF 客户端。
## 文档
* [文档](https://pkg.go.dev/github.com/theupdateframework/go-tuf/v2)
* [TUF 设计简介](https://theupdateframework.io/overview/)
* [TUF 规范](https://theupdateframework.github.io/specification/latest/)
## 历史 - 旧版 go-tuf 与 go-tuf/v2
[旧版 go-tuf (v0.7.0)](https://github.com/theupdateframework/go-tuf/tree/v0.7.0) 代码库由于其初始设计决策,难以维护且容易出错。现在它已被弃用,取而代之的是 go-tuf v2(最初源自 [rdimitrov/go-tuf-metadata](https://github.com/rdimitrov/go-tuf-metadata)),其初衷是提供一个受 [python-tuf](https://github.com/theupdateframework/python-tuf) 设计决策深刻影响的 TUF Go 语言实现。
## 联系方式
欢迎在 [CNCF Slack](https://slack.cncf.io/) 的 [#tuf](https://cloud-native.slack.com/archives/C8NMD3QJ3) 和/或 [#go-tuf](https://cloud-native.slack.com/archives/C02D577GX54) 频道中提出问题、反馈和建议。
我们致力于使规范易于实现,因此如果您遇到任何不一致之处或有任何困难,请通过发送电子邮件或在 GitHub 的 [规范仓库](https://github.com/theupdateframework/specification/issues) 中报告问题告知我们。
标签:CNCF项目, CVE, DNS解析, EVTX分析, Go语言, TLS抓取, TUF框架, 仓库安全, 供应链攻击防护, 内容交付, 安全更新, 密钥轮换, 开源项目, 数字签名, 日志审计, 更新框架, 程序破解, 签名验证, 软件安全, 软件更新系统, 防护框架