是否可以完全更改存储库中文件的 git 时间戳



我试图弄清楚一个由 git 版本控制的文本文件存储库理论上是否可以作为知识产权目的的纸质实验室笔记本替代品。

在纸质笔记本中,这种工作方式是你每天写下你的结果,实验室里的一两个人在笔记上签字并划掉任何空白。从理论上讲,这应该表明你对当天所做的事情有一个完美的记录,并且在日期之后你不能添加任何东西。

我认为这可以在 git 中实现的方式是通过拥有一个带有实验结果(即实验室笔记本(的存储库,该存储库被推送到 github 上的私有共享存储库,然后......不知何故,另外两个人检查了一下?(关于如何做到这一点的建议?

主要警告是,是否有可能(如果是,运行所需的代码是什么(完全更改特定文本文件的内容和时间戳 - 而不会在整个提交历史记录中留下痕迹?

每个 git 提交都包含一个指向上一个 git 提交的链接(请参阅 Git 内部 - 提交对象。 如果您在过去更改了提交,则更改了之后的每个提交。 这将在推送更新的提交时导致问题。

因此,可以在 git 中重写历史记录。 但是,使用适当设置的 git 服务器,您应该对历史记录无法更改有一定的信心。 像这个问题。

你所追求的东西确实是可能的,它最多和SHA-1本身一样安全。

实现此目的的方法是通过数字签名(可能通过带注释的标记(,作为签名者对特定 SHA-1 ID 的认可。 SHA-1将是最新更新提交的SHA-1,它(通过git通常的Merkle提交ID树(也自动覆盖所有以前的SHA-1(除非每天都单独存储,否则这并不重要(。

通常的带注释的标签签名使用GPG密钥,这可能比SHA-1本身更安全。 SHA-1最初的目的是对所谓的第二原像具有很强的抵抗力(基本上这意味着攻击者知道原始消息签名;然后攻击者会提出具有相同数字签名的第二条不同的消息(。 不过,在2005年发现了一些攻击方法,截至2014年,SHA-1被取消了美国联邦数字签名的认证。

在任何情况下都不需要使用 git:您只需让您的验证者存储每天文件的签名即可。 签名本身可以随心所欲地存储(也许通过 git(;它们独立于任何版本控制。 不过,使用 SHA-256 或更强大的东西可能是明智的。

最新更新