1

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

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

我认为这可以在 git 中实现的方式是通过将实验结果(即实验室笔记本)推送到 github 上的私有共享 repo 的 repo,并且......不知何故另外两个人检查了它?(关于如何做到这一点的建议?)

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

4

2 回答 2

1

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

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

于 2016-02-05T05:11:18.407 回答
0

您的目标确实是可能的,并且最多与 SHA-1 本身一样安全。

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

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

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

于 2016-02-05T05:38:23.627 回答