时间戳(拼音:shí jiān chuō,英文:Timestamp)是使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。时间戳系统用来产生和管理时间戳,对签名对象进行数字签名产生时间戳,以证明原始文件在签名时间之前已经存在。
时间戳的应用
可信时间戳是由联合信任时间戳服务中心签发的一个电子凭证,用于证明电子数据文件自申请可信时间戳后内容保持完整、未被更改。可信时间戳接入核准书的颁发,标志着可信时间戳在档案领域规范化应用已经开始,并将起到电子档案和档案数字化副本内容防篡改、保障档案的法律凭证的作用。根据《电子签名法》有关数据电文原件形式的要求,申请了可信时间戳认证的电子文件、电子档案或纸质档案的数字化副本等可视为法规规定的原件形式。
时间戳原理
时间戳的主要目的在于通过一定的技术手段,对数据产生的时间进行认证,从而验证这段数据在产生后是否经过篡改。所以时间戳服务的提供者必须证明服务中使用的时间源是可信的,所提供的时间戳服务是安全的。下面介绍最常见的几种时间戳协议,并对各个协议的原理进行分析。
1、简单的时间戳协议
在使用时间戳服务时,所涉及到的角色一般有以下几种:提供时间戳服务的机构(Time-Stamping Authoritor),申请时间戳服务的用户(Subscriber)和时间戳证书的验证者(Relying Party)。时间戳机构的主要职责是为一段数据申请时间戳证书,证明这段数据在申请时间戳证书的时间点之前真实存在,在这个时间点之后对数据的更改都是可以追查的,这样就可以防止伪造数据来进行欺骗。证书持有者把需要申请时间戳证书的数据发送给时间戳机构,时间戳机构将生成时间戳证书发送给证书持有者。在需要证明该数据未被篡改时,证书持有者展示数据所对应的时间戳证书,时间戳证书的验证者来验证它的真实性,而从确认该数据是否经过篡改。
最基本的时间戳协议的工作流程如下;申请时间戳服务的用户将需要认证的数据传输给时间戳服务的提供者;时间戳服务的提供者将经过认证后的时间戳证书返还给用户。
简单时间戳协议的工作流程如上图所示:用户将需要认证的数据传输给时间戳机构,数据经过 Hash运算得到 m=Hash(M),时间戳机构将 m 和收到数据的时间 t 一起进行数字签名,然后将生成的时间戳证书 Sign(m,t)返还给用户。在需要验证时间戳证书时,首先验证时间戳证书 Sign(m,t)是否为时间戳机构签发的,其次验证 m 是否为用户数据经过Hash 运算得到的结果。如果两项验证中有任何一项不通过,就证明用户的数据经过了篡改;如果都通过,说明用户的数据在时间 t 之后没有进行过任何修改。这个方法通过对数据进行 Hash 运算,保护了用户数据的隐私,在另一方面也减少了时间戳机构的存储容量,为时间戳机构削减了成本。
2、线性链接协议
线性链接协议是为了解决时间戳机构必须完全信任这一问题而提出的。
这个协议的设计思想是为了建立起时间戳证书之间的紧密联系,像链表一样将用户申请的时间戳证书按照顺序链接起来。时间戳机构将收到的数据的Hash值用链表链接起来,把第n组数据的时间戳证书链表链接到第n-1组数据的时间戳证书链表之后。
为了验证时间戳机构是否存在欺骗行为,机构设定一个固定的时间,通过不同渠道将最近通过的时间戳证书列表公布出来。任何人都可以通过时间戳机构公布的证书列表来验证时间戳链表的有效性,从而确定时间戳机构是否公正可靠。
上图给出了8个数据的时间戳链表的结构示意图,通过这种方法,时间戳机构将不同用户的时间戳证书按照申请服务的顺序链接起来,从而得到了一条完整的时间戳证书链接。一方面,时间戳机构就可以通过完整的时间戳证书链接来确认两个数据申请时间戳服务的先后顺序;另一方面,由于用户的时间戳证书中会包含前一个用户申请时间戳证书时的部分信息,而时间戳机构也无法决定用户申请时间戳服务的次序,所以即便时间戳机构与用户相互串通,也无法改变整个时间戳证书链接中用户证书的位置。
3、树型协议
树型协议是线性链接协议的优化协议,这个协议把时间戳证书链接分解成很多小的组。在每组中,时间戳服务的使用者可以向TSA提出时间戳证书申请。可以通过建立一棵树型结构实现整个流程,其中树型结构的叶子是使用者的时间戳证书申请,TSA使用一个安全的Hash函数来计算树型结构中的节点值。树型结构如上图所示。
树型协议减少了时间戳机构中时间戳证书的存储数量。要验证Hni是否是在第n轮中申请的时间戳证书,只需要验证能否通过Hni推算出Ni。同时此协议还可以防止对时间戳证书的篡改,用户要同TSA互相串通,才可能对第n组中的某个时间戳证书进行篡改。但第n组的信息包含在了n+1组的时间戳中,所以可以通过n+1组的时间戳审查第n组的时间戳是否正确。
但是树型协议也有它自己的问题。树型协议不能验证同组中两个时间戳证书的相对次序,因为同组的时间戳证书都是在第n组结束时发布,但他们却不是同时被时间戳机构收到的。所以树型协议无法确定同一组中时间戳证书的正确顺序。除非绝对相信TSA能够保持同一组时间戳的正确次序或者减少每一组内的数据个数,但如果个数太少,系统的效率就会随之降低。同线性链接协议相同,如果待验证的时间戳证书与参考的时间戳证书中存在的时间戳证书较多时,可用性就会大大降低。
4、二进制协议
在线性链接协议的基础上,人们又提出了二进制链接协议。相比于线性链接协议,二进制链接协议更具有建设性,并且实际可用。二进制链接协议可以定义为一个有向无环的链接图。上图给出了构造一个二进制链接图Hk的步骤:
为了更直观的看出二进制链接图的构造过程,我们通过例子来说明,如上图所示,就是一个二进制链接图H5的构建过程:
对于任意的两个顶点a和b,若k>2,且0 < # ≤ % < 2k, 如果l(a,b)是从b到a的最短验证路径,则有l a,b ≤ 3k − 5 。
因为二进制链接协议由一个常数来划分组,然后按照上述方案来构造各个组之间的时间戳证书链接。所以,在验证链接有效性时,二进制链接协议的时间复杂度要远远小于线性链接协议的时间复杂度,它的时间复杂度仅为O(logn)。
线索认证树协议
上图显示的是线索认证树协议[[W3]]的构建过程,W3链接很简单,由树的后序遍历可 得 2 → 3 → 10 → 4 → 5 → 11 → 14 → 6 → 7 → 12 → 8 → 9 → 13 → 15 → 16 , 那么ℎead(4) = (1,4,10) ,tail(4)=(5,15),ℎead(8)= (1, 8, 12,14) ,tail(8)=(9),则单一的时间戳为sign(4)= (4;L1,L4,L10;L5,L15),sign(8)= (8;L1,L8,L12,L14;L9)。
与二进制链接协议相比,线索认证树协议的时间戳长度为klogn2,二进制链接协议为6klogn2。相比之下,线索认证树协议大大减小了单个时间戳的大小。所以线索认证树协议有着高效的验证效率。但该协议存在的问题和二进制链接协议一样,由于协议所使用的算法很复杂,所以在工程实现上具有一定的难度。
5、分布式协议
分布式协议的设计思想为在整个申请时间戳证书的工作流程中,涉及到了以下几种角色:一组自愿的时间戳证书签发者、一个安全的Hash算法和一个随机挑选签发人员的随机算法。
当用户想对数据申请时间戳证书时,用户先用Hash算法计算数据的Hash值,得到一个随机数;在用随机算法挑选随机的签发者。然后用户将计算出的Hash值发送给通过算法随机得到的各个签发者。等签发者收到用户发来的Hash值后将收到数据的时间添加到Hash值后面,再对Hash值和时间整体进行签名,返回签名结果给用户,用户把所有的签名作为时间戳证书存储起来。
在此协议中,由于所有对数据Hash值进行签名的签发者是通过算法随机产生的,所以对于随机选出的签发者,用户一般不可能与之串通伪造时间戳,除非所有人都与用户串通,但这显然是不可能的。
在此协议的使用过程中,用户必须要与所有选出的签发者进行实时联系,及时了解签发者发生变动的情况。当签发者无法即时对数据签名时,需要有一种备用机制进行处理。在此协议中,别的协议中必须的时间戳机构是不存在的。每一个用户在自愿的情况下都可以当做签发者使用。
分布式协议的描述如下:
计算数据M的Hash值m=Hash(M),通过随机算法挑选签发者,他们收到数据M的Hash值m;
签发者ID组G(y)中的各个签发者给(t,ID,m)签名,并返回时间戳签名Sign;
最后得到的时间戳证书为[(m,ID),(Sign1,Sign2,……, Signk)]。
此协议的优点是不可能提前知道进行签名的签发组G(m)。为了伪造一个时间戳,用户不可能为了伪造一个时间戳,就能与k个随机选取的签发者串通。但是另一方面,分布式方案也有很明显的缺点。第一、需要提前建立签发组,而且只能从预先建立的签发者集合中使用算法随机选出签发者。第二、网络带宽要求k倍于简单时间戳协议。第三、如何在法律层面定义不同时间源的时间认证和可信度也是一个棘手的问题。因此,分布式时间戳协议如果实现仍存在相当大的难度。
时间戳系统的组成
通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。它的提出主要是为用户提供一份电子证据,以证明用户的某些数据的产生时间。在实际应用上,它可以使用在包括电子商务、金融活动的各个方面,尤其可以用来支撑公开密钥基础设施的“不可否认”服务。
时间戳服务的本质是将用户的数据和当前准确时间绑定,在此基础上用时间戳系统的数字证书进行签名,凭借时间戳系统在法律上的权威授权地位,产生可用于法律证据的时间戳,用来证明用户数据的产生时间,达到“不可否认”或“抗抵赖”的目标。时间戳系统的组成主要包括三个部分:可信时间源、签名系统和时间戳数据库:
(1) 可信时间源就是时间戳系统的时间来源,TSA系统中的所有部件的时间都必须以这个可信时间源为标准,尤其在颁发的时间戳中填写的时间必须严格按照可信时间源填写。而作为可信时间源自身,其或者就是国家权威时间部门发布的时间,或者是用国家权威时间部门认可的硬件和方法获得的时间。
(2) 签名系统负责接收时间戳申请、验证申请合法性以及产生和颁发时间戳,最后将时间戳存储到数据库中。这个过程中,申请消息和颁发时间戳格式、时间戳的产生和颁发都必须符合规范中给出的要求。用户向签名系统发起时间戳申请,签名系统获取用户的文件数据摘要后,再验证申请的合法性,最后将当前时间和文件摘要按一定格式绑定后签名返回,并保存在数据库中。
(3) 时间戳数据库负责保存TSA系统颁发的时间戳,而且必须定期备份,以便用户需要时可以申请从中取得时间戳。对时间戳数据库的存储、备份和检索也要求符合规范中给出的规定。
时间戳的产生和颁发
标准中规定了时间戳的申请和颁发方式、可信时间的产生方法、时间的同步和申请和颁发过程。
TSA可以通过不同的方式接收时间戳申请和颁发时间戳,但应至少支持下列四种方式的其中一种:
a.用户通过电子邮件申请;
b.用户通过文件传输申请;
c.用户通过套接字(Socket)申请;
d. 用户通过 HTTP 申请。
TSA应明确指出其支持的申请方式,用户只能在此范围内选择如何申请。一般来说,由于WEB服务在网络中应用的普及,TSA 最少应支持用户通过 HTTP 申请时间戳。无论 TSA 支持哪种申请方式,《时间戳规范》规定了整个申请和颁发时间戳的过程至少应该包括的一系列基本过程。TSA在产生时间戳时,可信时间源是整个系统工作的基础。可信时间的源头可以使用以下的一种或多种方法获得:
a.使用某种无线接收装置;
b.使用某种时间同步协议从一个指定网络地址获得时间;
c.使用某种通过国家权威时间部门认证的硬件获得时间。
TSA也可以使用多种方法产生可信时间,以保证时间的精确度。通过多种方法产生最终可信时间应该是产生的多个可信时间的折衷。由于 TSA 系统可能由多个部件组成,各部件还应根据可信时间同步部件自身的时间。在同步过程中,《时间戳规范》规定了部件同步应满足的一系列条件。
时间戳的格式
标准中规定了对TSA的要求、密钥标识、时间的表示格式、时间戳申请和响应消息格式、保存文件、所用MIME对象定义和时间戳格式的安全考虑。时间戳的格式是此标准的重点内容,主要参考了RFC3161。对 TSA 的要求,标准中明确了时间戳中由 TSA 满足的一系列信息项要求。
T S A 应有专门的密钥对时间戳消息签名,但一个TSA可以有许多不同的私钥以适应不同的要求,标准中规定了密钥标识的格式。在每一个时间戳里都包含一个可信时间值,这个时间值的表示格式也在标准中进行了规定。时间戳的申请消息和相应消息是最基本的消息,标准中规定了这两个消息的格式,并解释了格式中的各数据项。标准还规定了时间戳申请和响应消息以文件方式保存时对文件的要求。
当 TSA 支持通过电子邮件或者HTTP 申请时间戳时,标准规定了其申请和相应消息的MIME对象定义。时间戳格式在使用时应该进行的安全考虑也在标准中进行了要求。
时间戳的管理
《时间戳规范》的标准中规定了时间戳的保存、 时间戳的备份、 时间戳的检索、 时间戳的删除和销毁、 时间戳的查看和验证。
时间戳的保存包括在TSA (时间戳机构)方的保存和在用户方的保存。 在TSA方的保存涉及到时间戳数据库的管理和时间戳记录应当包含的信息项, 一般最少应包括入库时间、 序列号、 完整编码等。 时间戳在用户方一般由用户自行保存。
时间戳的备份在标准中规定了一系列要求, 如定期备份、 备份介质等。
时间戳的检索在标准中规定了至少三种检索方式, 包括分别按照入库时间、 序列号、 完整编码检索。
当 TSA系统由于内部错误或者外部攻击导致产生错误的时间戳时, 标准规定了删除时应遵循的要求。 在确定某时间戳已经丧失其价值后, 标准规定了销毁时应遵循的要求。
时间戳的查看和验证在标准中规定了TSA应该给用户提供一个方便安全的方法查看其颁发的时间戳, 例如提供一个查看软件等。 TSA还应该给用户提供一个方便安全的方法对其颁发的时间戳进行验证, 例如提供一个验证软件或者通过互联网验证等。
时间戳的安全
由于时间戳在电子取证中的重要作用及其法律地位,时间戳系统必须拥有极高的安全级别, 安全保护应包括物理环境安全和软件安全。
物理环境安全包括机房安全、 设备安全和记录介质安全。软件安全包括运行环境、 可信时间源、 签名系统、 时间戳数据库和审计。 其中, 审计对于错误的查找和责任的跟踪具有重要作用, 标准中详细的规定了审计数据产生、审计查阅、 审计事件存储、 可信时间、 审计日志签名的要求。 对于证书和密钥的管理应按国家密码管理部门相关标准与规定执行。