I have thought up a method for generating random numbers between a client and a server which I hope is fair:
The client and server decide on a range in advance, $0$ trough $n-1$.
The server generates a $256$ bit random number $m$ (in the range $0$ to $\operatorname{floor}(\frac{2^{256} }{ n}) · n$) and hashes it with SHA-256 to give $m'$. $m'$ is then sent to the client.
The client generates a $256$ bit random number $o$ (as above) and sends it to the server.
The server can now calculate a fair random number $p = m + o \pmod n$.
The server sends $m$ and $p$ to the client.
The client can now check $\operatorname{SHA256}(m) = m'$ and $p = o + m \pmod n$.
Am I overlooking anything?