我有一个分层文件夹结构,根文件夹包含一些带有文件内容和一些根文件夹文件的子文件夹。我想为分层文件夹内容生成签名。
计划是生成分层文件夹内容的SHA-1哈希。一个工具(我还不知道)必须递归地从每个子文件夹中挑选东西,并在生成内容的累积散列之前考虑根文件。想法是使用私钥加密此累积哈希,并将此签名放在根文件夹中。
这可能吗? OpenSSL或任何其他工具可以这样做吗?
答案 0 :(得分:2)
您需要问的问题是:您希望通过签名保护什么?每个文件的内容?文件的路径?添加或删除一些文件? Debian用于签署软件包存储库的解决方案如下:
在目录的顶层创建一个文本文件,其中包含目录中的文件列表。对于每个文件,添加文件内容的摘要值。
例如:
/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
使用openssl:
对此文件进行签名 openssl dgst -sha1 -sign privateKey.pem file.txt > file.txt.sig
答案 1 :(得分:1)
似乎有可能。 我会在文件夹中的每个文件上使用哈希(为什么SHA-1而不是SHA-256?在Wikipedia SHA-1中搜索)。通过文件名称(按字典顺序)连接哈希值,并通过连接文件哈希值上的哈希值计算文件夹的哈希值。 你可以递归地做。
另一个选项(虽然看起来更复杂)是将所有文件夹称为一个大文件:您可以以确定的方式扫描文件夹(如DFS),只需将数据签名为一个(非常大的)结构化文件
我确信您可以找到用于计算文件哈希函数的库和代码。 对于签名,您只需要一对私钥和公钥(例如RSA或El-Gamal)。 您可以使用私钥“加密”代码来签名。
因此,如果OpenSSL为您提供了这样的密钥对 - 您可能可以使用它。