| ▲ | majormajor 11 hours ago | |||||||
I think a lot of people assume that the "name" of the type, for protos, will be preserved somewhere in the output such that a TreeRoot couldn't be re-used as a KeyRevoke. It makes sense that it isn't - you generally don't want to send that name every time - but it's non-obvious to people with a object-oriented-language background who just think "ah, different types are obviously different types." The serialization cost objection is generally what I've often seen against in-bound type fields and such, as well, so having a unique identifier that gets used just for signature computation is clever. What's over my head possibly, from skimming it, about your multiset hashing is how it avoids the "these payloads have the same shape, so one could be re-sent as the other" issue? It seems like a solution to a different problem? | ||||||||
| ▲ | kccqzy 9 hours ago | parent | next [-] | |||||||
This is just a mismatch between nominal typing and structural typing. Protobuf is basically structural typing. You can serialize a message defined with one schema and deserialize the result to a message with a different schema if the two schemata are compatible enough. Almost all normal programming languages use nominal typing. If you have `struct A {int a; int b};` it is distinct from `struct B {int a; int b};`. | ||||||||
| ||||||||
| ▲ | Retr0id 10 hours ago | parent | prev [-] | |||||||
Multiset hashing is not related to the domain separation problem, but it is related to the broader "signing data structures" problem. (I realise my comment reads a bit unclearly, it's basically two separate comments, split after the first paragraph) | ||||||||