Live design review: never use type “string” for keys and values in protocol buffers. Always use “bytes”.
What are "keys and values" with regard to protobuf? Surely you don't mean maps as bytes can't be "keys" anyways. And why shouldn't you use string as a field type?
My google-fu only turns up references to invalid utf-8 data, but that didn’t sound like what you were referring to.
Only use string when you really mean utf8.
Luckily you can change from string to bytes at any time, since the wire format is the same, so this isn't the kind of mistake that gets cast in stone.