【问题标题】:how to add signature to protobuf messges?如何为 protobuf 消息添加签名?
【发布时间】:2020-06-07 02:15:54
【问题描述】:

是否有一种通用的方式来签署 protobuf 消息?我可以想象的是在消息中添加数据字段和签名字段,并使用 SerializeToArray(in cpp) 或 ToByteArray(in c#) 获取原始字节,然后使用 md5 或 sha256 .. 等计算哈希值,然后将哈希值分配给字段“sign”。我不知道不同语言之间的原始字节是否有任何不同,或者在 proto2 和 proto3 中是否有任何不同?

【问题讨论】:

    标签: protocol-buffers signature


    【解决方案1】:

    只要您的散列算法足够强大,您讨论的签名方法就可以用于完整性验证。如果它用于比完整性校验和更强的任何东西,您可能应该使用真正的加密哈希(使用公钥+私钥),因为任何人都可以签署自己的任意有效负载,从而打破这一点。

    您还看到讨论了决定论。 protobuf 中的原始字节不是完全确定的。在 protobuf 中表示同一个有效载荷有多种有效方式,包括:

    • 重新排序字段(数字顺序是“应该”,而不是“必须”)
    • 包括或省略零(proto2 和 proto3 不同)
    • 打包与顺序“重复”编码
    • 现实情况是,“地图”通常由某些特定于平台的内置地图/字典类型支持,这些类型通常不定义顺序,因此理论上每次都可能不同
    • 实际上并不是一个真正的问题,但理论上您可以通过包含不必要的零字节组来编码具有任意长度(最多 10 个字节)的 varint;类似于在文本(JSON 等)中说 42、042、0042 和 0000000042 都表示相同的整数;没有人这样做,但是:这将是有效的

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多