Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/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
Python:加密作为防止数据篡改的手段_Python_Encryption_Data Integrity_Tampering - Fatal编程技术网

Python:加密作为防止数据篡改的手段

Python:加密作为防止数据篡改的手段,python,encryption,data-integrity,tampering,Python,Encryption,Data Integrity,Tampering,我公司的许多客户在研究的基础上使用我们的数据采集软件。由于一般研究的性质,一些客户要求对数据进行加密以防止篡改——如果他们的数据被证明是伪造的,可能会产生严重后果 我们的一些二进制软件使用存储在源代码中的密码(看起来像随机字符)对输出文件进行加密。在软件级别,我们能够打开加密文件进行只读操作。如果有人真的想找出密码,以便修改数据,这是可能的,但这将是一项艰巨的工作 我正在考虑使用Python快速开发另一个软件。为了复制加密的功能以阻止数据篡改,到目前为止,我想到的最好办法是使用ctypes和DL

我公司的许多客户在研究的基础上使用我们的数据采集软件。由于一般研究的性质,一些客户要求对数据进行加密以防止篡改——如果他们的数据被证明是伪造的,可能会产生严重后果

我们的一些二进制软件使用存储在源代码中的密码(看起来像随机字符)对输出文件进行加密。在软件级别,我们能够打开加密文件进行只读操作。如果有人真的想找出密码,以便修改数据,这是可能的,但这将是一项艰巨的工作

我正在考虑使用Python快速开发另一个软件。为了复制加密的功能以阻止数据篡改,到目前为止,我想到的最好办法是使用
ctypes
和DLL进行文件读写操作,这样加密和解密的方法就“充分”混淆了

我们很清楚,一个“不可破解”的方法是不可能实现的,但与此同时,我显然不习惯在Python源代码中以纯文本的形式使用加密/解密方法。我认为,“非常强烈地阻止数据篡改”就足够了


使用Python实现加密或其他数据完整性证明的最佳方法是什么?我看到过关于生成“防篡改签名”的讨论,但是如果签名是用纯Python生成的,那么为任意数据生成签名就很简单了。我们或许可以打电话回家证明数据的完整性,但这似乎给所有相关人员带来了极大的不便。

如果你在某处嵌入密码,你已经被套住了。你不能保证什么

但是,您可以使用公钥/私钥加密来确保数据未被篡改

其工作方式如下:

  • 生成公钥/私钥对
  • 保持私钥安全,分发公钥
  • 散列数据,然后使用私钥对散列进行签名
  • 使用公钥验证哈希

  • 这将有效地使数据在公司外部只读,并为您的程序提供了一种简单的方法,可以在不分发密码的情况下验证数据是否已被修改。

    如果您在某处嵌入密码,则说明您已经被使用了密码。你不能保证什么

    但是,您可以使用公钥/私钥加密来确保数据未被篡改

    其工作方式如下:

  • 生成公钥/私钥对
  • 保持私钥安全,分发公钥
  • 散列数据,然后使用私钥对散列进行签名
  • 使用公钥验证哈希

  • 这将有效地使数据在公司外部只读,并为您的程序提供了一种简单的方法,可以在不分发密码的情况下验证数据是否未被修改。

    作为一般原则,您不希望使用加密来防止篡改,而是希望使用数字签名。加密为您提供了保密性,但您追求的是完整性

    计算数据上的哈希值,并将哈希值存储在您知道它不能被篡改的位置,或者对其进行数字签名


    在您的情况下,似乎您希望确保只有您的软件才能生成文件?正如您所说,当您的用户可以访问该软件时,不可能存在真正安全的方法来执行此操作,因为他们可以将其拆开并找到您包含的任何密钥。考虑到这一限制,我认为您使用DLL的想法与您所能做到的一样好。

    作为一般原则,您不希望使用加密来防止篡改,而是希望使用数字签名。加密为您提供了保密性,但您追求的是完整性

    计算数据上的哈希值,并将哈希值存储在您知道它不能被篡改的位置,或者对其进行数字签名


    在您的情况下,似乎您希望确保只有您的软件才能生成文件?正如您所说,当您的用户可以访问该软件时,不可能存在真正安全的方法来执行此操作,因为他们可以将其拆开并找到您包含的任何密钥。考虑到这一限制,我认为您使用DLL的想法与您所能做到的一样好。

    这里还有另一个问题。据推测,您的数据采集软件正在从某些外部源(如某种测量设备)收集数据,然后对原始数据进行必要的处理并存储结果。不管你在程序中使用什么方法,另一种可能的攻击向量是向程序中输入不良数据,程序本身不知道你是在用补给数据而不是来自测量设备的数据。但这可能无法解决

    另一种可能的攻击向量(可能是你所关心的)是在存储了计算机后对计算机上的数据进行篡改。这里有一个想法来减轻风险:设置一个单独的服务器(这可以是你的公司运行的,或者更可能是客户端设置的)。使用受密码保护的web服务,允许用户添加(但不删除)数据记录。然后让程序在收集数据时将数据发送到服务器(使用程序中存储的密码/连接字符串)。如果您的程序接收到数据已成功存储在服务器上的确认,则仅允许它将数据写入本地计算机

    现在假设攻击者试图篡改数据o