Hi, I'm new here, and I have some questions about how to make a secure server communication in a free software project.
First of all, in multiplayer games, how do you prevent cheating?
For example, let's say someone gets the source, alter the speed of the character to 2x the original one and recompile it.
What are the available tools/ways to prevent that? Is there a way to make your game secure by design against this type of stuff?
What if both the game and the server are free and you have access to the source?
I suppose the server could check the position and infer if someone is cheating based on that, but I'm talking about a more general way to prevent the user to modify his client for doing what he wants. Is there a way?
Second, kinda the same type of question. But let's suppose you have a server that tracks scores and achievements (the source may be open as well).
How do you make that type of communication secure? For example, there's an achievement for killing 10 bad guys.
How do you keep the player from modifying the source to send that message to the server (that he already killed the 10 bad guys) when he wants, or to set the counter to 9 when a stage starts so the next bad guy he kills gets the achievement.
Is there a way to do it as well?
The best thing I could think of for the second case would be if the game was compiled with a certain "secret", it would hash the info in a way the server expects (let's say, with a salt stored in a db, so the user can't know even though the server's source is free).
But it comes with the drawback that the player needs a compiled version provided by the server owner, otherwise he would not be able to get the achievements, etc.
Basically I want to prevent cheat and have an achievement server, keeping everything free software and allowing the user to compile it himself if he wants. Is it doable?
Any ideas (or sketches of ideas) or reading recommendations (papers/books/etc) on this are very welcome