我们能否加密必须用任何私钥加上服务器解密的数据才能生成位?

时间:2018-09-17 05:08:20

标签: security encryption private-key

我想出了一个制作安全数据的方案。假设我有一个公共加密文件,任何人都可以下载。但是,只要有人想要解密该数据,就需要从服务器获取密钥

使密钥不能共享。来自服务器的密钥将无法直接解密数据。但是,数据必须在使用客户端的私钥解密,而服务器不知道这些客户端的私钥

我希望下图可以清楚地解释

enter image description here

有可能吗?可以执行此操作的算法是什么?

3 个答案:

答案 0 :(得分:1)

  

我想出了一个制作安全数据的方案。假设我有一个公开加密的   任何人都可以下载的文件。但是,只要有人想要解密该数据,就需要从服务器获取密钥

     

使密钥不能共享。来自服务器的密钥将无法解密   数据直接。但是必须使用客户端的   之后的私钥,而服务器不知道这些客户端的私钥

设置为每次下载文件时,都会附加一个随机字符串。然后,使用用户的公共密钥对文件进行加密,并使用相同的字符串生成的适当哈希对称地对文件进行加密。例如,受密码保护的ZIP文件中的GPG文件。

因此,爱丽丝下载了Financial_Report_201809_d8a1b2e6.pdf.zip,而鲍勃下载了Financial_Report_201809_ff2a91c3.pdf.zip

如果他们想解密文件,则需要将服务器返回给随机字符串,服务器将为他们提供外部ZIP的密码。然后,他们留下一个只有私钥才能解码的加密文件。

请注意,一旦他们解密了文件,没有什么阻止他们将文件无格式转发给其他人。另一方面,共享加密的PDF没有任何用处,因为它们还需要共享其私钥。

还请注意,由于他们需要在线才能获得外部密码,并且最后留下明文文件,因此(几乎)在功能上等同于一次下载明文文件用户身份已建立

主要区别在于:

  • 加密文件(上例中为PDF)可能根本没有被服务器加密。该文件可能是由用户提供的,然后他对只有他自己可以读回文件感到满意(不过,其他任何人下载文件都没有意义。)
  • 已传输文件非常已安全传输。具有对数据流的完全访问权限的攻击者将无法对该文件进行解码(但这仅是通过使用用户的公共密钥进行加密即可获得的-不需要额外的ZIP阶段)。

更新

您只想对整个文件加密一次(对于所有用户)(然后对所有用户),然后将同一文件发送给Alice和Bob,让他们需要两个不同的密钥在解密时。这里的问题是,由于它是同一文件,所以Alice的密钥也可以在Bob的文件上使用。除非您可以隐藏解密过程的某些细节(例如,使用您控制且无法调试且始终会连接到服务器的程序),否则这里没有万用的法宝:该命题具有始终显示为失败)。

如果要限制,可以发送带有对称加密数据有效负载(始终相同)和非常短,非对称加密密钥有效负载(始终不同)的海量文件,但仍然,您将很容易被捕获已解密的密钥:

[ RSA(ALICE.PUB, "SQUEAMISH OSSIFRAGE" ][ RIJNDAEL("SQUEAMISH OSSIFRAGE", LARGE FILE) ]

在上述情况下,某些程序必须读取加密标头并解密“ Squeamish Ossifrage”密码,然后继续解密(例如播放)多余的有效负载而不会截获密码。这意味着您需要自己提供程序。

从功能上讲,该程序等同于连接到服务器并下载问题的“是”或“否”(经过适当加密,签名和保护)的程序。”我是爱丽丝的播放器。我可以解密并播放“永远都不要放弃。avi'?,除了Alice的播放器和服务器共享的秘密外,没有其他密码或公钥被知道或交换。

UPDATE II

如果目标是节省加密资源,则可以按照注释中的提示将加密设置为客户端:

  • 使用目的生成的私钥对文件进行一次加密。
  • 私钥存储在二进制文件中(我们必须假定它是不可破解的)。
  • 用户必须提供其公共密钥才能使解密起作用
  • 程序可以从存储库中验证公共密钥(或者,用户可以将公共密钥提供给服务器,服务器将生成并发送二进制文件以供下载)
  • 然后程序同时运行解密和重新加密
  • 该用户只剩下用其公共密钥加密的文件,他自己可以解密。

UPDATE III

为了使明文文件从不公开(即,算法是否泄漏无关紧要),可以设计以下方案。请记住,我不是密码学家,可能会发现各种副渠道。

  • 您准备一个转换表,该表将每个16位字映射到另一个16位字。即使您使用两个互逆矩阵进行编码和解码,这也是对称加密的一种形式。每个矩阵都包含所有可能的16位字,这意味着65536个值,因此大小为128 Kb。
  • 您可以使用加密矩阵对文件进行一次加密。没有解密矩阵,该文件将无法使用。
  • 用户必须向您发送他的公钥。
  • 您通过使用该密钥加密每个单词来准备一个迁移文本矩阵,并将解密值用作索引。

因此,例如,说明文文件的第一个单词是A18B。在加密矩阵中,经过加扰后,第A18B位将包含701C,因此,在第701C位的解密矩阵将保持a18b。

用户有一个以701c开头的文件...没有用。

用户向您发送他的公钥,并且您对从0000到ffff的所有单词运行65536加密。然后,您确定a18b的加密为791c。您准备一个在701cth位置具有791c的重新编码矩阵。

然后向用户发送此矩阵,该矩阵有128K字节,第701c位为791c。

用户运行迁移速度非常快,并且剩下一个以791c开头的文件(随着701c变成791c,我在示例中错误地选择了两个相似的值,这没有意义)。 使用他的私钥解密后的值将产生a18b,即“可读”值。

用户现在拥有一个用其公共密钥加密的文件。 a18b值从未出现在任何地方。

剩下的一切就是让用户使用其私钥和16位代码块大小来解密文件。 此操作将由客户端运行,并且运行速度很慢,这就是通常对大型随机快速对称密钥进行RSA编码并用于对称快速加密大型文件的原因,私钥将对称密钥解锁后,很快就可以解密。

用户无法将128K发送给任何人,因为没有私钥,他们就毫无用处。

(这里的问题仍然是,用户现在可以使用自己的私钥解密文件,并将其发送出去,即使它非常笨拙,因为它非常大)。

答案 1 :(得分:0)

  

此后,必须在没有服务器知道客户端的私有密钥的情况下使用客户端的私有密钥对数据进行解密
  原始文件只能由特定客户端使用其自己的私钥解密,

有一个常用的密码系统,称为hybrid cryptosystem

步骤是:

  1. 原始数据使用随机唯一密钥加密。
  2. 数据加密密钥由客户端的公共密钥加密(服务器需要了解客户端的公共密钥)。
  3. 客户端需要使用其私钥来解密文件加密密钥并解密文件

答案 2 :(得分:-1)

您可以使用任何非对称密码算法。

使用了公开私有 密钥对。公钥用于加密只能用私钥解密的数据。有很多资源,例如文章InfoSec Institute的形式。

有几种经过验证的良好非对称算法,例如RSA,DSA,椭圆曲线密码术(以太坊区块链使用)。还有很多Python库。