V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mytry
V2EX  ›  程序员

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

  •  
  •   mytry · 2018-12-06 20:33:09 +08:00 · 1796 次点击
    这是一个创建于 2213 天前的主题,其中的信息可能已经有所发展或是发生改变。
    程序要鉴定某个文件是不是我发布的,通常在文件发布前先用私钥对其签名,运行时获得文件后使用公钥校验是否正确。(签名数据保存在文件里)

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

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

    如果不是抗绕过,是为了保证别人发 issue 不是单纯因为某个文件的版本问题的话,那就随意联网验证一下呗。
    jimzhong
        4
    jimzhong  
       2018-12-07 00:16:10 +08:00
    我能想到的就是在签名内包含过期时间。
    julyclyde
        5
    julyclyde  
       2018-12-07 11:06:10 +08:00
    Windows 平台上,PE 格式除了可执行的代码,还带一堆属性
    包括签名也是属性其中之一
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2749 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:26 · PVG 20:26 · LAX 04:26 · JFK 07:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.