Git:可以假冒标签的签名日期吗?

时间:2012-08-20 12:54:21

标签: git security gnupg

作为一名科学家,我想保留一些关于我在Git存储库中检查内容的正式记录。这是为了后来支持谁在例如专利纠纷中首先发明了什么。

目前,我不时向我的存储库添加标签,如下所示:

git tag -s -m "`date`" 2012-08-20

并将标签推送到中央服务器:

git push --tags

拉出一个标签会显示我用我的钥匙签名的日期:

git tag -v 2012-08-20
object 2d6f6035270e8e44c035431e99be8da3fccee095
type commit
tag 2012-08-20
tagger My Full Name <name@institution> 1345466433 +0200

Mon Aug 20 14:40:33 CEST 2012
gpg: Signature made Mon Aug 20 14:40:37 2012 CEST using RSA key ID somekey
gpg: Good signature from "My Full Name <name@institution>"
gpg:                 aka "My Full Name <personal-email>"

我的问题是这些日期有多安全?以后有可能篡改它们吗?

编辑:为了进一步澄清,我希望能够证明我以后篡改标签的可能性很小。

3 个答案:

答案 0 :(得分:15)

Git保证的是:如果更改日期(或标记的其余部分或附加到它的提交等),标记的SHA1将会改变。

但是,为了使这个有用,你必须以某种方式证明原始SHA1标签是什么,并且你已经在声明的发明日期已经拥有它

否则,为了欺骗性地声称你在1980年1月发明了一些东西,你可以将你的计算机的日期倒回到1980年并用必要的提交,标签和所有git创建存储库 - git不会知道,因为它只能相信系统时钟告诉它。

因此,如果你想证明你在某个日期之前发明/写过某些东西,那么git(单独)无法帮助你,也不能单独签署任何形式的签名。你需要的是Trusted timestamping。有各种不同的方案,但都要求一个或多个第三方基本上保证时间戳的正确性。

答案 1 :(得分:2)

你想要的是Ryan J在最近的帖子How can I use RFC3161 (trusted) timestamps to prove the age of commits in my Git repository?

中描述的认证时间戳

这似乎是一种经过认证的,经过验证的记录相关提示提交的sha1的方法。

答案 2 :(得分:2)

您可以使用http://www.proofofexistence.com/等服务将您的git commit sha1嵌入到比特币区块链中。