shared file systems中数据块签名含义及共享数据public auditing项目相关问题
1. 大文本场景下的data block定义
data block是你按业务规则对大文本做拆分后得到的独立分片,拆分规则可自行定义:
- 最简单的是固定大小拆分:比如把10GB的大文本按每4KB一个分片切割,每个分片就是一个data block
- 也可以按语义拆分:比如按章节、段落、日志行组拆分,保证单个block的修改不会影响其他block的语义
拆分的核心要求是每个block可以独立读取、独立校验、独立修改,通常会给每个block分配全局唯一的序号,避免攻击者调换block顺序绕开校验。
2. 用户对data block签名的具体含义
这里指非对称加密体系下的数字签名操作,完整流程如下:
- 每个用户生成独立的非对称密钥对:私钥自己留存,公钥公开给所有文件共享参与方和审计方
- 对需要签名的data block明文做哈希运算,得到固定长度的摘要(比如用SHA256算法得到32字节的摘要)
- 用自己的私钥对该摘要加密,得到的结果就是该用户对这个block的签名
签名的核心作用是证明该block的内容经过了该用户的确认,后续不管是block内容被篡改、还是有人伪造用户对block的修改,签名都会失效。
你可以用openssl快速实现单block的签名操作,示例命令:openssl dgst -sha256 -sign user1_private.key -out block_001.sig block_001.txt
3. 访问文件时的签名验证流程
用户访问文件时,按需对目标block的签名做验证,步骤如下:
- 获取三个核心要素:待验证的block明文内容、对应该block的用户签名、签名用户的公开公钥
- 对当前获取的block明文执行和签名时完全相同的哈希运算,得到新的摘要
- 用签名用户的公钥对留存的签名做解密,得到签名时生成的原始摘要
- 对比两个摘要是否完全一致:一致则说明block内容未被篡改,是该用户签名确认的版本;不一致则说明内容被篡改或签名伪造。
对应的openssl验证示例命令:openssl dgst -sha256 -verify user1_public.pub -signature block_001.sig block_001.txt
如果你的公开审计场景要求不能暴露block明文,可以用同态哈希、零知识证明等方案实现无明文验证,不需要对外暴露原始文本内容即可完成审计校验。
内容的提问来源于stack exchange,提问作者naman singh
相关产品推荐
相关产品推荐

