вычислить среднее из трех зашифрованных чисел

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


person Progress Programmer    schedule 04.04.2010    source источник
comment
почему бы просто не сохранить среднее значение вместе с зашифрованными числами? Если вы можете получить среднее значение из «зашифрованных» чисел, вы не зашифровали их должным образом, поскольку они все еще математически связаны.   -  person Cam    schedule 05.04.2010
comment
В моем ответе я предположил, что вы хотите получить зашифрованное среднее значение в качестве результата, а не незашифрованное среднее значение. Как уже отмечал incrediman, возможность вычислить незашифрованное среднее приведет к утечке информации, что было бы очень плохим свойством для криптосистемы.   -  person Wim Coenen    schedule 05.04.2010


Ответы (6)


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

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

В вашем случае нужно две операции: сложение и деление. До недавнего времени схемы гомоморфного шифрования обычно поддерживали только одну операцию. Но в сентябре 2009 г. IMB анонсировала первую полностью гомоморфную криптосистему. Вскоре после этого другие исследователи опубликовали другую систему.

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

person Wim Coenen    schedule 04.04.2010
comment
Это сработает, если он не возражает, что результат все еще зашифрован. Если он хочет, чтобы результат был расшифрован, он мог бы также расшифровать ввод... - person Matti Virkkunen; 05.04.2010
comment
Какой метод я бы использовал, если бы я хотел добавить только числа? Нет деления. Итак, какое гомомофное шифрование с 1 операцией лучше всего подходит для добавления зашифрованных чисел? - person heinob; 15.07.2013
comment
@heinob: SB, поправьте меня, если я ошибаюсь: если у вас есть большое простое число 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. Это звучит правильно? - person Erhannis; 07.11.2014
comment
Кроме того, если здесь имеет смысл модульное деление, оно МОЖЕТ работать? Мне нужно подумать об этом больше. - person Erhannis; 07.11.2014

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

person Matti Virkkunen    schedule 04.04.2010
comment
Я не думаю, что это было целью вопроса. Я почти уверен, что ОП хочет вычислить среднее значение, не раскрывая отдельных чисел (даже для процессора, вычисляющего среднее значение). - person Marcelo Cantos; 05.04.2010
comment
Это может быть не смысл, но, серьезно, как еще это можно было бы сделать разумно? - person David says reinstate Monica; 05.04.2010
comment
Было проведено исследование зашифрованных вычислений, в результате чего аппаратное обеспечение, выполняющее вычисления, не может обнаружить входные или выходные данные. Так что вопрос не такой глупый, как кажется. - person Marcelo Cantos; 05.04.2010

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

Для получения среднего значения (или "среднего арифметического") необходимо сложить числа. Теперь, если вы хотите умножить числа, вы можете аккуратно сделать это с помощью шифрования 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 чисел). К сожалению, вычисление кубического корня в модульной арифметике нетривиально.

person John    schedule 04.04.2010

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

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

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

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

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

person ndim    schedule 04.04.2010

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

person Federico klez Culloca    schedule 04.04.2010

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

Например, если мой очень небезопасный метод шифрования состоит в том, чтобы умножить каждое число на 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.

Единственная другая возможность - сначала расшифровать числа.

person waiwai933    schedule 04.04.2010