A variant of this could be that both players had to report the damage done and current health of shield/hull to the server, and a simple check if both clients report the same would not give any concern for either player doing anything strange.
So this should not require any game logic server-side, only a simple comparing of numbers. So this would, over time, build a collection of players who encounters these kind of issues. So basically we would have a very simply sanity check done server side, and over time patterns will emerge, who gets detected with numbers, and automatic checks can be run on the data, and it should be quite obvious which client is using hacked data. This is stuff that can be done later, we want to detect cheating, but we do not need to actually act on this directly. So irregularities is logged with ships involved etc, and then sent to a queue for analysis. And the other the queue is managed is based on how many analysis request a client have had, so we act faster on clients that keeps triggering the sanity check,
We cannot trust either client, that is why I suggest that both clients have to send the data to the server for the basic comparison, as either of the clients or even both, can be lying about detecting "anomalies" on the data from the other client. And as long as we keep the P2P traffic model, we cannot trust that the clients send the same data to the server as what they send to the other client, or that a client receiving data not lying to the server about what it received.
This is a very simplified explanation, and the actual implemention of this will most likely become alot more complex than I outlined here, as there many potential pitfalls that would generate false positives, etc.