问题标签 [trusted-timestamp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1954 浏览

security - 代码签名中的会签如何工作?

我目前不明白会签是如何工作的。

我正在考虑是否可以操纵文件并使用原始密钥(包括伪造的会签)将其辞职?

我正在使用例如:

所以我会得到一个带有签名的签名应用程序。但这是如何工作的?“时间戳”服务器是否简单地签署当前时间戳?如果我理解正确,那将允许重放攻击。这样我就可以在过去签署文件。

委托书如何受到保护?

0 投票
5 回答
7170 浏览

c# - 您如何部署自己的 Authenticode 时间戳服务?

我想用我自己的 Authenticode 时间戳服务给我的 DLL 文件加上时间戳。这可能吗?我怎么能做到这一点?

0 投票
5 回答
4317 浏览

git - 如何使用 RFC3161(可信)时间戳来证明我的 Git 存储库中提交的年龄?

更新

我已将我用于此的脚本发布到 StackExchange 代码审查网站。

我最初的问题是有没有办法可以用 X.509 证书和时间戳签署 Git 提交?. 有一段时间,我以为我只能得到我用我的 X.509 证书签名的东西,由受信任的第三方加盖时间戳。不是这种情况。带有 X.509 证书的数字签名和受信任的时间戳是相互排斥的。我已经更新了我的问题以反映这一点。

正如 VonC 所指出的,使用 X.509 证书签署 Git 提交不会增加任何价值。由于 Git 的内置支持,使用 GPG 密钥是一个更好的选择。

我接受了 Greg 的回答,因为它最接近我的要求,尽管我最初的问题有点模棱两可。正如 Greg 指出的那样,如果您可以证明您在某个时间点知道提交哈希,则可以保证您知道当时哈希所针对的存储库内容,并且无需在存储库中存储任何额外的数据。时间戳数据可以存储在任何地方。

可以使用openssl(v1.0.0+) 并curl为提交哈希请求 RFC3161 时间戳。

请求时间戳

您需要为此提供一些信息:

  • URL - 一个 RFC3161 时间戳服务
  • REV - 您想要时间戳记的修订版(哈希)。必须是完整的哈希。

以上会将签名的时间戳输出到stdout. 如果时间戳服务拒绝请求,它也可能会输出错误。

验证时间戳

这与请求时间戳非常相似,但您还需要:

  • CAFILE - 从时间戳服务返回根 CA 的证书链

时间戳服务应该使用由受信任的机构颁发的证书对时间戳进行签名。如果没有,您的时间戳就没有多少可信度。如果您无法找到或创建合适的证书链,请尝试使用cacert.pemcurl. 它在这里

下面的代码片段假设一个现有的、签名的时间戳回复被传递给stdin. 应该可以将上述请求直接传送到下面的验证命令中。如果您将请求的响应存储在变量中,则可能需要对其进行 base64 编码/解码 ( man base64)。

如果您检查回复,您会注意到请求摘要与使用的 Git 修订相匹配。您可以使用此命令检查纯文本版本的回复。

这是一个回复示例,我在顶部添加了 Git 修订。

其他注意事项

许多时间戳服务要求用户为脚本签名请求添加延迟。确保您了解您计划使用的服务是否需要它。在撰写本文时,我使用的 Comodo 要求脚本请求之间有 15 秒的延迟。我选择使用 Comodo 的唯一原因是我从那里购买了我的代码签名证书。

Git 笔记似乎是存储签名时间戳回复的明显选择,但我并没有完整的解决方案来发布。我现在被困在这个问题上。

我的原始问题和更新如下。


我希望能够证明我的 Git 提交何时发生并且我的存储库的历史没有被重写。它不必是每个提交。一天一次或一周一次就足够了。有推荐的方法吗?

我知道我可以使用 GPG 密钥签署 Git 提交,但我想知道是否有一种方法可以使用 X.509 证书和使用在线时间戳服务(如http://timestamp.comodoca)签署我的提交.com/rfc3161

如果不是,是否每天一次将当前修订版转储git rev-parse --verify HEAD到文本文件中,签署该文件并提交足以证明(大致)何时编写我的代码?

为清晰添加信息

我知道 Git 可以保证存储库的完整性,但是据我所知,如果我控制了存储库,第三方将不得不相信我没有重写存储库的历史或回滚我的时钟并且创建一个完全伪造的存储库只是为了“证明”我的代码比实际旧?我也不想公开发布我的存储库。

这是一个虚构的用例,应该可以更好地了解我想要做什么。

我在网上发布了一些代码。一年后,有人复制并在一本书或文章中发布了相同的代码,并声称我是复制它们的人。那时,我希望能够使用我的存储库并证明我在一年前提交了该代码,然后他们重新发布了它。

通过使用带有时间戳服务的 X.509 证书,我可以证明签名发生的时间。只要我能证明我知道一年前提交的哈希值,Git 就可以保证存档的完整性。

或者,有没有办法使用 GPG 密钥签署提交,但带有经过验证的时间戳?是否有受信任的第三方提供与 X.509 证书可用的时间戳服务类似但适用于 GPG 的时间戳服务?

也许我可以使用 GPG 密钥和 X.509 证书的组合。假设我在存储库中保留了我的(公共)GPG 密钥的副本,如果我在每天结束时执行以下操作,是否会起作用?

  1. 使用我的 X.509 证书和在线时间戳服务签署我的(公共)GPG 密钥。
  2. 使用我的(私有)GPG 密钥的签名将更改提交到存储库。
0 投票
2 回答
1863 浏览

php - 带有时间戳的 pkcs7

我现在看了一天,我仍然感到困惑。我想将数字签名添加到带有TSA(时间戳权威)时间戳的 PDF。

我可以将请求发送到 TSA 并接收二进制响应,但是如何将该时间戳附加到我的 pkcs7 数字签名中。

我正在使用带有 TCPDF 和openssl_pkcs7_sign()函数的 PHP。我需要添加时间戳作为额外的证书吗?谢谢!

0 投票
1 回答
783 浏览

java - 用户使用其私钥签署/时间戳数据的最佳方式是什么?

我对安全问题还是新手,所以我的问题实际上可能只是一个误解。

我正在使用的系统要求用户应该在 Web 应用程序的某处签署/时间戳数据。但是,为了使用数字证书进行签名,用户应该在系统上输入他们的私钥。考虑到涉及第三方的事实,我们作为一家公司应保证只允许最终用户签署/时间戳数据。

我看到的唯一方法是创建一个可以证书数据的桌面应用程序。但是我仍然需要在某个地方设置时间戳,这需要与外部服务器进行通信,这可能是我们公司“窃取”他们的私钥的一种方式。

是否有在 Internet 上特别是在 Web 应用程序上签名/时间戳数据的模式?这怎么可能实现?

0 投票
1 回答
1251 浏览

java - 使用 iText 2.1.7 检查时间戳

我正在尝试检查 PDF 文件的给定签名是否存在时间戳。到目前为止,我来到了这段代码:

我显然可以访问签名,但我应该使用 PdfPKCS7 类来验证签名。有谁知道我怎样才能到达那里?

0 投票
1 回答
465 浏览

trusted-timestamp - 检查 TSA 时间戳

我正在尝试使用SignatureTimeStamp元素(这是一个 base64 编码块)验证 XAdES 签名。Java-Lib xades4j 基本上为我做验证。但是,我想手动检查时间戳(尤其是在验证失败时)。通过检查,我的意思是显示使用的证书、它们的有效性、时间戳等内容。

我可以使用什么工具?openssl 能解决问题吗?你能给我一个如何使用它的例子吗?

0 投票
3 回答
3790 浏览

java - 在java中对PDF进行数字签名和时间戳

我想将数字签名附加到 Java 中的 PDF 文件,然后使用受信任的时间戳权威对该文件进行时间戳记。

我该怎么做呢?

0 投票
1 回答
1001 浏览

c++ - 将来自 TSA 的响应添加到 CRYPT_SIGN_MESSAGE_PARA 用于 CryptSignMessage (c++, Crypto Api)

我正在努力如何将来自 TSA 服务器的响应添加到我的 CryptSignMessage?

使用 PKCS#7。我目前有我的消息摘要,并且我成功地使用来自 crypto api 的 CryptSignMessage 对其进行了签名。像这样:

现在我想使用 TSA 服务器为我的摘要添加时间戳,但我不确定如何包含它。假设我有一个 rfc3161 TimeStamp 请求;我将它发送到我的 TSA 并收到 rfc3161 TimeStamp 响应(可能使用 libcurl)。应该如何将响应合并到我的 SigParams 中?我必须提取 TimeStampToken 然后将其存储为未经身份验证的计数器签名吗?就像是:

然后设置 SigParams:

任何建议将不胜感激。谢谢,玛格达

0 投票
3 回答
998 浏览

c++ - 加密 API - CryptRetrieveTimeStamp

再会,

有人可以帮我使用 Crypto Api 函数 CryptRetrieveTimeStamp 吗?我成功地使用 CryptSignMessage 对我的消息进行签名,现在我想在 TSA 上为数据添加时间戳,但 CryptRetrieveTimeStamp 总是返回 *TRUST_E_TIME_STAMP* 错误。

我的函数如下所示,pbMessagecbMessage是从 CryptSignMessage 接收的数据和大小:

我知道错误意味着:时间戳签名者和/或证书无法验证或格式错误。但我不知道什么或如何解决这个错误?

任何帮助/提示将不胜感激。谢谢,玛格达