我们可以加密必须使用任何私钥和服务器生成位解密的数据吗?

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

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

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

我希望下面的图表可以清楚地解释它

enter image description here

可能吗?可以做到这一点的算法是什么?

security encryption private-key
3个回答
1
投票

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

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

每次下载文件时都要这样做,附加一个随机字符串。然后使用用户的公钥对文件进行加密,并使用相同的字符串生成相应的哈希对称。例如,受密码保护的ZIP文件中的GPG文件。

因此,当Bob下载Financial_Report_201809_d8a1b2e6.pdf.zip时,Alice会下载Financial_Report_201809_ff2a91c3.pdf.zip

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

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

还要注意,因为他们需要在线获取外部密码,并且最后留下了一个明文文件,这几乎在功能上等同于在建立用户身份后以明文形式下载的文件。

主要区别是:

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

UPDATE

您只想加密整个文件一次(对所有用户),然后将相同的文件发送给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,因此,在701Cth位置的解密矩阵将保持a18b。

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

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

然后,您向用户发送此矩阵,该矩阵具有128K字节,其中701cth位置为791c。

用户运行transmogrification,这是非常快的,并留下一个以791c开头的文件(因为701c变为791c - 我在我的例子中错误地选择了两个相似的值,这没有意义)。一旦用他的私钥解密,该值将产生18b,这是“可读”值。

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

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

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

(这里的问题仍然是用户现在可以用他的私钥解密文件,然后发送它,即使它很笨,因为它是一个非常大的文件)。


0
投票

必须使用客户端的私钥解密数据,而无需服务器知道客户端的privateKey 原始文件只能由特定客户端使用自己的私钥解密,

有一个常用的密码系统叫做hybrid cryptosystem

步骤是:

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

-1
投票

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

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

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

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