我应该如何构造我的 SHA-256 验证哈希文件,以便其他人能够最轻松地使用它?

我应该如何构造我的 SHA-256 验证哈希文件,以便其他人能够最轻松地使用它?

我一直在开发一个重要的(对我而言) PHP 库/框架类的东西,我希望它能够为我的重要应用程序以及将来其他人的应用程序提供支持。

我到目前为止还没有实施任何类型的“防篡改”措施,现在我想知道我应该如何做。

当我“构建”/打包库/框架以进行“发布”时,我应该计算最终 ZIP 文件的 SHA-256,还是计算其中每个单独文件/模块的 SHA-256?

不管上一个问题的答案是什么,这些哈希应该如何“构造”?作为单个文件?每个文件一个?名称和文件扩展名应该是什么,应该使用什么格式来告诉稍后读取它的任何工具哪个哈希适用于哪个文件以及它是哪种哈希?JSON?这有某种标准吗?

我希望尽可能使其“符合标准”,以便任何人都可以快速验证我的库/框架自我“发货”以来没有被篡改过。

相关问题:SHA-256 是目前用于此目的的“最佳”哈希吗?还是我应该使用其他哈希?我已经有一种方法可以对字符串和文件进行 SHA-256 哈希处理,所以我希望这是目前最好的哈希处理方法。

我想象并希望答案将是“hashes.json”中的某些内容,其中包含:

[
    {
        "file_path": "blabla1",
        "hash_type": "SHA256",
        "hash": "dfjifsjsdfjdhufdhjsfudshfudhfudhdfsuhfudhfsuhfdushdsufhfhdusf"
    },
    {
        "file_path": "blabla2",
        "hash_type": "SHA256",
        "hash": "dfjifsjsdfjdhufdhjsfudshfudhfudhdfsuhfudhfsuhfdushdsufhfhdusf"
    },
    {
        "file_path": "blabla3",
        "hash_type": "SHA256",
        "hash": "dfjifsjsdfjdhufdhjsfudshfudhfudhdfsuhfudhfsuhfdushdsufhfhdusf"
    },
    ...
]

我还想知道我是否应该从库本身验证这些哈希值,或者这是否很愚蠢?我的意思是,如果有人只是将一些恶意代码片段自动注入到我的库的 .php 文件中,那么哈希检查很快就会(取决于检查频率)阻止它执行,因此攻击者也必须计算和修改哈希值……这种可能性更小,因此更安全,不是吗?

不管怎样,最后一个问题只是个奖励。如果它让这个问题“太宽泛”或“偏离主题”之类的,请忽略它。

答案1

您的目标是值得称赞的;保护您作品的用户。

这个问题很难。

对于想要快速检查自己下载的内容是否正确且在传输过程中没有损坏的人,请​​(突出显示)发布一个易于验证的 SHA256 哈希值(例如,他们刚刚下载的内容)。有一个现有问题讨论了这一点:https://stackoverflow.com/questions/8637340/how-to-code-sign-my-binaries-php-scripts. 对此,SHA256 是一个非常好的哈希算法。

还请注意,您只需在您用来向公众提供软件的网站上使用有效的 HTTPS 证书并在该网站上禁用 HTTP,就可以在很大程度上解决上述问题(确保传输过程中不会出现未被发现的内容损坏)。

为了真正验证您生成的代码,您可能希望使用受信任的证书颁发机构颁发给您的代码签名证书来签署您的代码。请注意,这要复杂得多,在这种情况下,用户验证起来要困难得多(我认为 PHP 通常不会以这种方式保护),而且成本要高得多。另一方面,只要您保护好该证书的私钥,就不可能有人成功地将他们的工作成果冒充您的作品交给知情的、偏执的用户。

我建议不要自动扫描自己的代码。如果有人要修改代码,他们为什么要保留扫描代码以检测修改的部分?我并不是说这不可行(我了解的不够多)。我是说这很可能是一场军备竞赛,只有当你参与其中时才会很有趣。

相关内容