当前位置: 首页 > news >正文

证书学习(六)TSA 时间戳服务器原理 + 7 个免费时间戳服务器地址

目录

    • 一、简介
      • 1.1 什么是时间戳服务器
      • 1.2 名词扩展
      • 1.3 用时间戳标记顺序
      • 1.4 7 个免费TSA时间戳服务器地址(亲测可用)
      • 1.5 RFC 3161 标准
    • 二、时间戳原理
      • 2.1 时间戳服务工作流程
      • 2.2 验证工作流程
      • 2.3 举个例子
      • 2.4 时间戳原理总结
    • 三、代码实现
      • 3.1 curl 命令请求时间戳
      • 3.2 java 代码请求、校验时间戳

在这里插入图片描述

  • 时间戳在线工具: https://www.freetsa.org/index_zh.php#tcp

背景:

当我们在浏览器上进行数字签名的时候,时间戳服务(TSA)可以帮我们解决了如何证明签署时间的有效性问题,签名时间不可篡改。那么它的实现原理是什么呢?让我们一起来看下。

一、简介

1.1 什么是时间戳服务器

  • 时间戳服务器,即 Time-Stamp Authority(TSA),是一种 用于为数字签名或其他数据提供时间戳的服务。时间戳服务器的主要作用是 确保数据在特定时间点的存在性和完整性,从而增加数字签名的法律效力和不可否认性。时间戳服务器 使用 RFC 3161 标准 生成的时间戳令牌,确保了时间信息的可信度。

1.2 名词扩展

  • Time-Stamp Service时间戳服务
  • Time-Stamp Token时间戳标记
  • Trusted Third Part(TTP)可信第三方
  • Time-Stamp Authority(TSA)时间戳服务机构

1.3 用时间戳标记顺序

众所周知,对数据做数字签名可以保证其完整性,进行数据源鉴别,提供抵赖性,但这些还不够。

例如下面的场景:

  • 假设 A 和 B 因为发表了内容完全相同的两篇小说作品,从而产生了著作权归属的争议。在这种情况下,两人都能够出示 “自己” 小说的签名,但对解决争端毫无作用,这是因为 缺少了判断著作权归属的重要依据——时间先后顺序

再例如下面这个场景:

  • 假设 C 丢失了自己的私钥,于是向 CA 申请撤销了自己的证书。此后,D 声称 C 与自己签订了一项合同却未依约进行,且经验证,合同的数字签名是用 C 的私钥签署的,C 却标识该签名是自己的私钥丢失后有人冒充所为。已知 CA 签发的 CRL 中有证书撤销的时间,在这种情况下,如果能通过合理可靠渠道证明合同所签订时间,从而判定合同签订和证书撤销(私钥失效)的时间,那么问题就迎刃而解了

在数字业务中,标记一份文档出现的时间或一件事的发生顺序是很有必要的,这就像对原始数据加盖了一枚包含权威时间信息的印章,故被称为 时间戳。在 PKI 中,时间戳服务可由第三方提供,并不失去公正性和权威性。

时间戳服务提供的结果称为 时间戳标记,它将当前的时间(可以是一个代表顺序的数字)和原始数据绑定在一起,需要验证的时候可作为证据证明原始数据在时间戳标明的时间之前已经存在,根据时间的不可重复性,时间戳就可用来判断原始数据出现(或其代表的时间发生的)的顺序。

什么是PKI?

  • PKI(Public Key Infrastructure,公钥基础设施)是一种用于创建、管理、分发、使用、存储和撤销数字证书及公钥的技术体系。PKI 的 主要目的是确保数字证书和公钥的安全性和可信度,广泛应用于网络安全、身份验证、数据加密和数字签名等领域。

PKI 的基本组成:

  • 证书颁发机构(CA, Certificate Authority)
  • 注册机构(RA, Registration Authority)
  • 证书库(Certificate Repository)
  • 证书吊销列表(CRL, Certificate Revocation List)
  • 在线证书状态协议(OCSP, Online Certificate Status Protocol)
  • 证书政策(CP, Certificate Policy)
  • 证书实践声明(CPS, Certification Practice Statement)

PKI 的工作流程:

  • 证书申请、证书签发、证书使用、证书吊销、证书更新。

1.4 7 个免费TSA时间戳服务器地址(亲测可用)

  1. http://timestamp.digicert.com
  2. http://aatl-timestamp.globalsign.com/tsa/aohfewat2389535fnasgnlg5m23
  3. https://timestamp.sectigo.com
  4. http://timestamp.entrust.net/TSS/RFC3161sha2TS
  5. http://tsa.swisssign.net
  6. http://tsa.quovadisglobal.com/TSS/HttpTspServer
  7. http://timestamp.apple.com/ts01

时间戳地址的 使用方法 参考下面的 “三、代码实现”。

1.5 RFC 3161 标准

  • RFC 3161 标准,定义了一种用于获取和验证时间戳的协议,旨在为数字签名和其他数据提供可信的时间戳服务。

RFC 3161 的主要内容:

  1. 协议概述

    • RFC 3161 描述了一种时间戳协议(TSP),用于向时间戳服务器(TSA, Time Stamping Authority)请求时间戳,并验证时间戳的有效性。
    • 该协议基于 X.509 公钥基础设施(PKI),确保时间戳的完整性和不可否认性。
  2. 时间戳请求

    • 生成请求:客户端生成时间戳请求(TimeStampRequest),其中包含待时间戳的数据的哈希值(如 SHA-256)。
    • 请求格式:时间戳请求使用 ASN.1 编码格式,符合《RFC 3161》中定义的结构。
  3. 时间戳响应

    • 生成响应:时间戳服务器接收到请求后,生成时间戳令牌(TimeStampToken),包含哈希值、时间戳和服务器的数字签名。
    • 响应格式:时间戳响应(TimeStampResponse)也使用 ASN.1 编码格式,包含时间戳令牌和状态信息。
  4. 时间戳令牌

    • 时间戳令牌包含以下信息:

      • 哈希值:请求中的数据哈希值。
      • 时间戳:服务器生成时间戳的时间。
      • 签名:使用时间戳服务器的私钥对哈希值和时间戳进行签名,确保时间戳的完整性和不可否认性。
    • 格式:时间戳令牌通常是一个 CMS(Cryptographic Message Syntax)格式的消息。

时间戳与 RFC 3161 的关系:

  1. 确保时间信息的可信度
    • 时间戳服务器使用 RFC 3161 标准生成的时间戳令牌,确保了时间信息的可信度。时间戳令牌中的签名由时间戳服务器的私钥生成,客户端可以通过服务器的公钥验证签名的正确性。
  2. 防止篡改
    • 时间戳令牌中的哈希值和时间戳通过数字签名绑定在一起,确保了数据的完整性和时间信息的不可篡改性。即使数据被篡改,签名验证也会失败。
  3. 法律效力
    • 在许多国家和地区,符合 RFC 3161 标准的时间戳被视为具有法律效力的电子证据。时间戳可以用于证明数据在特定时间点的存在性和完整性,常用于数字签名、电子合同、版权保护等领域。

二、时间戳原理

2.1 时间戳服务工作流程

时间戳服务工作流程,如下图所示:

在这里插入图片描述

  1. 用户对文件数据进行 Hash 摘要处理;
  2. 用户提出时间戳的请求,Hash 值被传递给时间戳服务器;
  3. 时间戳服务器对哈希值和一个日期/时间进行签名,生成时间戳;
  4. 时间戳数据和文件信息绑定后返还,用户进行下一步电子交易操作。

2.2 验证工作流程

验证工作流程,如下图所示:

在这里插入图片描述

  1. 用户对文件数据进行 Hash 摘要处理;
  2. 用户将具有时间戳的 Hash 发送给时间戳服务器;
  3. 时间戳服务器验证具有时间戳的 Hash;
  4. 验证成功,获得带有时间戳消息摘要的 Hash,进行比较;验证失败,返回结果。

2.3 举个例子

结合例子来说明,假设 A 准备向网站运营者 B 提交作品,这时 A 需要向 B 证明作品完成的时间,这就需要一个满足以下条件的时间戳服务提供者 C:

  1. 时间戳标记中提供的时间信息是 “权威” 的。这里包含两层意思:

    • C 提供的日期和时间是准确的;
    • C 只会用当时的真实时间标记,而不会故意标记虚假的信息。

    简单来说,就是 C 必须是 “可信第三方”。基于 X.509 PKI,这点可以用 C 的证书来保证,即相信了签署其证书的 CA,也就相信了 C。

  2. 时间戳标记可提供数据来源鉴别以及完整性保护,即B可确信时间戳标记来自C且传输过程中未被篡改,这可依靠数字签名来实现。一般情况下,使用非对称密码技术进行数字签名。

  3. 时间信息与原文内容绑定在一起,以证明该时间正是C收到A此篇原文的时间。即,时间戳标记中要充分地包含原文的信息,加盖时间戳之后原文不应再有改动,不论是自己做的改动还是别人篡改的。

为了即不透露原文又能抵抗篡改,可以使用杂凑算法。A自己计算原文件的杂凑值并交给C加盖时间戳,在出示时间戳标记的时候,验证者B根据收到的文件计算杂凑值并与时间戳标记中的比较,如果相同则证明与时间戳标记中的时间信息绑定的正是原文件。这样,如果修改原文,哪怕只有一个比特,杂凑值也会有显著的变化,而且其 碰撞自由(collision-free,或称“抗碰撞”,collision-resistant)的性质可避免他人或A自己在加盖时间戳之后对原始数据的伪造或篡改。

2.4 时间戳原理总结

根据以上原理,基于X.509 PKI的时间戳服务过程如下:

  1. 用户对原始数据做杂凑运算。
  2. 用户将杂凑值发给TSA
  3. TSA将接收时间列在杂凑结果之后,并对整体进行数字签名。
  4. TSA将带有数字签名的杂凑值和时间信息发回给用户。

三、代码实现

3.1 curl 命令请求时间戳

使用 curl 命令请求时间戳时,入参和出参均为 ASN.1 的二进制格式。其中入参文件的生成方式可以参考 java 代码实现中的逻辑,也可以直接使用下面的地址下载 tsareq.bin,是已经生成好的时间戳请求文件。

  • 时间戳请求文件: https://share.weiyun.com/KvM6psTd
curl

相关文章:

证书学习(六)TSA 时间戳服务器原理 + 7 个免费时间戳服务器地址

目录 一、简介1.1 什么是时间戳服务器1.2 名词扩展1.3 用时间戳标记顺序1.4 7 个免费TSA时间戳服务器地址(亲测可用)1.5 RFC 3161 标准二、时间戳原理2.1 时间戳服务工作流程2.2 验证工作流程2.3 举个例子2.4 时间戳原理总结三、代码实现3.1 curl 命令请求时间戳3.2 java 代码…...

NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL

在当今数字化时代,安防视频监控系统已成为保障公共安全和个人财产安全的重要工具。NVR设备ONVIF接入平台EasyCVR作为一款功能强大的智能视频监控管理平台,它不仅提供了视频远程监控、录像、存储与回放等基础功能,还涵盖了视频转码、视频快照、…...

c中柔性数组

c99中,结构中最后一个元素允许是未知大小的数组,这就叫柔性数组成员。 柔性数组的特点 1.结构中柔性数组前必须至少有一个其他成员 2.sizeof返回的这种结构大小不包括柔性数组的内存 3.包含柔性数组成员的结构用malloc函数进行动态分配,并…...

图像信号处理器(ISP,Image Signal Processor)详解

简介:个人学习分享,如有错误,欢迎批评指正。 图像信号处理器(ISP,Image Signal Processor) 是专门用于处理图像信号的硬件或处理单元,广泛应用于图像传感器(如 CMOS 或 CCD 传感器&a…...

越权访问漏洞

V2Board Admin.php 越权访问漏洞 ## 漏洞描述 V2board面板 Admin.php 存在越权访问漏洞,由于部分鉴权代码于v1.6.1版本进行了修改,鉴权方式变为从Redis中获取缓存判定是否存在可以调用… V2Board Admin.php 越权访问漏洞 漏洞描述 V2board面板 Admin.ph…...

【Ant.designpro】上传图片

文章目录 一、前端二、后端 一、前端 fieldProps:可以监听并且获取到组件输入的内容 action{“/api/upload_image”} 直接调用后端接口 <ProFormUploadButtonlabel{"上传手续图片"}name{"imgs"}action{"/api/upload_image"}max{5} fieldPro…...

为何选择Spring AI Alibaba开发智能客服平台?

0 前言 本文来看如何使用Spring AI Alibaba构建Agent应用。 1 需求 智能客服平台&#xff0c;可帮助用户完成机票预定、问题解答、机票改签、取消等动作&#xff0c;具体要求&#xff1a; 基于 AI 大模型与用户对话&#xff0c;理解用户自然语言表达的需求支持多轮连续对话…...

HiveSQL 中判断字段是否包含某个值的方法

HiveSQL 中判断字段是否包含某个值的方法 在 HiveSQL 中&#xff0c;有时我们需要判断一个字段是否包含某个特定的值。下面将介绍几种常用的方法来实现这个功能。 一、创建示例表并插入数据 首先&#xff0c;我们创建一个名为employee的表&#xff0c;并插入一些示例数据&am…...

Nginx简易配置将内网网站ssh转发到外网

声明&#xff1a;本内容仅供交流学习使用&#xff0c;部署网站上线还需要根据有关规定申请域名以及备案。 背景 在内网的服务器有一个运行的网页&#xff0c;现使用ssh反向代理&#xff0c;将它转发到外网的服务器。 但是外网的访问ip会被ssh反向代理拦截 所以使用Nginx进行…...

【go从零单排】error错误处理及封装

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;error 是一个内置的接口类型&#xff0c;用于表示错误情…...

全平台设置jetbrains mono字体

相信大家都用过IDEA&#xff0c;推荐使用开发字体&#xff1a;jetbrains mono 本地下载的位置&#xff08;记一下&#xff09;后续需要打开安装 本地下载的&#xff1a;E:\download\font\jetbrainsmono\JetBrainsMono-2.304\fonts\ttf 官网上下载&#xff1a;https://www.jetbr…...

高校体育场管理系统+ssm

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;高校体育场管理系统被用户普遍使用&#xff0c;为方便用户…...

Python学习从0到1 day27 第三阶段 Spark ② 数据计算Ⅰ

人总是会执着于失去的&#xff0c;而又不珍惜现在所拥有的 —— 24.11.9 一、map方法 PySpark的数据计算&#xff0c;都是基于RDD对象来进行的&#xff0c;采用依赖进行&#xff0c;RDD对象内置丰富的成员方法&#xff08;算子&#xff09; map算子 功能&#xff1a;map算子…...

Python学习从0到1 day27 第三阶段 Spark ③ 数据计算 Ⅱ

目录 一、Filter方法 功能 语法 代码 总结 filter算子 二、distinct方法 功能 语法 代码 总结 distinct算子 三、SortBy方法 功能 语法 代码 总结 sortBy算子 四、数据计算练习 需求&#xff1a; 解答 总结 去重函数&#xff1a; 过滤函数&#xff1a; 转换函数&#xff1a; 排…...

腾讯混元3D模型Hunyuan3D-1.0部署与推理优化指南

腾讯混元3D模型Hunyuan3D-1.0部署与推理优化指南 摘要&#xff1a; 本文将详细介绍如何部署腾讯混元3D模型Hunyuan3D-1.0&#xff0c;并针对不同硬件配置提供优化的推理方案。我们将探讨如何在有限的GPU内存下&#xff0c;通过调整配置来优化模型的推理性能。 1. 项目概览 腾…...

基于 PyTorch 从零手搓一个GPT Transformer 对话大模型

一、从零手实现 GPT Transformer 模型架构 近年来&#xff0c;大模型的发展势头迅猛&#xff0c;成为了人工智能领域的研究热点。大模型以其强大的语言理解和生成能力&#xff0c;在自然语言处理、机器翻译、文本生成等多个领域取得了显著的成果。但这些都离不开其背后的核心架…...

IDEA构建JavaWeb项目,并通过Tomcat成功运行

目录 一、Tomcat简介 二、Tomcat安装步骤 1.选择分支下载 2.点击下载zip安装包 3.解压到没有中文、空格和特殊字符的目录下 4.双击bin目录下的startup.bat脚本启动Tomcat 5.浏览器访问Tomcat 6.关闭Tomcat服务器 三、Tomcat目录介绍 四、WEB项目的标准结构 五、WEB…...

Mac解决 zsh: command not found: ll

Mac解决 zsh: command not found: ll 文章目录 Mac解决 zsh: command not found: ll解决方法 解决方法 1.打开bash_profile 配置文件vim ~/.bash_profile2.在文件中添加配置&#xff1a;alias llls -alF键盘按下 I 键进入编辑模式3. alias llls -alF添加完配置后&#xff0c;按…...

库打包工具 rollup

库打包工具 rollup 摘要 **概念&#xff1a;**rollup是一个模块化的打包工具 注&#xff1a;实际应用中&#xff0c;rollup更多是一个库打包工具 与Webpack的区别&#xff1a; 文件处理&#xff1a; rollup 更多专注于 JS 代码&#xff0c;并针对 ES Module 进行打包webpa…...

unplugin-vue-components 库作用

一、基本概念与用途 1. 自动导入 Vue 组件 unplugin - vue - components是一个用于 Vue 项目的插件&#xff0c;主要功能是自动导入组件&#xff0c;从而减少在 Vue 组件中手动导入其他组件的繁琐过程。 在大型 Vue 项目中&#xff0c;往往会有许多自定义组件或者第三方组件…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...