Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# .NET applocation中的脱机安全性在代码中存储模糊密钥_C#_.net_Security_Cryptography_Obfuscation - Fatal编程技术网

C# .NET applocation中的脱机安全性在代码中存储模糊密钥

C# .NET applocation中的脱机安全性在代码中存储模糊密钥,c#,.net,security,cryptography,obfuscation,C#,.net,Security,Cryptography,Obfuscation,我正在开发一款无法连接到互联网的C#应用程序 此应用程序将为我的硬件生成一个配置文件 我想确定的是,当我把配置文件交给我的助手时,他并没有改变它,而是在硬件中放了一个配置不同的文件 为了避免这种情况,我目前正在使用一种简单的方法 在代码中我有一个键:abcd123 我的应用程序生成一个配置文件,然后: 散列配置文件,并使用存储在 字符串变量键 将配置文件交给我的助手,由助手将其加载到硬件中 现在,硬件拥有密钥abcd123,它解密配置并散列有效负载。如果2个散列相同,我假设我的助手没有更改配置文

我正在开发一款无法连接到互联网的C#应用程序

此应用程序将为我的硬件生成一个配置文件

我想确定的是,当我把配置文件交给我的助手时,他并没有改变它,而是在硬件中放了一个配置不同的文件

为了避免这种情况,我目前正在使用一种简单的方法

  • 在代码中我有一个键:abcd123

  • 我的应用程序生成一个配置文件,然后:

  • 散列配置文件,并使用存储在 字符串变量键

  • 将配置文件交给我的助手,由助手将其加载到硬件中

  • 现在,硬件拥有密钥abcd123,它解密配置并散列有效负载。如果2个散列相同,我假设我的助手没有更改配置文件

    我所关心的是.NET代码中的密钥存储非常容易恢复,而不会产生混淆

    我就这样买了,但我不知道我的钥匙有多安全

    我没有足够的技巧去编译我的程序,看看键是否仍然处于清除状态

    你能建议我用什么方法来确保我的钥匙是“安全的”

    我知道没有办法保护它,但我只想在我的自动模糊处理上增加一个合理的安全性,我对这方面了解不多

    我希望我已经说清楚了,但要求澄清

    我想确定的是,当我把配置文件交给我的助手时,他并没有改变它,而是在硬件中放了一个配置不同的文件

    您正在寻找一种数字签名算法。大体上,有两种方法可以做到这一点:

    • 使用计算加密可靠散列的对称算法(例如SHA-2)。您可以发布散列和相应的文件。硬件获取文件,使用相同的算法计算哈希,并断言它与公开发布的哈希相同。请参见如何提供库和匹配的签名

    • 另一种方法是使用公钥-私钥签名,例如RSA。可以从中获得一个示例,其中展示了如何使用RSACryptServiceProvider对XML文档进行签名。您可以创建私有公钥对。私钥用于创建数字签名,您可以自己保存。使用公钥,您只能验证签名,这就是您部署到设备的内容

    来自上面链接的另一个安全提示:

    切勿在中存储或传输非对称密钥对的私钥 纯文本。永远不要将私钥直接嵌入到您的 源代码。嵌入的键可以使用 Ildasm.exe(MSIL反汇编程序)或在 文本编辑器,如记事本

    我想确定的是,当我把配置文件交给我的助手时,他并没有改变它,而是在硬件中放了一个配置不同的文件

    您正在寻找一种数字签名算法。大体上,有两种方法可以做到这一点:

    • 使用计算加密可靠散列的对称算法(例如SHA-2)。您可以发布散列和相应的文件。硬件获取文件,使用相同的算法计算哈希,并断言它与公开发布的哈希相同。请参见如何提供库和匹配的签名

    • 另一种方法是使用公钥-私钥签名,例如RSA。可以从中获得一个示例,其中展示了如何使用RSACryptServiceProvider对XML文档进行签名。您可以创建私有公钥对。私钥用于创建数字签名,您可以自己保存。使用公钥,您只能验证签名,这就是您部署到设备的内容

    来自上面链接的另一个安全提示:

    切勿在中存储或传输非对称密钥对的私钥 纯文本。永远不要将私钥直接嵌入到您的 源代码。嵌入的键可以使用 Ildasm.exe(MSIL反汇编程序)或在 文本编辑器,如记事本


    只有在不将密钥放入代码中的情况下,才能获得真正的安全性

    一种方法是使用公钥加密(例如RSA)

    您可以创建公钥和私钥。私钥永远不会离开您的系统

    您可以使用私钥对配置文件进行签名

    在硬件上运行的软件包含公钥,并使用它来验证配置文件的签名,而无需任何网络连接


    即使全世界都知道您的公钥,没有私钥(仅对您可用),也没有人可以创建有效的签名。

    只有在不将密钥放入代码中的情况下,您才能获得真正的安全性

    一种方法是使用公钥加密(例如RSA)

    您可以创建公钥和私钥。私钥永远不会离开您的系统

    您可以使用私钥对配置文件进行签名

    在硬件上运行的软件包含公钥,并使用它来验证配置文件的签名,而无需任何网络连接


    即使全世界都知道你的公钥,没有私钥(仅对你可用),没有人能创建有效的签名。

    假设你在网络上,您可以通过联网PC上的web服务进行身份验证。我的应用程序在从未连接到网络的脱机计算机上运行,我无法通过任何方式将其连接到internet。假定您在网络上,您可以通过联网PC上的web服务进行身份验证。我的应用程序运行在从未连接到网络的脱机计算机上,我没有办法