JSON-LD可验证凭证签名前如何实现规范化?可否替换指定算法?
针对你列出的BbsBlsSignatureProof2020、EcdsaSecp256k1RecoverySignature2020、JsonWebSignature2020这几个正式发布的Linked Data Proof签名套件,URDNA2015是规范明确要求的强制规则,没有自主选择其他算法的空间。
这类跨系统通用的签名套件,核心互操作基础就是「所有实现方生成的待签名串完全一致」。所有遵循规范开发的验证端,在处理对应type的证明时,都会固定走URDNA2015流程生成待验签的哈希值,如果你签名时换了别的规范化算法,哪怕本地签名、验签逻辑能跑通,任何第三方标准实现都会直接判定签名无效,完全丧失跨场景互操作性。
这里有个明确的规则边界:W3C相关规范没有限制开发者自定义签名套件,如果你做私有场景闭环,完全可以自己定义全新的proof类型,在自己的套件规则里指定任意规范化算法,但绝对不能直接复用现有标准套件的type标识、私自修改底层算法逻辑——这属于不兼容的非标实现,本质是冒用标准标识,会给后续对接留巨大隐患。
你提到的JSON-LD/RDF体系复杂度高、存在已知缺陷的问题是行业内普遍反馈的痛点,JCS作为纯JSON语法层面的规范化方案,逻辑简单、实现一致性高、没有RDF语义映射、上下文解析的额外复杂度,能不能用完全取决于你的业务场景:
- 如果你做的是全链路可控的封闭私有场景,不存在和外部遵循W3C VC标准的系统对接的需求:完全可以用JCS。你甚至可以直接去掉JSON-LD的
@context语义约束,用普通JSON结构+JCS规范化+对应签名算法即可,开发调试成本会比走JSON-LD+URDNA2015的技术栈低很多,也能避开RDF规范化的不少已知坑点。 - 如果你需要兼容现有W3C VC生态、需要跨机构/跨平台互操作:不能直接在现有标准LD Proof套件里替换规范化算法,有两个合规落地方向:
- 直接选用已经正式标准化的、基于JCS的可验证凭证证明套件,这类套件本身就是为了解决JSON-LD栈复杂的问题设计的,原生采用JCS做规范化,不需要走RDF数据集转换流程,生态兼容性有保障。
- 如果你需要在BBS这类支持选择性披露的签名场景下使用JCS,必须定义全新的、不冲突的proof类型标识,完整公开你的方案中规范化、签名、验签、选择性披露的全流程规则,所有参与节点统一按你的规则实现,绝对不能复用现有
BbsBlsSignatureProof2020的类型标识,避免和标准实现产生兼容性冲突。
最后提一个容易忽略的风险点:JCS是纯语法层面的规范化,不感知JSON-LD的语义变化。如果你在带@context的JSON-LD结构上直接用JCS,一旦出现context版本更新、不同节点context缓存不一致、动态加载恶意context的情况,哪怕JSON文本结构看起来完全一致,最终解析出的语义可能已经被篡改,而JCS完全识别不了这类语义漂移。如果选择JCS方案,必须严格管控所有@context的来源和版本,禁止动态拉取未受信任的上下文内容,从源头规避语义伪造风险。
内容的提问来源于stack exchange,提问作者APTower

