Author: Keith Evans
Date: 20:41:19 09/12/04
Go up one level in this thread
On September 12, 2004 at 00:33:49, Robert Hyatt wrote: >On September 11, 2004 at 22:24:53, Keith Evans wrote: > >>On September 11, 2004 at 10:19:55, Robert Hyatt wrote: >> >>>On September 10, 2004 at 23:58:02, Keith Evans wrote: >>> >>>>On September 10, 2004 at 17:10:53, Robert Hyatt wrote: >>>> >>>>>On September 10, 2004 at 11:37:39, Keith Evans wrote: >>>>> >>>>>>On September 10, 2004 at 11:19:39, Robert Hyatt wrote: >>>>>> >>>>>>>On September 10, 2004 at 06:33:16, Sam S wrote: >>>>>>> >>>>>>>>On September 09, 2004 at 21:46:56, Robert Hyatt wrote: >>>>>>>> >>>>>>>>>On September 09, 2004 at 17:54:45, Sam S wrote: >>>>>>>>> >>>>>>>>>>On September 09, 2004 at 10:40:22, Robert Hyatt wrote: >>>>>>>>>> >>>>>>>>>>>On September 09, 2004 at 00:44:57, Sam S wrote: >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>>It's a yawn in that the weaknesses have been known for a long time. There are >>>>>>>>>>>>>solutions to much of the problem, using the sort of challenge-response stuff >>>>>>>>>>>>>used in ssh (secure shell) access. But artificial lag is simply impossible to >>>>>>>>>>>>>get rid of... >>>>>>>>>>>> >>>>>>>>>>>>How about this idea: at the beginning of each game, the server generates a >>>>>>>>>>>>one-time executable code and sends it to the client, and for each move this >>>>>>>>>>>>executable code would send back to the server a signature created from (current >>>>>>>>>>>>move, current move number, time spent on making this move) along with the move >>>>>>>>>>>>and time-spent data, so that the server can authenticate this signature for each >>>>>>>>>>>>move. >>>>>>>>>>>>It'd be possible to break each specific one-time executable code that the server >>>>>>>>>>>>sent by finding out how it encrypts the signatures, but if the server generates >>>>>>>>>>>>new executable codes that are completely different from one another for each >>>>>>>>>>>>game before the game starts, it'd be too hard to break in such short amounts of >>>>>>>>>>>>time... >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>Not so easy. How would you generate an executable for a sparc, a cray, a X86, >>>>>>>>>>>and IA64, a HPPA, a MIPS, etc. Particularly when you can't easily find out what >>>>>>>>>>>is on the other end? >>>>>>>>>>> >>>>>>>>>>>ssh has solved this problem. It is open-source. That challenge-response >>>>>>>>>>>approach could easily be used to deal with this. >>>>>>>>>> >>>>>>>>>>With regard to different CPUs, the server could query the client and see under >>>>>>>>>>which CPU it is running, and the client would have to answer if it wants to use >>>>>>>>>>timestamps. But let's assume that there's only one kind of CPU involved, in >>>>>>>>>>order to simplify. >>>>>>>>> >>>>>>>>>What client is it going to query. You can connect to ICC with xboard. Or a >>>>>>>>>plain ascii telnet session. Or with a custom interface you can write (I have >>>>>>>>>one I wrote in fact). There's no way to be sure the "client" will know how to >>>>>>>>>respond, much less how to ask it anything not knowing what it is... >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>>You said it yourself that ssh doesn't solve the artifical lag issue. It'd be >>>>>>>>>>possible to hack the client and find out where it calls the OS to get the >>>>>>>>>>current time, and modify it so it'd report fake timestamps, while using ssh. >>>>>>>>> >>>>>>>>> >>>>>>>>>I can introduce false lag easily without touching the client software. That is >>>>>>>>>a TCP/IP issue... >>>>>>>>> >>>>>>>> >>>>>>>>Under this idea of one-time executable codes: when the server sends a new move >>>>>>>>to the client, it is encrypted so that only the one-time executable code can >>>>>>>>read it, and record the time when it was received. Therefore, when the client >>>>>>>>would send a move with a timestamp back to the server, if for example the >>>>>>>>timestamp says that the client spent 5 seconds on the move, you can be sure that >>>>>>>>from the moment the client saw his opponent's move that the server sent him, >>>>>>>>until the moment he chose his move in reply to his opponent's move, exactly 5 >>>>>>>>seconds have passed. >>>>>>>>I agree that you can introduce false lag that would give the client more time to >>>>>>>>think e.g. after he made his move and before receiving his opponent's move, but >>>>>>>>this false lag would be the same as if there was real network lag. There's no >>>>>>>>difference between this artifical lag that you introduce and a situation where >>>>>>>>your network really lags. This also means that this kind of false lag would give >>>>>>>>both players the same amount of time to think on their moves, except that you >>>>>>>>are the one who controls what would be to extra time with the artifical lag that >>>>>>>>you'd introduce. On the other hand, currently in ICC the situation is that the >>>>>>>>client can cheat and give a fake timestamp, so for example when it reports to >>>>>>>>the server that it spent 5 seconds on a move, and the servers receives this data >>>>>>>>after 10 seconds, it could be that the client cheated and it actually spent e.g. >>>>>>>>9 seconds on the move and reported it as 5 seconds, and in this situation it's >>>>>>>>not true that both players would have the same amount of time to think on their >>>>>>>>moves. >>>>>>>>So from what I understand, the articial lag you can introduce with TCP/IP would >>>>>>>>be just as if you were on a network with a real lag problem, but providing a >>>>>>>>solution to the problem where the client can cheat and say that he spent less >>>>>>>>time on a move (from the moment he saw his opponent's move) does have >>>>>>>>importance. >>>>>>>>So I'm still interested to know if this one-time executable codes can be a good >>>>>>>>way to handle this, again if we simplify and assume there's only one CPU >>>>>>>>involved, e.g. only x86 for the blitzin client. >>>>>>> >>>>>>> >>>>>>>If you want to totally exclude any OS but windows, any CPU but X86, and any >>>>>>>end-point client but blitzin, then the idea _could_ work. But they would >>>>>>>instantly lose a significant part of their customer base, which would make it a >>>>>>>bad business decision. >>>>>> >>>>>>How about using a virtual machine language? >>>>> >>>>>OK. I am going to connect via telnet. How is that going to work? >>>> >>>>I was only addressing the x86 issue. But maybe something could be done with Java >>>>that would be more portable. I think that people would be most concerned with >>>>security, portability, and of course ease of setup and use. If you choose telnet >>>>then you give up security (referring to eavesdropping and taking over >>>>connections, not executing arbitrary code on your computer) and probably ease of >>>>use, but you sure get portability. >>> >>> >>>You are not completely addressing the X86 issue. I run linux. Your windows >>>executable will not work here. My linux executable will not work there. Even >>>different versions of the O/S don't "share" executables completely. It is a >>>_huge_ problem.. >> >>I said a virtual machine like Java, not x86 code. > > >OK. With Java, you need a VM to run it. The problem is that too many clients >won't deal with that at all. IE basic "telnet chessclub.com 23". How to inject >a Java upload in there? > >If you stipulate a specific client, you become playchess.com which I consider to >be 100% worthless since I can't run the fritz GUI here on linux, nor would I >want to. > >I don't see how a dynamic client upload can work. Period. Well they could offer a variety of ways to connect which would provide different levels of service. If they could really address the cheating issue, then some players might prefer to play only those people running a more trusted client. I can see why they wouldn't want to do this, but it's a possibility. BTW - isn't running telnet across the Internet a really questionable thing to do these days? I mean with regards to security.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.