ANDOS (англ. All or Nothing Disclosure Of Secrets) — криптографический протокол «секретной продажи секретов». Пусть продавец S секретов имеет некий список вопросов и выставляет на продажу ответы к любому из них. Предположим, покупатель B хочет купить секрет, но не хочет раскрывать какой именно. Протокол гарантирует, что B получит нужный ему секрет и ничего более, в то время как S не будет знать какой именно секрет получил B.
Алгоритм
Пусть
секреты, которым обладает S, каждый из них содержит
бит. Для каждого
S публикует описание секрета. Предположим, что покупатели B и C хотят купить секреты
и
, соответственно. Идея в том, что покупатели имеют индивидуальные односторонние функции и каждый из них оперирует над числами, полученными другим.
- Шаг 1. S даёт B и C индивидуальные односторонние функции f и g, но сохраняет обратные к ним для себя.
- Шаг 2. B сообщает C (соответственно C — B)
случайных
-битных чисел
(соответственно
).
Для
, отображающего
-разрядные числа в
-разрядные числа, и
-разрядного числа
, скажем, что индекс
— это Индекс Фиксированного Бита (ИФБ) соответствующего паре
, если
-й бит в
равен
-му биту в
. Ясно, что
есть ИФБ соответствующий паре
, если он является ИФБ, соответствующим паре
. Если
ведёт себя достаточно произвольно при изменении битов в
(как хорошие криптографические функции), то, для случайного
, можно грубо оценить, что примерно
индексов являются ИФБ, соответствующими 
- Шаг 3. B сообщает C (соответственно C — B) набор ИФБ
индексов, соответствующих
соответственно набор ИФБ
индексов, соответствующих 
- Шаг 4. B (соответственно C) сообщает S числа
(соответственно
, где
— результат, полученный заменой каждого бита в
, чей индекс не является ИФБ
, ему противоположным (соответственно
получаются из
аналогичным образом).
- Шаг 5. S сообщает B (соответственно C) числа
соответственно
,
.- Шаг 6. B (соответственно C) может вычислить
(соответственно
), поскольку известны
соответственно 
B и C узнали нужные им секреты. S не узнал ничего об их выборе. Кроме того, ни B, ни C не узнали более одного секрета или выбора друг друга. Сговор между B и C приводит к тому, что они могут узнать все секреты. Сговор между S и кем-либо из покупателей может вскрыть какой секрет хочет другой покупатель.
Итак, основная проблема заключается в сговорах. Однако в случае, если покупателей не меньше трёх, то одного честного покупателя достаточно для того, чтобы сделать невозможным жульничество остальных, благодаря использованию криптографический функций, так как каждый бит последовательности, отправленный покупателям от S сильно зависит от бит предоставленных честным покупателем.
В случае, ели число покупателей
протокол действует абсолютно так же, но каждый покупатель получает
функцию от продавца наравне с наборами чисел от других покупателей.
Примеры
- За основу односторонних функций
и
возьмём RSA.
- Выберем
. Считаем, что S имеет 8 следующих 12-битных секретов на продажу:

- Шаг 1.
- S даёт B и C индивидуальные односторонние функции f и g, основанные на простых числах
(соответственно
), модуль
(соответственно
). Открытая и закрытая экспоненты равны
(соответственно
).
- Шаг 2.
- B сообщает C восемь 12-битных чисел
:

- C сообщает B восемь 12-битных чисел
:

- Шаг 3.
- Пусть B хочет купить секрет
. Он вычисляет

- Сравнивая бинарное представление
и 


- B сообщает C набор ИФБ
соответствующих 
- Пусть C хочет купить секрет
. После вычислений, C сообщает B набор ИФБ
соответствующих 
- Шаг 4.
- B сообщает S числа
, где
— результат, полученный заменой каждого бита в
, чей индекс не принадлежит
, на противоположный, например:

- C сообщает S числа
, где
— результат, полученный заменой каждого бита в
, чей индекс не принадлежит
, на противоположный, например:

- Шаг 5.
- S сообщает B числа
обратная функция
, например:



- S сообщает C числа
обратная функция
, например.



- Шаг 6.
- B узнаёт секрет
, побитовым сложение
и 7-го числа, полученного от S, а именно:



.
- Если C хочет купить секрет
, то он вычисляет побитовое сложение
и 2-го числа, полученного от S, а именно:



.
Литература