假设我们有一个多用户系统,其中:

  • 中央机构 (C) 可以创建并向其自己的所有权发行虚拟商品 (Zk)。
  • 商品 (Zk) 的所有者 (Xi) 可以将所有权转让给另一个用户 (Xj)。
  • 一个用户(Xi)可以声称拥有一个好(Zk),这应该是可验证的。

  • 例如:
  • C 创建了两个虚拟物品,Z1 和 Z2。 (并且从未创建过 Z3)
  • C 将 Z1 的所有权转让给用户 X1
  • X1 将 Z1 的所有权转让给 X2

  • 以下声明应经检验为真:
  • X2 声称拥有 Z1
  • C 声称拥有 Z2

  • 以下声明应测试为假:
  • X2 声称拥有 Z2(不是所有者)
  • X2 声称拥有 Z3(不存在)
  • X1 声称拥有 Z1(前所有者)

  • 以下是问题:
  • 这样的系统架构的草图是什么?
  • 我们使用什么加密方法(数字签名、pki 等?)以及采用什么安排?
  • 创建了哪些 key 以及将它们提供给谁?
  • C 使用什么算法来创建一个好的 Zk?
  • Xi 和 Xj 用于转移所有权的算法是什么?
  • Xi 使用什么算法来生成对 Zk 的声明?
  • Xi 使用什么算法来验证 Xj 声称拥有 Zk?
  • 最佳答案

    数字签名用于验证发件人生成的消息确实是由该发件人生成的。在这种情况下,您可以使用数字签名来验证产品的生成者确实是中央机构。在这种情况下,产品将始终具有由 CA 使用私钥生成的数字签名,然后任何人都可以使用 CA 的公钥进行验证。

    移情,这是变得困难的地方。哪一方将进行验证。它是 CA,还是只是让第 2 方知道第 1 方在购买该物品之前是真正的(合法的)所有者,还是两者兼而有之?

    好的,根据您的评论。我认为答案是始终混合使用 CA。在这种情况下,您基本上可以始终通过所有者系统上的对称算法(如 AES)对虚拟物品进行加密,直到使用时为止。解密虚拟物品的 key 永远不会(长期)存储在所有者系统上,而是在 CA 请求时传递。现在 CA 可以保存当前有效用户的 key 。这些 key 是如何存储或计算的,我将在后面讨论。

    对于验证项目 Z1 真正属于用户 Xi 的用户 Xj,这可能就像 CA 签署由所有者的用户 ID 和使用 CA 私钥的项目的加密副本组成的消息一样简单。由于用户名包含在消息中,当用户 Xj 使用 CA 的公钥验证签名时,用户 Xj 知道它是有效的并且由用户 Xi 拥有。

    键位设置:
    CA 显然应该有一个非对称 key 对(私有(private)和公共(public))。每个用户还应该有一个非对称 key 对。 CA 将与其用户共享其公钥,并且每个用户将与 CA 共享他/她的公钥(这可以是某种形式的帐户设置的一部分)。用户现在将通过加密唯一用户 ID 登录到 CA,该 ID 使用用户的私钥加密和签名,并将公钥附加到消息中。 CA 使用提供的公钥进行解密(所有这些都可以在 SSL 设置中处理,或者本质上是第二层加密以帮助更好地保护唯一 ID)。当购买发生时,CA 可以创建一个 key ,比如通过执行用户唯一 ID、虚拟项目的序列号和 CA 的私有(private) key 的 HASH 来用作对称算法的输入 key 。 CA 现在使用这个新计算的 key 加密该项目,并使用他们的 (CA) 私有(private)非对称 key 对其进行签名。新加密的项目现在被发送到用户的系统。 CA 不必存储 key ,因为他们知道如何计算它,CA 的私钥仍然受到保护,因为您正在获取它的 HASH 和其他东西,并且该项目现在为每个用户进行了唯一加密。

    现在要解密有效项目,用户已经登录,并且 CA 已经知道这是该项目的有效所有者,因此可以计算 key 并将其 SSL 传递给用户以进行实时解密。但是,此 key 永远不会存储在机器上。

    现在,如果不拥有该项目的用户尝试使用有效用户项目的副本,则会发生以下两种情况之一:非所有者用户将登录并计算出该项目的错误 key ,因此该项目将不正确解密,CA 可以执行自动识别用户实际上并不拥有该项目,并从那里锁定所有帐户中的项目,让有效用户的帐户知道有人正在尝试使用该项目,等等......

    转移:
    有效用户将登录并声明他们想将项目转移给另一个用户。此时,项目与所有者 1 解除关联,并重新关联到所有者 2。由于 CA 拥有所有 key 生成,所有者 1 将不再能够解密他们的项目。事实上,在转移时,软件可以简单地删除所有者 1 的本地系统上的副本。

    对不起,这是冗长的,但这些类型的问题通常是。

    关于algorithm - 密码学:虚拟商品所有权的数字签名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10898017/

    10-13 04:15