[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: computer-go: Authenticating the identity of a remote go-playing computer program
From: William Harold Newman <william.newman@xxxxxxxxxxxxxxxxx>
A modern microprocessor has such a complicated state (especially
including the state of its cache) that unless you go to considerable
trouble to initialize it to a known state, the time spent in a
calculation is not deterministic. And using any typical OS (including
MS Windows, almost any Unix, or the Mac OS) makes the calculation time
even less deterministic, because of the way that the OS implements
multitasking, virtual memory, and other things.
If a program checks the wall clock to determine how much calculation
to do, it will still be deterministic in the sense you refer to above.
That kind of determinism is useful for some purposes (like debugging).
However, it's not enough to prevent cheating. For example, I can write
a program which cycles through the most plausible moves, changing its
mind every millisecond or so. When a move comes up which I like, I
make a fake record of the clock running out. Voila.
If you have a proposal for preventing this without making it
impossible for programs to use real-time clocks for time management,
bring it on. Or you can try to forbid the use of real-time clocks for
time management, but I'm afraid that many programmers would be very
unhappy with this. (I would certainly be unhappy with it.)
I never claimed it was impossible to incorporate non-randomness into a
program, only that I don't think it "limits" a program. It was
earlier implied that determinism was a limiting requirement that
prevented sophisticated AI techniques from being used.
In earlier emails I argued that it was worth the time to design your
program to be deterministic. The whole thrust of my argument is that
you don't have to weaken your program in any significant way to
accomplish good solid deterministic behavior.
If it turns out that I am wrong about this, it won't be because
someone could not use a real time clock. I'm not forced to use YOUR
exact time management technique any more than I am forced to use a
true random number generator instead of a psuedo random number
generator just because you say so.
For any useful time management scheme you can dream up, I can provide
a close deterministic approximation.
By the way, even though your email is mostly correct (but not relevant
to my points) you made a big error and then used it to justify your
point which was not fair. You talked about "making a fake record of
the clock running out", but you are not allowed to wait until AFTER a
move is played and then make up arbitrary data and claim it was part
of the input state. If your program is deterministic, which is our
premise, then the output is defined soley from the input state, which
cannot be contrived after the output happens. Your program is allowed
to publish it's input state as long as it is published before it has
knowledge of the opponents move (actually even this is a little
dangerous if the move is easy to anticipate.)
Third, the "there's an engineering solution to every problem" approach:
If you want to do something which might be in some sense
straightforward but which is probably nontrivial enough to be
well worth publishing, then
(a) Write a Go program which plays a good enough game of Go to
do respectably well in a serious tournament, despite (i)
being strongly deterministic (i.e. no real-time input) and
(ii) being specified in a language with sufficiently nice formal
properties that you can do the zero-knowledge proof below.
(b) Before each tournament game, submit a cryptographically strong
hash of the program and its starting state.
(c) After the tournament, participate in a zero-knowledge proof
that your program has the given hash and produces the given
output.
But until you've demonstrated the practicality of doing this, no
stampede of others doing it is likely to start. (And even once
you've demonstrated that this can be done, don't hold your breath
waiting for the stampede to start!)
Which is what every one of us has already said.
Essentially, you described the engineering approach accurately.
A few people seem to feel threatened somehow by this idea, as I've
seen some critical, negative and dismissive emails on this. It's
certainly not anything worth taking seriously, it's just a talking
point.
Don