At the very minimum:
The server should have an asymmetric signature key-pair (private for signing, public for verification).
The server should send the client a message containing the variables data, and a a signature for the hash value of the variables data:
M, S(H(M))
Upon reception, the client stores the entire message. When the time comes, the client sends the server everything back, then the server computes the hash for the variables data and verifies that
V(S(H(M))) = H(M)
Thus making sure that the variables data was issued by the server.
This is the very basis of the protocol, which should be expanded to handle whatever threats you need to secure against. The protocol as given is very prone to attacks, and only guarantees that the data was signed by the server.
Implemening this in .NET, almost all needed functionality is provided by the Security.Cryptography namespace. See the following MSDN article, it provides sample code for signing and verifying a given hash value, using DSA. See here for sample code of creating a hash value using SHA256.