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. Docker镜像的内部机制

    Docker镜像的内部机制 镜像就是一个打包文件,里面包含了应用程序还有它运行所依赖的环境,例如文件系统.环境变量.配置参数等等. 环境变量.配置参数这些东西还是比较简单的,随便用一个 manifes ...

  2. etcd 快速入门

    一.认识etcd 1.1 etcd 概念 从哪里说起呢?官网第一个页面,有那么一句话: "A distributed, reliable key-value store for the mo ...

  3. 在Ubuntu上安装php7.2、php7.3、php7.4

    目录 开始之前 在Ubuntu 18.04或16.04上安装PHP 7.4 更新Ubuntu 添加PHP存储库 安装PHP 7.4 在Ubuntu 16.04上安装PHP 7.2 更新Ubuntu 添 ...

  4. Docker Swarm(一)

    Docker Swarm(一)即使有了Docker Compose,项目的部署仍然存在问题,因为Docker Compose只能把项目所有的容器部署在同一台机器上,这在生产环境下是不现实的.Docke ...

  5. EBUSY: resource busy or locked, rmdir

    方案一: 方案二: !!! 出现问题后,千万不要忽略npm提示你的警告... 如果以上两种方案还未解决,那么大概率是因为你的npm版本较低导致的,升级你的npm. cnpm install -g np ...

  6. Java虚拟机代码是如何一步一步变复杂且难以理解的?

    有相关统计数据显示,Java开发者有1000万+,这么多的人每天都在使用Java虚拟机进行开发,不过真正看过虚拟机代码的人应该非常非常少吧,可能有些人研究过,不过由于Java虚拟机是一个高度复杂的系统 ...

  7. asp.net里cookie、session进一步理解

    参照: session+cookie简单讲解以及持久化登录实现_session实现用户登录_AkagiSenpai的博客-CSDN博客 sessionID和cookie - 哈哈呵h - 博客园 (c ...

  8. ctf.show刷题记录_web(1-10)

    ctf平台(ctfshow) `https://ctf.show/ 1.签到 解题:base64解码 ctfshow{0da357d0-359b-47e1-80dc-5c02212725e5} 2.w ...

  9. mysql免密登录

    开启mysql免密登录, vi /etc/my.cnf [mysqld]下添加 skip-grant-tables , 保存后重启mysql服务:service mysqld restart

  10. LitePal库---DataSupport类被弃用

    用LitePalSupport类替换 在使用LitePal库进行CRUD时需要我们的类继承DataSupport类,发现这个类被弃用了, /** * DataSupport is deprecated ...