我有一些必须存储在客户端的变量。像往常一样,客户端上的任何东西都可能被篡改。我想签署一些变量,并在数据发送回服务器时验证它们。目前我认为它们是5个64位变量。
在服务器上我想签署这5个变量,然后确保签名在客户端发回时有效。我如何使用C#.NET执行此操作?
-edit-在这种情况下我不使用asp.net
答案 0 :(得分:2)
答案 1 :(得分:1)
一种简单的方法是计算数字上的校验和或散列(例如MD5),并将其与数据一起发送给客户端。当客户端发回数据(和散列)时,使用发送的数据创建另一个散列,并将其与原始散列(由客户端发送)进行比较,以验证数据是否被篡改。
E.g。将数字转换为字符串,连接它们并计算MD5哈希值。在计算哈希值之前,可以通过将当前登录用户的名称或当前的SessionID添加到字符串来“改进”。
答案 2 :(得分:1)
至少:
服务器应具有非对称签名密钥对(私有用于签名,公开用于验证)。
服务器应该向客户端发送包含变量数据的消息,以及变量数据哈希值的签名:
M,S(H(M))
收到后,客户端会存储整个邮件。到时候,客户端将服务器发回一切,然后服务器计算变量数据的哈希并验证
因此确保变量数据是由服务器发出的。
这是协议的基础,应该扩展该协议以处理您需要保护的任何威胁。给定的协议非常容易受到攻击,并且只保证数据是由服务器签名的。
在.NET中实现这一点,Security.Cryptography命名空间几乎提供了所有需要的功能。请参阅以下MSDN article,它提供了使用DSA签名和验证给定哈希值的示例代码。 See here获取使用SHA256创建哈希值的示例代码。