Можно ли вычислить среднее значение трех зашифрованных целых чисел? Нет ограничений на метод шифрования. Смысл в том, чтобы просто скрыть три числа и найти среднее.
вычислить среднее из трех зашифрованных чисел
Ответы (6)
То, что вы ищете, называется гомоморфным шифрованием: схема шифрования, позволяющая выполнять операции над зашифрованными данными с зашифрованным результатом в качестве результата.
Такая схема позволила бы вам передать зашифрованные данные третьей стороне, которая затем могла бы выполнять над ней вычисления для вас, не зная, что они вычисляют.
В вашем случае нужно две операции: сложение и деление. До недавнего времени схемы гомоморфного шифрования обычно поддерживали только одну операцию. Но в сентябре 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.
Единственная другая возможность - сначала расшифровать числа.