私钥签名的文件被替换成老版本,通常怎么处理

2018-12-06 20:33:09 +08:00
 mytry
程序要鉴定某个文件是不是我发布的,通常在文件发布前先用私钥对其签名,运行时获得文件后使用公钥校验是否正确。(签名数据保存在文件里)

虽然这样能确定这个文件是我发布的,但假如对方把之前某个老版本替换当前文件,同样也能通过校验。所以还需要一个版本号或者文件 Hash 值,进一步确认版本的正确性吗?还是用时间戳,来限定某个版本的有效时间?
1781 次点击
所在节点    程序员
5 条回复
mason961125
2018-12-06 20:42:18 +08:00
同时给 shasum 和 sig
billlee
2018-12-06 22:13:39 +08:00
把时间戳或版本号也签上名
no1xsyzy
2018-12-06 22:39:49 +08:00
方法各异,保证最新的方法有很多,看你需求了。

时间戳可以修改系统时间来绕过。
hash 值能直接无视吧,不提供更新的 hash 就行了。
实际上没有特别好的办法,HTTPS 联网验证恐怕是最稳定的手段了,但依旧可以通过伪造证书绕过,或者替换掉你的用户空间 HTTPS 连接代码来绕过……真要这么严格可能需要恶招 Devuno Anti-tampering。

如果不是抗绕过,是为了保证别人发 issue 不是单纯因为某个文件的版本问题的话,那就随意联网验证一下呗。
jimzhong
2018-12-07 00:16:10 +08:00
我能想到的就是在签名内包含过期时间。
julyclyde
2018-12-07 11:06:10 +08:00
Windows 平台上,PE 格式除了可执行的代码,还带一堆属性
包括签名也是属性其中之一

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/515128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX