问题描述
|
我是git的新手,而且我已经知道可以使用gpg对标签进行签名。我了解公钥密码术的工作原理,并且了解如何对标签进行签名,但是这样做有什么意义呢?
解决方法
标记标签的关键在于,现在拥有您的公共密钥的任何人都可以证明您已批准该特定提交为该程序的特定版本。如果他们碰巧相信您是该程序包的正式发布源,那么他们知道他们获得了该程序包的正式版本,而不是一些可能被攻击者后门或在传输过程中损坏的随机版本。
,了解git对象模型的基础知识将显示签名标签的价值。
下图是从Git社区手册中借来的,描绘了一个特定的快照。阴影框是git对象。左侧的提交对象是指一棵树。可以将树视为文件系统目录,因此树对象引用其他树和Blob。 Blob对象存储文件内容。
每个git对象都有一个SHA1,SHA1是从该对象的内容派生而来的唯一的40个字符的十六进制摘要。对象上方的十六进制字符串表示它们各自的SHA1。
Git对象是不可变的:即使更改对象内容的一小部分,它的名称也会改变。 SHA1一直下降。对Blob的任何更改都需要一棵新树,然后又是一个新提交,因此不可能同时遗漏不同的内容并避免检测。仅知道提交的SHA1,即可为您提供精确的,经过完整性检查的树快照。
提交还指其直接父级(或在合并的情况下为多个父级),因此保证甚至更强。更改提交历史记录中的任何位置也会更改其SHA1。仅知道一次提交的SHA1会为您提供大量信息:在确切历史的上下文中的确切树一直追溯到第一次提交。
任何人都可以创建提交,任何人都可以声称自己是Linus Torvalds。重要的是要知道哪些提交是值得信任的。引用提交的签名标签为您提供了上述所有信息以及可验证的真实性。许多项目使用签名的标签作为标记官方祝福发行的方式。