【问题标题】:calculate the average of three encrypted numbers计算三个加密数字的平均值
【发布时间】:2010-04-04 22:42:41
【问题描述】:

可以计算三个加密整数的平均值吗?对加密方法没有限制。这样做的目的只是隐藏三个数字并找到平均值。

【问题讨论】:

  • 为什么不将平均值与加密数字一起存储?如果您能够从“加密”数字中获得平均值,则说明您没有很好地加密它们,因为它们在数学上仍然相关。
  • 在我的回答中,我假设您想要加密的平均值作为结果,而不是未加密的平均值。正如 incrediman 已经指出的那样,能够计算未加密的平均值会泄漏信息,这对于密码系统来说是一个非常糟糕的属性。

标签: encryption average


【解决方案1】:

您似乎正在寻找的东西称为Homomorphic Encryption:一种加密方案,允许您对加密数据执行操作,并以加密结果作为结果。

这样的方案将允许您将加密数据提供给第三方,然后第三方可以在不知道他们正在计算什么的情况下为您进行计算。

在您的情况下,您需要两个操作:加法和除法。直到最近,同态加密方案通常只支持 1 个操作。但在 2009 年 9 月IMB announced the first fully homomorphic cryptosystem。其他研究published another system 之后不久。

这些密码系统或许能做你想做的事,但都是尖端的计算机科学研究。

【讨论】:

  • 如果他不介意结果仍然是加密的,这将起作用。如果他想让结果被解密,他还不如把输入解密……
  • 如果我只想“添加”数字,我会使用什么方法?没有分工。那么什么 1-operation-homomophic-encryption 最适合添加加密数字?
  • @heinob:如果我错了,请纠正我:如果你有一个大素数 P、N 个数字 n(i) 和 N 个随机密钥 s(i) 在 [0, P) ,则 n(i)+s(i) mod P 被加密。那么 sum(n(i)+s(i)) mod P 就是 sum(n(i)) mod P,用 sum(s(i)) mod P 加密。听起来对吗?
  • 另外,如果模块化划分在这里是有意义的,那么它可以工作吗?我需要考虑更多。
【解决方案2】:

解密这些数字,然后计算它们的平均值。

【讨论】:

  • 我认为这不是问题的重点。我很确定 OP 想要在不披露单个数字的情况下计算平均值(即使是 CPU 计算平均值)。
  • 这可能不是重点,但说真的,还有什么方法可以明智地做到这一点?
  • 已经对加密计算进行了研究,其中进行计算的硬件无法发现输入或输出。所以这个问题并不像听起来那么愚蠢。
【解决方案3】:

除了首先解密数字之外,我看不到任何简单的方法可以按照您的要求进行操作。

取平均值(或“算术平均值”)需要添加这些数字。现在,如果您想将数字相乘,那么您可以使用 RSA 加密巧妙地做到这一点。如果p是明文,c是密文,e是加密密钥,那么在RSA中,c = p^e。如果你有 3 个独立的整数 p1、p2、p3,并且乘积是 pp 那么

 pp^e = (p1 * p2 * p3)^e = p1^e * p2^e * p3^3 = c1 * c2 * c3 = cp

也就是说,你可以将三个明文整数相乘然后加密,也可以将三个密文相乘,得到相同的答案。这将使您对“几何平均值”有所了解,将所有数字相乘,然后取立方根(或 n 个数字的第 n 个根)。不幸的是,在模算术中计算立方根并非易事。

【讨论】:

    【解决方案4】:

    使用理想的加密方法:否。

    对于大多数现实世界的加密方法:不。

    使用一些特别设计为允许平均化的简单到愚蠢的撤消混淆方法:是的。

    将后一种方法称为“加密”确实是使用了错误的术语。

    如果您可以在不解密的情况下计算加密数字的平均值,这将使解密原始数字变得容易得多,所以如果这适用于任何严格的加密算法,我会感到非常惊讶。

    【讨论】:

      【解决方案5】:

      一般来说,三个加密数字在加密后不应该保持相同的顺序,所以我很确定你必须解密它们并计算平均值。

      【讨论】:

        【解决方案6】:

        如果且仅当加密方法是一对一的数学函数,那么在数字被加密的情况下可以这样做。

        例如,如果我的非常不安全的加密方法是将 2 的每个数字相乘,那么我将执行以下操作:

        函数加密($数字){ 返回$数字*2; } $a=加密(3); // a= 9 $b=加密(5); // b= 15 $c=加密(6); // c= 18 $平均 = ($a+$b+$c)/6; // 我们除以 6 因为首先我们除以 3 得到平均值,然后除以 2 进行解密。该方法将根据数学函数而有所不同。

        唯一的另一种可能性是先解密数字。

        【讨论】:

          猜你喜欢
          • 2017-02-06
          • 1970-01-01
          • 2021-07-11
          • 2012-04-11
          • 2018-07-19
          • 1970-01-01
          • 1970-01-01
          • 2013-10-25
          • 2014-05-26
          相关资源
          最近更新 更多