Возможно вычислить среднее число трех зашифрованных целых чисел? Нет ограничьте на методе шифрования. Точка этого должна только скрыть эти три числа и найти среднее число.
То, что вы, кажется, ищете, называется Гомоморфное шифрование : схема шифрования, которая позволяет вам выполнять операции с зашифрованными данными с получением зашифрованного результата в качестве результата.
Такая схема позволила бы вам передать зашифрованные данные третьей стороне, которая затем могла бы выполнять с ними вычисления, не зная, что они вычисляют.
В вашем случае вам понадобятся две операции: сложение и деление. До недавнего времени гомоморфные схемы шифрования обычно поддерживали только 1 операцию. Но в сентябре 2009 года IMB анонсировал первую полностью гомоморфную криптосистему . Вскоре после этого другие исследователи опубликовали другую систему .
Эти криптосистемы могут делать то, что вы хотите, но это все передовые компьютерные исследования.
В общем, три зашифрованных числа не должны поддерживать один и тот же порядок при шифровании, поэтому я почти уверен, что вам придется их расшифровать и вычислить среднее значение.
С идеальными методами шифрования: Нет.
С большинством реальных методов шифрования: Нет.
С некоторыми глупо простыми методами обфускации, специально разработанными для усреднения: Да.
Назвать последний метод «шифрованием» было бы неправильным термином.
Если бы вы могли вычислить среднее значение зашифрованных чисел, не расшифровывая их, это значительно упростило бы расшифровку исходных чисел, поэтому я был бы очень удивлен, если бы это сработало с любым серьезным алгоритмом шифрования.
Расшифруйте числа, затем вычислите их среднее значение.
Я не вижу простых способов сделать то, о чем вы просите, кроме как сначала расшифровать числа.
Для вычисления среднего (или «среднего арифметического») требуется сложения чисел. Теперь, если вы хотите умножить числа, то вы можете сделать это аккуратно с помощью шифрования 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 чисел). К сожалению, вычисление кубического корня в модульной арифметике нетривиально.
Если и только если метод шифрования представляет собой однозначную математическую функцию, то это возможно, пока числа зашифрованы.
Например, если мой очень небезопасный метод шифрования заключается в умножении каждого числа на 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.
Единственная другая возможность - сначала расшифровать числа.