TUF基本介绍

TUF 是一个为软件更新系统设计的安全框架,最初由纽约大学的 Secure Systems Lab 提出。它的目标是解决传统软件更新过程中的各种安全问题(如中间人攻击、回滚攻击、密钥泄露等),通过多角色职责分离、多签名机制和密钥轮换机制来提高软件供应链的抗攻击能力和韧性

职责分派(Role Delegation)

将软件更新所涉及的权限分给不同角色,各自负责不同类型的元数据,降低“单点控制”的风险。

好处: 如果一个角色(如 timestamp)密钥泄露,其能力有限;不会影响整个更新系统。

多密钥 + 阈值签名(Threshold Signatures)

  • 每个角色可以设置多个密钥,以及一个 签名阈值 k-of-n

    • 例如:targets 角色可以设置“必须有 2 个开发者签名才有效”。

好处: 即使一个开发者的密钥泄露,攻击者也无法伪造有效更新。

密钥轮转 & 撤销(Key Rotation & Revocation)

  • 所有公钥都被记录在 root.json 中,因此可以通过发布新版本的 root.json 来更换密钥。
  • 密钥丢失或泄露后,管理员可通过 root 签名发布新的密钥信息。

好处: 密钥是可更新的,系统不依赖于长期安全的密钥对。

相比传统软件更新的优势

传统方式 存在问题 TUF 对应的改进
单密钥签名包 密钥泄露 = 全系统沦陷 多密钥 + 阈值签名
所有操作权限集中在一处 单点失败问题严重 明确角色职责分工,攻击面变小
没有更新验证链 无法追踪或信任 所有元数据签名链确保完整性
密钥一旦泄露难以替换 无轮转机制 通过 root.json 灵活轮转密钥
无法识别元数据或内容是否篡改 无法抵御回滚,冻结攻击
,混合匹配攻击
snapshot + timestamp 双重保护

定义元文件

元文件定义

TUF中被保护的软件或软件包称为Target File,保护软件包的元文件称为Metadata File,分为Root.jsonTimestamp.jsonSnapshot.jsonTarget.json

Notary中只存储和操作元数据文件,不存储软件或软件包本身。

角色划分

角色名称 职责概要 签名对象 密钥位置 由谁管理 签名要求
Root 管理和分发所有其它角色的公钥。支持密钥轮换、撤销。 Root.json 离线 仓库管理员 一般需 ≥2-of-n 签名
Targets 指定哪些镜像(或文件)被信任,可发布。支持 Delegation。 Targets.json 离线 项目负责人、开发者团队 一般需 1 或多签名
Snapshot 确保 targets(及其 delegation)元数据的一致性与版本管理,防止回滚和混合匹配攻击。 Target.json及其Delegation 可存服务端 自动化构建系统或服务器 通常 1 个签名
Timestamp 指出最新的 snapshot 版本,减轻冻结攻击。 Snapshot.json 服务端 自动化构建系统或服务器

定义数据格式与验证方式

参考网址:TUF规范

数字签名概念,为什么不依赖信道安全和第三方背书。

威胁模型

  • 恶意更新,混合匹配攻击:阈值签名,哈希校验
  • 回滚攻击:json文件版本号,snapshot版本号
  • 冻结攻击:timestamp快速过期
  • 密钥泄漏:
    • Timestamp泄漏造成冻结攻击
    • Release,Target或Release+Target单独泄漏不造成危险
    • Timestamp+Snapshot造成冻结攻击和Mix-Match
    • Timestamp+Snapshot+Target全部泄漏或者Root泄漏,系统危险
    • Root密钥泄漏个数少于Threshold时,不会使系统完全失信

系统架构与工作流

系统架构与初始化流程

首次信任配置,公钥注册。

元数据更新流程

更新Root.json(密钥轮转与撤销)

  1. N表示当前可信根元数据文件的版本号。
  2. 尝试下载Root.json的N+1版本,最多X字节
  3. 检查是否存在恶意软件攻击
    1. 需要超过Threshold个版本N的Root.json签名验证通过(垂直验证)
    2. 需要超过Threshold个版本N+1的Root.json签名验证通过(水平验证)
  4. 检查是否存在回滚攻击
    1. 新Root.json版本号 = 旧Root.json版本号 + 1
  5. 检查是否存在冻结攻击:中间Root.json过期没有关系
  6. 持久化Root.json
  7. 重复2~9步
  8. 检查是否存在冻结攻击:最终的Root.json文件过期时间戳未到,且高于固定更新时间
  9. 持久化最新Root.json

Root.json更新需要逐级建立信任链,也就是从版本1,逐级更新到版本N,中间不能跳跃。

更新Timestamp.json

  1. 下载Timestamp.json,最多X字节
  2. 检查是否存在恶意软件攻击:用Root.json记录的公钥验证Timestamp.json签名,需要超过Threshold个签名验证通过
  3. 检查是否存在回滚攻击
    1. 新Timestamp.json版本号 > 旧Timestamp.json版本号
    2. 新Timestamp.json中记录的Snapshot.json版本号 >= 旧Timestamp.json中记录的Snapshot.json版本号
  4. 检查是否存在冻结攻击:新TimeStamp.json文件过期时间戳未到,且高于固定更新时间
  5. 持久化Timestamp.json

更新Snapshot.json

  1. 下载Snapshot.json,最多X字节
  2. 防止中间人攻击者的混合搭配攻击:校验新Snapshot.json的哈希值是否与Timestamp.json记录的哈希值一致
  3. 检查是否存在恶意软件攻击:用Root.json记录的公钥验证Snapshot.json签名,需要超过Threshold个签名验证通过
  4. 检查是否存在回滚攻击
    1. 新Snapshot.json版本号 = 最新的Timestamp.json中记录的Snapshot.json版本号
    2. 新Snapshot.json中记录的Target.json版本号 >= 旧Snapshot.json中记录的Target.json版本号
  5. 检查是否存在冻结攻击:新Snapshot.json文件过期时间戳未到,且高于固定更新时间
  6. 持久化Snapshot.json

更新Target.json

  1. 下载Target.json,最多X字节
  2. 防止中间人攻击者的混合搭配攻击:校验新Target.json的哈希值是否与Snapshot.json记录的哈希值一致
  3. 检查是否存在恶意软件攻击:用Root.json记录的公钥验证Target.json签名,需要超过Threshold个签名验证通过
  4. 检查是否存在回滚攻击
    1. 新Target.json版本号 = 最新的Snapshot.json中记录的Target.json版本号
  5. 检查是否存在冻结攻击:新Target.json文件过期时间戳未到,且高于固定更新时间
  6. 持久化Target.json

部署模型

Delegation与路径划分

在实际生产项目中,镜像往往不是直接挂在顶层的Target.json下,而是创建多个Delegation角色,每个 Delegation 角色(如 targets/releases、targets/dev-team-a)都可以指定它负责的 路径前缀(path pattern),用于匹配特定的镜像名或 target 路径。

projects/
├── notary
├── docker
internal/
├── monitor
├── backup
角色 负责路径(path pattern) 所属团队
targets/releases projects/notary/, projects/docker/ 官方发布
targets/notary projects/notary/dev/* 团队 A 维护
targets/docker projects/docker/dev/* 团队 B 维护
targets/internal internal/* 内部维护者专属

存在的问题

  • 委托顺序问题:当多个角色关联到相同文件时,存在歧义

    => 区分优先级:Target.json中的委托声明顺序作为优先级
  • 故障转移问题:无法做到bar-*都通过B角色校验,其他通过C角色校验

    => 引入Terminating标记:比如标记B为Terminating,那么在B所关联的文件中没有找到bar-*文件的话,则也不会在其他角色下搜索相关文件。

最大安全模型和传统安全模型

基本描述

安全模型 简要描述 特点
Maximum Security Model (MSM) 精细化的委托,只有Timestmap Key保存在服务器,其余密钥都离线保存 安全性高,不易部署
Legacy Security Model (LSM) 部分签名操作由服务器完成,密钥(如 Snapshot、Timestamp)都保存在服务器上 安全性一般,容易部署

Project类型

MSM和LSM把各个软件包根据签名与否,划分为如下集合,称为Project:

项目类型 定义与特点 密钥类型 签名人 所属模型
Claimed Project 由开发者认领并签名 离线 开发者 Both
New Project 刚发布,开发者未注册签名 key 在线 Both
Rarely Updated Project 长期无更新但仍需信任 离线 管理员 MSM
Unclaimed Project 没有绑定具体维护者,未进行“认领” 在线 LSM

软件包生命周期

新镜像

  • 刚创建:New Project
  • 开发者进行签名:转移到Claimed Project
    • 长久未更新:转移到Rarely Update Project
  • 开发者没有进行签名:转移到Unclaimed Project

    原有镜像:
  • 未签名:转移到Unclaimed Project
    • 管理员代签:转移到Rarely Project
  • 已签名:转移到Claimed Projet

LSM转换为MSM

  • 从上往下:角色优先级递减
  • LSM -> MSM:Unclaimed Project -> Rarely Update Project

TUF系统概述的更多相关文章

  1. JFS 文件系统概述及布局分析

    JFS 文件系统概述及布局分析 日志文件系统如何缩短系统重启时间 如果发生系统崩溃,JFS 提供了快速文件系统重启.通过使用数据库日志技术,JFS 能在几秒或几分钟之内把文件系统恢复到一致状态,而非日 ...

  2. linux学习笔记:第二单元 UNIX和Linux操作系统概述

    第二单元 UNIX和Linux操作系统概述 UNIX是什么 UNIX操作系统的特点 UNIX 与Linux的关系 GNU项目与自由软件 GUN计划 自由软件意味着什么 Linux简介 Linux是什么 ...

  3. 自学Linux Shell8.1-linux文件系统概述及操作

    点击返回 自学Linux命令行与Shell脚本之路 8.1-linux文件系统概述及操作 1. linux支持的文件系统 Windows常用的分区格式有三种,分别是FAT16.FAT32.NTFS格式 ...

  4. 操作系统概述(os 笔记一)

    操作系统概述 操作系统的目标和功能 1.目标:作为用户/计算机接口 ​ 计算机的使用人群大致可以分为三类,终端用户,程序开发者,操作系统设计人员. 对于终端用户,即应用程序的用户来说,他们通常不关注计 ...

  5. GPS时间系统概述和世界时系统

    6.1  GPS时间系统概述 时间包含"时刻"和"时间间隔"2个概念.所谓时刻,即发生某一现象的瞬间.在天文学和卫星定位中.与所获数据对应的时刻也称为历元.时间 ...

  6. WPF Layout 系统概述——Measure

    原文:WPF Layout 系统概述--Measure 前言 在WPF/Silverlight当中,如果已经存在的Element无法满足你特殊的需求,你可能想自定义Element,那么就有可能会面临重 ...

  7. WPF Layout 系统概述——Arrange

    原文:WPF Layout 系统概述--Arrange Arrange过程概述 普通基类属性对Arrange过程的影响 我们知道Measure过程是在确定DesiredSize的大小,以便Arrang ...

  8. Arduino 计算机视觉系统概述

    计算机视觉系统概述 计算机视觉系统是最近比较热门的研究领域,今天开始给大家介绍下计算机视觉相关的知识. 视觉是人的所有感官中最敏感的一种,人的视觉可以感知环境,而机器的视觉却很难感知环境 为了解决计算 ...

  9. Ansible 系统概述与部署

    Ansible 系统概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet但是有一个不同和优点是我们不需要在节点中安装 ...

  10. CNCF 宣布 TUF 毕业 | 云原生生态周报 Vol. 33

    作者 | 孙健波.汪萌海.陈有坤.李鹏 业界要闻 CNCF 宣布 TUF 毕业 CNCF 宣布 TUF(The update Framework)项目正式毕业,成为继 Kubernetes.Preme ...

随机推荐

  1. Django实战项目-学习任务系统-文章汇总

    学习任务系统1.0版本已经基本完成了.现在按顺序整理下文章和链接,按照开发时间顺序列举,方便想要完整学习的人. 理论上说,按照文章代码可以搭建该系统的70%主体功能,剩下一些小的功能自己参考现有代码学 ...

  2. 探秘Transformer系列之(15)--- 采样和输出

    探秘Transformer系列之(15)--- 采样和输出 目录 探秘Transformer系列之(15)--- 采样和输出 0x00 概述 0x01 Generator 1.1 Linear 1.2 ...

  3. [源码系列:手写spring] IOC第一节:简单bean容器

    本专栏带领大家手写一遍spring的核心代码,包括IOC,AOP,三级缓存... 第一节较为简单,后面的章节会逐渐提升代码量和复杂度,喜欢的同学记得订阅哦  ̄▽ ̄ 定义一个简单的bean容器BeanF ...

  4. CoreOS 手动更新

    以阿里云 ECS 安装的 CoreOS 为例,你家装的 CoreOS 基本也一样啦. 查看和修改更新组 第一个问题:"什么是更新组?",请先看CoreOS 发行版本介绍 # 查看更 ...

  5. 重磅!微信官方恢复了个人红包封面的制作入口,限时开放!!.md

    前两天微信开放了个人红包封面,引起了大家欢呼雀跃~ 可惜--没几个小时,因为一个不可描述的原因,官方小程序下架了-- 但是, 现在好消息来啦, 官方又恢复个人红包封面制作啦~ 本文教你如何制作红包封面 ...

  6. Eclipse 安装Server-Apache Tomcat 选择(Tomcat 9.0选项)

    1.打开组件安装 Eclipse→Help→Install New Software 2.输入当前eclipse对应版本(例如:2022-06),选择提示的官方路径 3.选择最底下的Web, XML, ...

  7. Selenium反屏蔽处理

    Selenium自动化过程,在浏览器内会显示如下字样 当出现此内容时,有些网站就会判定是机器在进行操作,然后网站会加载防机器操作程序,如下图滑块验证 触发反机器操作的原理大概如下 解决方法 具体代码, ...

  8. (转)python批量提取PDF第一页输出为图片

    一:步骤 1.使用input输入路径 2.生成图片存户路径同存放路径 3.生成图片为PNG格式 4.支持自定义截取页数,建议为第一页 二:安装扩展类 pip install PyMuPDF 三:示例代 ...

  9. 还有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案

    与上一篇区别在于,详情里面的模板通常是通用的,被定义在样式文件中,被重复使用,因此无法为其添加后台代码,如果能添加后台代码,请翻阅第一篇:所以需要用到命令的方式来辅助事件的抛出,当然还可以利用第三方库 ...

  10. 题解:CF1955E Long Inversions

    简单题. 考虑贪心地进行修改,每次选择字符串中最左侧第一个 000,并以该位置为左端点进行一次修改,可以发现若 lenlenlen 合法则这样一定构造出全 111 串. 然而直接暴力实现是 O(n2) ...