【发布时间】:2011-06-07 21:58:47
【问题描述】:
以下问题比最初看起来要复杂。
假设我有一个任意 JSON 对象,它可能包含任意数量的数据,包括其他嵌套的 JSON 对象。我想要的是 JSON 数据的加密哈希/摘要,而不考虑实际的 JSON 格式本身(例如:忽略 JSON 令牌之间的换行符和间距差异)。
最后一部分是一项要求,因为 JSON 将由许多不同平台上的各种(反)序列化程序生成/读取。我知道至少有一个用于 Java 的 JSON 库可以在反序列化期间读取数据时完全删除格式。因此它会破坏散列。
上面的任意数据子句也使事情复杂化,因为它阻止我以给定的顺序获取已知字段并在拥有之前将它们连接起来(大致想想 Java 的非加密 hashCode() 方法是如何工作的)。
最后,将整个 JSON 字符串散列为一个字节块(在反序列化之前)也是不可取的,因为在计算散列时应该忽略 JSON 中的某些字段。
我不确定这个问题是否有好的解决方案,但我欢迎任何方法或想法 =)
【问题讨论】:
-
您看过 XML DSig 吗?他们有同样的问题,并且有一个相当复杂的“规范化”规范。
-
我不禁注意到你的名字对这个问题有多贴切。
-
这是标准化的。请参阅 JSON Web 签名 (JWS) RFC 草案。 tools.ietf.org/html/draft-ietf-jose-json-web-signature-17
-
RFC 只指定了 JSON 格式来存储 payload+签名+一些 headers,没有提到 JSON 规范化
-
你也可以看看这个 RFC 草稿:dpaste-bkero.paas.allizom.org/MtkA/raw
标签: json cryptography canonicalization