Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用主密钥通过加密进行客户端身份验证?_C#_.net_Security_Encryption - Fatal编程技术网

C# 使用主密钥通过加密进行客户端身份验证?

C# 使用主密钥通过加密进行客户端身份验证?,c#,.net,security,encryption,C#,.net,Security,Encryption,这是一种普遍且被广泛认可的模式吗 第二个问题:适合我的环境的最佳加密标准 上下文:我有一个windows服务,它将JSON数据发送到RESTFul服务。在这种情况下,JSON负载是身份验证凭证(passhash和username),但我仍然必须说明注册用户篡改负载的其他“数据驱动”部分的原因 我的解决方案是:使用源代码中的私钥/主密钥加密有效负载,并尽我所能进行模糊处理。这将验证客户端(除非主密钥已损坏) 编辑:我的服务收集互联网延迟数据。我不想收集手工编辑的数据值。我意识到,由于网络性能/延迟

这是一种普遍且被广泛认可的模式吗

第二个问题:适合我的环境的最佳加密标准

上下文:我有一个windows服务,它将JSON数据发送到RESTFul服务。在这种情况下,JSON负载是身份验证凭证(passhash和username),但我仍然必须说明注册用户篡改负载的其他“数据驱动”部分的原因

我的解决方案是:使用源代码中的私钥/主密钥加密有效负载,并尽我所能进行模糊处理。这将验证客户端(除非主密钥已损坏)


编辑:我的服务收集互联网延迟数据。我不想收集手工编辑的数据值。我意识到,由于网络性能/延迟的波动性/不断变化的性质,用户可以简单地拔掉他们的连接或将其存储到我的客户端没有足够的带宽/资源来完成它的工作。这些都是我无法用我所拥有的知识和时间来现实地解释的事情。然而,我认为我可以保护服务不受手工编辑的有效载荷的影响

如果RESTFul服务是您自己的,您可以在其上启用windows身份验证(或使用windows auth部署另一个实例),然后对用户进行身份验证,最好是验证用户是否属于某个角色(或组)。这样一来,您就没有证书或密钥可供使用,而且它是安全的。

我想做的第一件事是澄清您的期望

数据有两个方面对您很重要:

  • 身份验证-发送给您的数据是从授权的、未经修改的程序发送的
  • 完整性-发送给您的数据在传输过程中未被修改
完整性问题更容易解决,只要让程序使用到服务器的SSL连接即可。您甚至不需要使用由普通CA之一签名的证书,事实上,不使用证书可能更好!您可以为应用程序创建CA,然后,自己使用该私有CA对将在Web服务器上运行的证书进行签名。如果这样做,您可以将CA的公钥硬编码到程序中,并且只允许它连接到具有由您的私有CA签名的证书的服务器。这样做将有助于防止有人设置MITM SSL代理(例如)在传输数据时编辑数据

身份验证是一个更难解决的问题。您需要防止假客户端或修改过的真实客户端连接到您的服务器并发送假数据,这不是一个容易解决的问题。如果您的软件运行在攻击者可以运行任意代码的设备上,则问题不可能解决。不可能的原因是,用户可以附加一个调试器,一步一步地完成代码并复制过程。“解决”它的唯一方法是在不允许用户运行任何东西的东西上运行程序,任何运行的软件都必须首先经过第三方(如未越狱的手机)的审查

然而,你可以“缓解”这个问题,你不需要让它变得不可能,只要足够困难,任何恶意用户都不会觉得克服你设置的障碍是值得的

您可以采取一些措施使攻击者更难对付:

  • 所有的消息都是用一个秘密密钥签名的,你必须隐藏它
  • 在代码上使用代码模糊器,使其更难进行反向工程
  • 在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是否正在修改数据,则