C# 使用主密钥通过加密进行客户端身份验证?
这是一种普遍且被广泛认可的模式吗 第二个问题:适合我的环境的最佳加密标准 上下文:我有一个windows服务,它将JSON数据发送到RESTFul服务。在这种情况下,JSON负载是身份验证凭证(passhash和username),但我仍然必须说明注册用户篡改负载的其他“数据驱动”部分的原因 我的解决方案是:使用源代码中的私钥/主密钥加密有效负载,并尽我所能进行模糊处理。这将验证客户端(除非主密钥已损坏)C# 使用主密钥通过加密进行客户端身份验证?,c#,.net,security,encryption,C#,.net,Security,Encryption,这是一种普遍且被广泛认可的模式吗 第二个问题:适合我的环境的最佳加密标准 上下文:我有一个windows服务,它将JSON数据发送到RESTFul服务。在这种情况下,JSON负载是身份验证凭证(passhash和username),但我仍然必须说明注册用户篡改负载的其他“数据驱动”部分的原因 我的解决方案是:使用源代码中的私钥/主密钥加密有效负载,并尽我所能进行模糊处理。这将验证客户端(除非主密钥已损坏) 编辑:我的服务收集互联网延迟数据。我不想收集手工编辑的数据值。我意识到,由于网络性能/延迟
编辑:我的服务收集互联网延迟数据。我不想收集手工编辑的数据值。我意识到,由于网络性能/延迟的波动性/不断变化的性质,用户可以简单地拔掉他们的连接或将其存储到我的客户端没有足够的带宽/资源来完成它的工作。这些都是我无法用我所拥有的知识和时间来现实地解释的事情。然而,我认为我可以保护服务不受手工编辑的有效载荷的影响 如果RESTFul服务是您自己的,您可以在其上启用windows身份验证(或使用windows auth部署另一个实例),然后对用户进行身份验证,最好是验证用户是否属于某个角色(或组)。这样一来,您就没有证书或密钥可供使用,而且它是安全的。我想做的第一件事是澄清您的期望 数据有两个方面对您很重要:
- 身份验证-发送给您的数据是从授权的、未经修改的程序发送的
- 完整性-发送给您的数据在传输过程中未被修改
- 所有的消息都是用一个秘密密钥签名的,你必须隐藏它
- 在代码上使用代码模糊器,使其更难进行反向工程
- 在SSL连接中使用客户端证书,并让服务器拒绝任何没有客户端证书的连接
- 一个比你更有经验的顾问会让你的代码更难逆向工程
所以归结起来,如果您不太担心的话,只需使用bog标准SSL,就可以阻止75%的篡改。如果您更担心,请使用自定义CA技巧来挫败任何SSL MITM攻击,使您的攻击率达到80%。但是,如果你想超过80%,那就变得越来越难了,在某个时候你需要停下来问问自己“我为阻止另一个人向我发送坏数据而投入的时间/精力/金钱值吗?或者,我可以和100个人中的20个人一起发送坏数据,10,5,1怎么样?“你需要问自己,你在保护数据不受谁的影响?这会极大地影响你如何实施解决方案。你能编辑你的问题并添加一段解释为什么需要添加你自己的加密吗(比如说,SSL连接)你的威胁模型是什么?我尽了最大的努力…这是我第一次真正通过开发人员来研究安全性,所以如果你有任何建议,请告诉我。不幸的是,事实并非如此。这是各种各样的客户端windows机和google app engine服务器端。这太可惜了!哦,好吧,我将保留这个答案因为这可能会对将来的人有所帮助。感谢您精心构造的回复。我只是想订阅用于写操作(我想是非自定义证书)的正SSL,以防止通过线路进行篡改(尽管我不太确定如果JSON负载被加密(通过AES等),MITM SSL攻击是否有效)在SSL加密已经发生之前)。我将尝试混淆它(主密钥)。我主要关心的是ISP,我正在努力改进伪造数据以描绘“高质量”“服务。再次感谢!这就是为什么我说找出攻击者是谁很重要的原因。我写下我的回答时认为您正在试图阻止最终用户修改数据。如果您试图检查最终用户的ISP是否正在修改数据,则