如何加密文件和隐藏密码

问题描述 投票:0回答:3

我们公司销售汽车电机。如果销售的电机损坏,我们希望客户(该电机的所有者)运行我们的应用程序,该应用程序从电机读取数据并将其保存在文件中。我的工作是编写这个应用程序。

我的问题是文件安全性。如果文件以纯文本形式存储,客户端可以毫无问题地更改它,我们也不会意识到它(如果客户端将这些电机发送到我们身上并且我们自己运行应用程序,那么我们真的只能知道该数据的真实性 - 其中花费时间和金钱)。所以我认为我需要加密文件,可能使用AES加密。

现在(子)问题变成了如何存储加密密码。一点谷歌搜索告诉我,它基本上不能以100%安全的方式完成。唯一可以使用的是混淆,比如白盒密码术。哪个不安全,我们的客户将有很大的动力破解它。

所以现在我很难找到一些合适的解决方案。我想知道来自Stackoverflow的更多知识渊博的人是否可以告诉我如何解决我的问题。

c++ file encryption passwords
3个回答
1
投票

实现此目的的唯一安全方法是在受信任的环境中生成和签署数据。在客户端PC上运行的应用程序通常不在受信任的环境中运行。如果您可以信任电机(我猜它运行某种可以与之通信的固件),电机应该生成并签署文件,您的应用程序应该简单地传递它。

顺便说一句:不要将加密与签名混为一谈。如果您加密文件,则确保没有其他人可以读取它,但不保证不会进行操作。如果您对文件进行签名,则可以防止其被操纵。如果你想要两者(防止操纵和防止未经授权的阅读),你必须加密和签名。加密和签名的逻辑是相反的:使用私钥进行签名(任何拥有公钥的人都可以进行验证)。使用公钥进行加密(只有具有私钥的任何人才能进行加密)。这也向您显示您的信任问题:对于签名,您必须将私人(sic!)密钥发送给您的客户。您需要采取措施来阻止提取此私钥。没有特殊硬件,这基本上是不可能的。

另外:为每个客户端/电机制作不同的私钥。即使使用特殊硬件,也可能有人能够提取该密钥。如果所有电机都相同,则所有电机的安全性都会被破坏。


0
投票

您从电机中提取了哪些数据? OBD端口? 所有权?

如果您不希望您的代码很容易被逆转, 你可以考虑硬件 https://www.google.com/search?q=encryption+ic&tbs=qdr:y

为了更安全, 我建议采用中间人的方式; 他们向您发送数据(通过电子邮件等), 然后你有一个批处理过程, 在单独的服务器/网络上 比较数据。 客户反馈也以同样的方式回归。 客户永远不会知道什么是IP网络所节省的一切。


0
投票

正如其他好友已经提到的那样,你需要使用2个不同密钥进行加密和解密的非对称加密。因此,AES作为对称加密系统无济于事。术语“公共”和“私人”是主观的,这意味着每个人都可以知道公钥但是除了特殊的人知道私钥之外的其他人。恕我直言的这些条款不适用于您的案件;根据您的应用,这两个键都是私密的。我更喜欢称它们为这个项目的“服务器”和“客户端”键,服务器指的是维护服务员,而客户端是电机ECU。您面临的主要问题是通过黑客下载微控制器/ FPGA固件来暴露客户端密钥的可能性。假设RS232连接用于固件[up / down]加载或升级,您需要防止未经授权的固件操作。在每次固件传输之前,您将不得不调查修改固件加载程序以使用一次性密码通过RS232进行身份验证的任务;身份验证的目的是识别授权合法维护代理。由于固件操作是在工厂完成的 - 使用直接有线连接 - 不存在中间人攻击的风险。

© www.soinside.com 2019 - 2024. All rights reserved.