计算三个加密数字的平均值

6

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


2
为什么不将平均值与加密数字一起存储呢?如果你能从“加密”的数字中得到平均值,那么这些数字的加密就不够好,因为它们在数学上仍然存在关联。 - Cam
在我的回答中,我假设您想要加密的平均值作为结果,而不是未加密的平均值。正如incrediman已经指出的那样,能够计算未加密的平均值会泄露信息,这将是一个密码系统非常糟糕的特性。 - Wim Coenen
6个回答

14
你似乎在寻找的是所谓的同态加密:这是一种加密方案,允许您对加密数据进行操作,并将加密结果作为输出。
这种方案可以让第三方对您提供的加密数据进行计算,而不需要知道他们正在计算什么。
在您的情况下,您需要两个操作:加法和除法。直到最近,同态加密方案通常只支持1个操作。但是在2009年9月,IBM宣布了第一个完全同态加密系统。其他研究人员很快发布了另一个系统
这些加密系统可能能够实现您想要的功能,但这都是前沿的计算机科学研究。

如果他不介意结果仍然加密,这样做是可行的。如果他希望结果被解密,他可能会将输入解密。 - Matti Virkkunen
如果我只想“加”数字,不涉及除法,那么我应该使用什么方法?因此,哪种一次操作同态加密最适合添加加密数字? - heinob
@heinob:如果我说错了,请SB纠正我:假设您有一个大质数P、N个数字n(i),以及在[0,P)范围内随机的N个秘密密钥s(i),则n(i)+s(i) mod P是加密的。那么sum(n(i)+s(i)) mod P是sum(n(i)) mod P,使用sum(s(i)) mod P进行加密。这听起来正确吗? - Erhannis
另外,如果模除在这里是有意义的,那可能会起作用?我需要再考虑一下。 - Erhannis

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

1
我认为这不是问题的重点。我很确定 OP 想要计算平均值,而不会透露个别数字(即使是计算平均值的 CPU 也不知道)。 - Marcelo Cantos
1
可能这不是重点,但是,说真的,还有什么其他合理的方法呢? - David Thomas
2
已经进行了加密计算的研究,其中进行计算的硬件无法发现输入或输出。因此,这个问题并不像听起来那么愚蠢。 - Marcelo Cantos

2
我没有看到任何简单的方法来完成您的要求,除非先解密数字。
求平均数(或“算术平均数”)需要将数字进行相加。如果您想要这些数字,那么可以使用RSA加密完成。在RSA中,如果p是明文,c是密文,e是加密密钥,则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次方根)。不幸的是,在模算术中计算立方根并不容易。

1

使用理想的加密方法:不行。

使用大多数现实世界中的加密方法:不行。

使用一些愚蠢简单的混淆方法,特别设计用于允许平均值:可以。

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

如果您可以在不解密它们的情况下计算加密数字的平均值,那么解密原始数字将变得更加容易,因此我会非常惊讶,如果这适用于任何严肃的加密算法。


0
一般来说,如果加密了三个数字,它们的顺序不应该保持不变,因此我相信您必须解密它们并计算平均值。

0

只有当加密方法是一对一的数学函数时,才能在数字被加密的同时这样做。

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

function encrypt($number){
    return $number*2;
    }

$a=encrypt(3); // a= 9
$b=encrypt(5); // b= 15
$c=encrypt(6); // c= 18

$average = ($a+$b+$c)/6; // 我们除以6,因为首先我们除以3来获取平均值,然后再除以2进行解密。该方法将根据数学函数而异。

唯一的其他可能性是先解密数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接