The Provably Fair process we use:
1. We create a server 'seed' to generate our random numbers.
2. We add 20 symbol secret (which doesn't participate in the draw of the number, its sole purpose is to secure the server seed) with the server seed, and we show you a SHA256 hash of the server seed before the beginning of the game.
3. We take the client seed and we combine it with the server seed to get the roll result.
Use the following .NET script to verify the outcome was indeed random:
Dim ServerSeed As Integer = 1234567 Dim ServerSecret As String = "ABCDEFG12345" Dim ServerSHA256 As String = Me.SHA256(ServerSeed.ToString & "-" & ServerSecret) Dim ClientSeed As Integer = 7654321 Dim ClientNumber As Double = Me.DiceRoll(ServerSeed, ClientSeed) Function DiceRoll(ByVal ServerSeed As Integer, ByVal ClientSeed As Integer) As Double Dim r As New MersenneTwister.MTRandom((ServerSeed + ClientSeed)) Return (r.genrand_real3 * 100).ToString("0.####") End Function Function SHA256(ByVal value As String) As String Dim v() As Byte = System.Text.Encoding.UTF8.GetBytes(value) Dim p As New System.Security.Cryptography.SHA256CryptoServiceProvider Dim h() as Byte = p.ComputeHash(v) Dim s As String = "" For Each b As Byte In h s = (s & b.ToString("x2")) Next Return s End Function