2010-04-04 3 views
5

Можно рассчитать среднее значение трех зашифрованных целых чисел? Нет ограничений на метод шифрования. Дело в том, чтобы просто скрыть три числа и найти среднее.вычислить среднее значение трех зашифрованных номеров

+2

Почему бы не просто сохранить среднее число вместе с зашифрованными номерами? Если вы можете получить среднее значение из «зашифрованных» номеров, вы не зашифровали их хорошо, так как они все еще связаны математически. – Cam

+0

В моем ответе я предположил, что вы хотите получить зашифрованное среднее значение как результат, а не незашифрованное среднее. Как уже отмечалось ранее, возможность вычисления незашифрованного среднего будет утечкой информации, что было бы очень плохой характеристикой для криптосистемы. –

ответ

12

Что вы ищете, называется Homomorphic Encryption: схема шифрования, которая позволяет выполнять операции с зашифрованными данными с зашифрованным результатом в качестве результата.

Такая схема позволит вам передавать зашифрованные данные третьей стороне, которая затем может выполнять вычисления для вас, не зная, что они вычисляют.

В вашем случае вам необходимы две операции: добавление и деление. До недавнего времени гомоморфные схемы шифрования обычно поддерживали только 1 операцию. Но в сентябре 2009 года IMB announced the first fully homomorphic cryptosystem.Другие исследования published another system вскоре после этого.

Эти криптосистемы могут быть способны делать то, что вы хотите, но это все самое современное исследование компьютерных наук.

+1

Очень интересно, спасибо. –

+0

Это сработает, если он не возражает, что результат по-прежнему зашифрован. Если он хочет, чтобы результат был дешифрован, он мог бы также расшифровать вход ... –

+0

Какой метод я использовал бы, если бы я хотел только «добавить» числа? Нет разделения. Итак, что 1-операция-гомомофическое шифрование лучше всего подходит для добавления зашифрованных чисел? – heinob

4

Расшифруйте числа, а затем вычислите их среднее значение.

+1

Я не думаю, что это было вопросом. Я уверен, что OP хочет вычислить среднее значение, не раскрывая отдельные числа (даже для CPU, вычисляющего среднее значение). –

+1

Это может быть не * точка *, но, серьезно, как иначе это было бы разумно сделано? –

+0

Это точно, это моя точка. –

1

С идеальными методами шифрования: Нет

В большинстве методов шифрования в реальном мире: Нет

С некоторыми тупо просто отвинчивать метод запутывания, специально разработанный для обеспечения усреднения: Да.

Вызов последнего метода «шифрование» действительно будет использовать неправильный термин.

Если вы можете рассчитать среднее значение зашифрованных номеров без их дешифрования, это значительно упростит дешифрование исходных чисел, поэтому я был бы очень удивлен, если это будет работать с любым серьезным алгоритмом шифрования.

0

В общем случае три зашифрованных номера не должны поддерживать один и тот же порядок в зашифрованном виде, поэтому я уверен, что вы должны их расшифровать и рассчитать avarage.

2

Я не вижу простых способов сделать то, что вы просите, помимо дешифрования чисел в первую очередь.

Принимая среднее (или среднее арифметическое), требуется , добавив цифры. Теперь, если вы хотите, чтобы цифры умножали цифры, вы можете сделать это аккуратно с помощью RSA-шифрования. Если p - открытый текст, c - зашифрованный текст, e - ключ шифрования, то в RSA, c = p^e. Если у вас есть 3 отдельных целых чисел, p1, p2, p3, а продукт с затем

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

То есть, вы можете умножить три открытых текст целых чисел вместе, а затем зашифровать, или вы можете просто умножить три шифртекстов вместе, и получите тот же ответ. Это приведет вас к «геометрическому среднему», где вы умножаете все числа вместе, а затем берете кубический корень (или n-й корень для n чисел). К сожалению, вычисление кубического корня в модульной арифметике нетривиально.

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; // We divide by 6 because first we divide by 3 to get the average, then by 2 to do the decryption. The method will vary based on the mathematical function. 

Единственный возможность заключается в том, чтобы расшифровать число первых.