Technical solution to eliminate desync in single-player sessions

"
qwave wrote:
"
What if the spell says I can deal between 100 and 300 damage and then I hack so that it always deals 300 damage and never 100 damage. How will the server know that I didn't tamper with the RNG rolls?


The snapshot you are generating must adhere to the deterministic seed that the server sent at the start of the instance. This means that each random number can be validated by the server. This is the mathematical nature of a random seed. In other words, your client would roll the same value that the server would roll using that seed.


If it is deterministic, it means that someone can figure out exactly how many tries it will take me to 6-link my item in this instance that I just created. So what will you do to prevent me from simply recreating instances until I notice that the deterministic "RNG-sequence" states that the it will take me 100 tries or less to 6-link in this instance?


Edit: To stop this, you either have to forbid that any crafting is done in a such client-sided instance, or you need to at the very least let the server decide the RNG outcome for each try and not the client.
This message was delivered by GGG defence force.
Last edited by mazul on Nov 18, 2013, 12:55:47 AM
"
qwave wrote:
The server would identify the hack because the client could only cheat by generating data that is outside the scope of the deterministic seed. In other words, if your next hit is supposed to do 150 damage, and your hacked snapshot says you did 1000 damage, the server would be able to deterministically evaluate that this was not properly generated.
What is the server supposed to do when it desyncs from you?
When Stephen Colbert was killed by HYDRA's Project Insight in 2014, the comedy world lost a hero. Since his life model decoy isn't up to the task, please do not mistake my performance as political discussion. I'm just doing what Steve would have wanted.
"
mazul wrote:
"
qwave wrote:
"
What if the spell says I can deal between 100 and 300 damage and then I hack so that it always deals 300 damage and never 100 damage. How will the server know that I didn't tamper with the RNG rolls?


The snapshot you are generating must adhere to the deterministic seed that the server sent at the start of the instance. This means that each random number can be validated by the server. This is the mathematical nature of a random seed. In other words, your client would roll the same value that the server would roll using that seed.


If it is deterministic, it means that someone can figure out exactly how many tries it will take me to 6-link my item in this instance that I just created. So what will you do to prevent me from simply recreating instances until I notice that the deterministic "RNG-sequence" states that the 100th try to 6-link will succeed in this instance?


Hypothetically, this could be possible, and that's my objection to the OP's suggestion.

However, it is not as simple as you suggest. The RNG state could be set up to be modified by many in-game actions: application of orbs (not just fusings), movement by the player, time passed, etc.

On the other hand, if you have to rely on security through obscurity you're asking for trouble.
IGN: SplitEpimorphism
Putting any hacking/cheating thoughts aside: While this might diminish desync (since checking for things like character-enemy collision would be faster) wouldn't this make loading screens way longer than they already are?
"I see now that the circumstances of one's birth are irrelevant; it's what you do with the gift of life that determines who you are." - Mewtwo
Syrioforel, thank you for the support on this. I believe you have an accurate understanding of my approach.

As it stands, the client is already transmitting a large amount of data to the server, and the server is forced to send the game state. I believe that my approach would eliminate a large amount of this data transmission because the server would never need to respond with game state. They could likely cut their costs significantly by reducing this required bandwidth. The snapshot could also be highly compressed as well. Besides, this sort of logging is what allows 'replays' and other features in games. Any game out there which has simulated replays is using a similar snapshot system (like many RTS games).

You could reverse engineer the seed, but this would have virtually no benefit because any action would roll the next number. As long as loot is generated on the server, you wouldn't be able to do anything useful even if you had complete recognition of the seed's state.
"
ScrotieMcB wrote:
"
qwave wrote:
The server would identify the hack because the client could only cheat by generating data that is outside the scope of the deterministic seed. In other words, if your next hit is supposed to do 150 damage, and your hacked snapshot says you did 1000 damage, the server would be able to deterministically evaluate that this was not properly generated.
What is the server supposed to do when it desyncs from you?


The point of the OP's suggestion is that there is no sync performed at all. Data is uploaded and checked at the end of a session (instance, whatever unit of time you like), and then replayed later and verified.

There's no sync to be kept.
IGN: SplitEpimorphism
"
RulerofAsgard wrote:
Putting any hacking/cheating thoughts aside: While this might diminish desync (since checking for things like character-enemy collision would be faster) wouldn't this make loading screens way longer than they already are?


I don't see why that would be the case.
IGN: SplitEpimorphism
"
Putting any hacking/cheating thoughts aside: While this might diminish desync (since checking for things like character-enemy collision would be faster) wouldn't this make loading screens way longer than they already are?


It shouldn't. The snapshot can be streamed during play to the server, it does not need to be uploaded all at once.
"
qwave wrote:
"
What if the spell says I can deal between 100 and 300 damage and then I hack so that it always deals 300 damage and never 100 damage. How will the server know that I didn't tamper with the RNG rolls?


The snapshot you are generating must adhere to the deterministic seed that the server sent at the start of the instance. This means that each random number can be validated by the server. This is the mathematical nature of a random seed. In other words, your client would roll the same value that the server would roll using that seed.


But the client would have full authority to reorder the actions any way it pleases in order to optimize the outcome for the player, as long as it followed the PRNG sequence.
"
If it is deterministic, it means that someone can figure out exactly how many tries it will take me to 6-link my item in this instance that I just created. So what will you do to prevent me from simply recreating instances until I notice that the deterministic "RNG-sequence" states that the 100th try to 6-link will succeed in this instance?



Crafting like this should be kept on the server. I am only talking about using a deterministic authoritative client during combat/seeding of an instance.

Report Forum Post

Report Account:

Report Type

Additional Info