我们公司正在销售汽车马达。如果售出的马达损坏,我们希望客户端(马达的所有者)运行我们的应用程序,该应用程序将从马达中读取数据并将其保存在文件中。我的工作是编写此应用程序。
我的问题是文件安全性。如果文件以纯文本格式存储,则客户端可以毫无问题地对其进行更改,并且我们将不会意识到(如果客户端以物理方式将电机发送给我们并且我们自己运行该应用程序,则我们只能真正知道该数据的真实性。花费时间和金钱)。所以我想我需要加密文件,也许要用AES加密。
现在,(子)问题变成了如何存储密码以进行加密。有点谷歌搜索告诉我,这基本上不能以100%安全的方式完成。唯一可以使用的是混淆,例如白盒加密。这不安全,我们的客户将有很大的动力去破解它。
所以现在我被困在试图找到合适的解决方案。我想知道Stackoverflow上知识渊博的人能否为我提供有关如何解决我的问题的建议。
答案 0 :(得分:1)
实现此目标的唯一安全方法是在受信任的环境中生成并签名数据。客户端PC上运行的应用程序通常不在可信环境中运行。如果您可以信任马达(我猜它运行的是可以与之通信的固件),则马达应生成并签名文件,并且您的应用程序应将其继续传递。
顺便说一句:不要将加密与签名混淆。如果对文件进行加密,请确保没有其他人可以读取该文件,但不能保证不会对其进行操作。如果对文件签名,则可以防止文件被篡改。如果两者都需要(防止篡改并防止未经授权的阅读),则必须进行加密和签名。加密和签名的逻辑是相反的:使用私钥进行签名(任何拥有公钥的人都可以验证)。加密是通过公共密钥完成的(只有拥有私有密钥的任何人都可以读)。这也向您显示了信任问题:要进行签名,您必须将私钥(sic!)传递给客户。您需要采取措施防止提取此私钥。如果没有特殊的硬件,这根本是不可能的。
也:为每个客户端/马达设置不同的私钥。即使使用特殊硬件,也可能有人可以提取该密钥。如果所有电动机都相同,则所有电动机的安全性都会受到破坏。
答案 1 :(得分:0)
您要从电动机中提取什么数据?
OBD端口?
所有权?
如果您不希望代码容易被逆转,
您可以考虑使用硬件
https://www.google.com/search?q=encryption+ic&tbs=qdr:y
为了获得更高的安全性,
我建议采用中间人方式;
他们向您发送数据(通过电子邮件等),
那么你有一个批处理过程,
在单独的服务器/网络上
比较数据。
客户的反馈意见也是如此。
客户永远不知道所有内容都保存在哪个IP网络上。
答案 2 :(得分:0)
正如其他朋友已经提到的那样,您将需要使用2个不同的密钥进行加密和解密的非对称加密。因此,AES作为对称加密系统将无济于事。术语“公共”和“私有”是主观的,这意味着每个人都可能知道公钥,但除了特殊人员之外,其他人都不知道私钥。这些术语恕我直言不适用于您的情况;根据您的应用,这两个密钥都是私密的。在此项目中,我更喜欢将它们称为“服务器”和“客户端”键,而服务器是指维护人员,而客户端是电动机ECU。 您面临的主要问题是通过黑客下载微控制器/ FPGA固件来公开客户端密钥的可能性。假定用于固件[上/下]加载或升级的RS232连接,则需要防止未经授权的固件操纵。在每次传输固件之前,您将必须研究修改固件加载器以使用一次性密码通过RS232进行身份验证的任务;认证的目的是确定授权合法维护代理。由于固件操作是在工厂完成的-使用直接的有线连接-不会有中间人攻击的风险。