我有一个多渠道应用程序,它有一个Web版本和一个使用C#的移动版本。
此应用程序使用' Trust No One'安全模型。这意味着,在发送到服务器之前,用户注册时生成的密钥在客户端使用密码加密。
这些密钥用于加密数据,也存储在服务器端。
原因,RSA私钥是加密的,我们不希望能够解密数据。
现在,可以使用Xamarin和C#在浏览器上或通过移动应用程序使用该应用程序。
使用JS中生成的密钥加密的数据应该能够使用移动应用程序上的C#进行解密,反之亦然。
实现与JS和C#兼容的此类加密的最佳方式是什么。
PS:密钥是使用浏览器插件生成的!因此,它更安全,因为其他应用程序将无法访问插件的后台范围。
答案 0 :(得分:0)
我最初的投票结果太宽泛了。找不到针对不存在的安全协议的匹配原语集,不能详细解答。然而,可以给出一般答案,所以我会这样做。
首先需要定义协议。您应该只使用E(用于加密)和D(用于解密)而不是使用RSA或AES,并指定您希望使用哪些密钥。使用H进行散列等。确保您的方案是安全的;如果你坚持这样做,那就问SE's IT security site。
在您定义了协议之后,您需要找到C#和Java Script上都可用的匹配原语。快速浏览表明,ECIES(比RSA加密效率更高)并不直接用于Java Script。所以在这个时候,坚持使用RSA-OAEP可能会更好。您应该已定义hybrid cryptosystem,因此您可能还希望使用AES身份验证加密(例如GCM或CCM)。
确保您的RSA实施能够抵抗基于时间的攻击,但其他应用程序可能会在密钥生成期间或解密期间尝试读取RSA私钥(或签署,如果已实施)。< / p>
正如你所看到的,这很快变得越来越难。这就是为什么开发人员应该尝试坚持使用预定义的结构,例如TLS。如果TLS不是一个选项,您可能希望查找容器格式,如CMS或PGP,并将其用作起点。当然,找到这些结构的安全实现仍然很棘手(欢迎加密)。