protocol-buffers - 如何为 protobuf 消息添加签名?

标签 protocol-buffers signature

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

最佳答案

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

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

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

关于protocol-buffers - 如何为 protobuf 消息添加签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62240129/

相关文章:

c++ - Protocol Buffer 多态性

java - 允许使用 iText 签署 pdf

java - 发件人证书在签名验证前已过期

c++ - 如何在 C++ 中将 double 转换为 C# 小数?

go - 为 Protobuf 添加访问控制

c# - Protobuf-net序列化/反序列化

function - 给定下面的匿名函数,函数签名中的 "<fun:clo@1>"是什么意思?

android - 将 Android 位图/ Canvas 从左上角移开

Gmail 以不同方式显示 HTML 电子邮件签名

Node.js 和 Protocol Buffer - 如何从帖子中解析 PB