【问题标题】:SHA-1 hash of a hierarchical folder [closed]分层文件夹的 SHA-1 哈希 [关闭]
【发布时间】:2013-12-23 09:51:51
【问题描述】:

我有一个分层文件夹结构,根文件夹包含一些带有文件内容的子文件夹和一些根文件夹文件。我想为分层文件夹内容生成签名。

计划是生成分层文件夹内容的 SHA-1 哈希。一个工具(我目前还不知道)必须递归地从每个子文件夹中挑选东西,并且在生成内容的累积哈希之前还要考虑根文件。想法是然后使用私钥加密此累积哈希并将此签名放在根文件夹中。

这可能吗? OpenSSL 或任何其他工具可以做到这一点吗?

【问题讨论】:

  • 不要“使用私钥加密”。使用专用的签名操作。

标签: security authentication cryptography certificate x509certificate


【解决方案1】:

你需要问的问题是:你想用签名保护什么?每个文件的内容?文件的路径?添加或删除某些文件? Debian 对软件包仓库进行签名的解决方案如下:

  1. 在目录的顶层创建一个包含目录中文件列表的文本文件。对于每个文件,添加文件内容的摘要值。

    例如:

    /root/dir1/file1.bin         sha1:928a2c3350e2894a5614e88c9e3bfa03c3c19b43
    /root/dir1/file2.bin         sha1:13945d6f641725b091d5fd936da61084da3d8f89
    /root/dir2/file1.bin         sha1:614dbf0fe42e76bc52b539a27cdb6838162130b5
    /root/dir2/subdir/file3.bin  sha1:a0e96d0478c19273783e643a24ef1ea7cb432a48
    
  2. 用 openssl 签署这个文件:

    openssl dgst -sha1 -sign privateKey.pem file.txt > file.txt.sig

【讨论】:

  • 这当然是一个正确的解决方案。我将在与您正在散列的位置不同的位置创建文本文件/签名,并且我会尝试选择 SHA-256 或 SHA-512 以及可能的 RSA-PSS,但总体思路很好(并且有是许多使用相同机制的协议)。
  • 哦,还有find . -type f -print0 | xargs -0 sha1sum,找到了here。请注意,编写某种排序(以查找不匹配)和比较函数可能会比较棘手。
【解决方案2】:

这似乎是可能的。 我会对文件夹中的每个文件进行哈希处理(为什么是 SHA-1 而不是 SHA-256?在 Wikipedia SHA-1 中搜索)。通过文件名(按字典顺序)连接哈希,并通过连接文件哈希上的哈希计算文件夹的哈希。 您可以递归地执行此操作。

另一种选择(虽然看起来更复杂)是将所有文件夹作为一个大文件引用:您可以以确定的方式(如 DFS)扫描您的文件夹,然后将数据作为一个(非常大的)结构化文件签名.

我相信您可以找到用于计算文件哈希函数的库和代码。 对于签名,您只需要一对私钥和公钥(例如 RSA 或 El-Gamal)。 您通过使用您的私钥“加密”您的代码来签名。

因此,如果 OpenSSL 为您提供这样的密钥对 - 您可能可以使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2020-04-16
    • 2017-02-26
    • 2017-08-19
    • 2018-09-10
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多