protobuf 获取一些数据的安全性如何?

How secure the protobuf is to get some of the data out?

  1. 没有任何加密,如果接收者有序列化的 Protobuf 文件但没有生成的 Protobuf class(他们无权访问定义其结构的 .proto 文件), 他们是否有可能从二进制文件中获取 Protobuf 文件中的任何数据?

  2. 如果他们可以访问 .proto 文件的一部分(例如,文件中只有一个相关的 message),他们能否从整个文件中获取一部分数据文件同时跳过其他未知部分?

  1. 是的,绝对; protoc 工具可以帮助解决这个问题(参见:--decode_raw),https://protogen.marcgravell.com/decode 也可以 - 所以它根本不应该被视为 "secure"
  2. 是的,绝对 - 这是协议中内置的一个关键部分,它允许消息可扩展,以便它们可以解码它们理解的位并忽略或仅存储(对于往返或 "extension" 字段) 他们不理解的部分

protobuf 不是安全设备;对于拥有正确工具的人来说,它与 xml 或 json 一样可读,但有一个小问题,即它可能不确定 如何 来解释某些值;但是:你可以推断、猜测和逆向工程

好的,我找到了这个页面https://developers.google.com/protocol-buffers/docs/encoding

消息丢弃所有名称,只是一对键值对。生成的 class 可能会为安全读取这些数据提供一些保护,并且无法读取未知数据。 (果然是因为生成的class是从已知结构生成的,.proto文件)

但如果我是攻击者,我可以参考该编码页面并尝试找出二进制文件中的哪个区域对应于哪个数据。例如,在更改某些数据后,varint 可能很容易被发现。并继续编写我自己的 .proto 文件来攻击这个未知数据,甚至是可以选择性地读取部分二进制文件的自定义二进制文件 reader。