[MUD-Dev] Trusting the client, encrypting data

Eli Stevens listsub at wickedgrey.com
Thu Dec 4 22:49:49 New Zealand Daylight Time 2003

Ola Fosheim Grøstad wrote:

> I've suggested something similar, a long time ago, but will try
> again. Hoping for some discussion.

I'll bite.  :) Though it might be taking it in a different direction
than you wanted...

> One core problem in virtual worlds with a large user-base is that
> there are no surprises as the client has access to the entire
> database which is static. This is viewed as necessary in real-time
> interaction as the responsiveness of the internet is not
> guaranteed.

> A solution to this is to presend data in a neighbourhood arround
> the location currently occupied by the avatar. Unfortunately this
> will let a hacked client expose any surprises "behind locked
> doors" and thus give hard-core users an unfair advantage.

> However, this can easily be solved by (symmetrically) encrypting
> data on a cell-by-cell basis using unique keys for each cell. The
> problem is then reduced to sending the decryption key in a timely
> fashion.

One thing I think is interesting about this is that one would have
to be careful about _what_ to encrypt.  If the data structure
contains a recognizable header, using this could make reverse
engineering the key much easier (I'm thinking of simple XOR
encryption here; are there cheap encryption schemes that aren't
easier to break if you know what 90% of the encrypted text should
look like?).

How would such a scheme handle situations where a player in room A
waits for a while, then opens a door to room B.  Room B has had
another player running in random circles, picking up and dropping
items, etc. the whole time that the player in room A as been waiting
(and presumably has received an encrypted copy of a snapshot of room
B's state).  I'm having a hard time coming up with a good solution
to this problem for dynamic data, unless all of the deltas are sent
(perhaps encrypted, perhaps not) to be applied as soon as the base
cell is revealed.  That sounds pretty rough on the client, esp. if
the room A player waits for a long time before opening the door.

Hmm.  Is there a way to take an encrypted cell and apply a delta to
it _without_ being able to decrypt the cell itself?

Also problematic is that cells become visible as a unit, rather than
incrementally (whole room vs. line of sight through a door).

>   (Note: Encrypted data shared by multiple users could also be
>   sent over HTTP in order to take advantage of caching
>   proxies. You should also distinguish between encrypted chunks
>   with short-term and long-term data, but that goes without
>   saying.)

This would effectivly result in groups of players all learning the
key as soon as the server tells the first player in the group what
the key is.  It might make for some interesting scouting mechanics,
or squad-based p2p knowledge sharing (offloaded from the server).

MUD-Dev mailing list
MUD-Dev at kanga.nu

More information about the MUD-Dev mailing list