Распределение ответственности
Предположим, что вы собираетесь в отпуск. Ваш шеф попросил, чтобы вы сообщили пароль со своего компьютера кому-либо из коллег. Однако вы не можете полностью переложить ответственность за сохранность своих ценных данных ни на одного из товарищей по работе. В этой ситуации вам следует подумать о распределении ответственности.
Существует возможность разделить секретное сообщение на части, каждая из которых не имеет никакого смысла, но если их определенным образом соединить вместе, снова получится исходное сообщение. Таким образом вы сможете поделить свой пароль на части и, уходя в отпуск, оставить каждому из коллег по одной его части, чтобы, только собравшись все вместе, они оказались в состоянии запустить ваш компьютер. Сделать это в одиночку из них не сможет никто.
Простейший криптографический протокол позволяет Дмитрию поровну распределить между Антоном и Борисом ответственность за сохранение сообщения в тайне:
- Дмитрий генерирует случайную битовую строку R, которая имеет ту же длину, что и исходное сообщение М.
- Дмитрий складывает М с R по модулю 2 и получает S.
- Дмитрий вручает R Антону, a S – Борису.
Чтобы восстановить сообщение М в исходном виде, Антон и Борис должны совместно выполнить последний шаг протокола:
- Антон и Борис складывают R и S по модулю 2 и получают М.
В умелых руках данный протокол является весьма надежным. Знание S или R не позволяет реконструировать М. Дмитрий шифрует сообщение при помощи одноразового блокнота и отдает полученный в результате шифртекст одному человеку, а сам блокнот – другому.
Этот протокол можно легко применять для любого числа участников. Если участников 4, он будет выглядеть следующим образом:
- Дмитрий генерирует три случайных битовых строки R, S и Т, которые имеют ту же длину, что и исходное сообщение М.
- Дмитрий складывает М, R, S и Т по модулю 2 и получает U.
- Дмитрий вручает R Антону, S – Борису, Т – Владимиру, U – Георгию.
Чтобы восстановить сообщение М в исходном виде, Антон, Борис, Владимир и Георгий должны совместно выполнить последний шаг протокола:
- Антон, Борис, Владимир и Георгий складывают R, S, Т и U по модулю 2 и получают М.
Одним из участников протокола является Дмитрий, который наделен неограниченными правами. Например, Дмитрий может зашифровать какую-нибудь абракадабру вместо М, а потом утверждать, что Антон и другие участники протокола являются хранителями настоящей тайны, а не какой-то чепухи. Чтобы разоблачить Дмитрия, им необходимо собраться вместе и восстановить исходное сообщение. А еще Дмитрий может сначала раздать части своего сообщения Антону, Борису, Владимиру и Георгию, а затем сложить М и U по модулю 2 и заявить, что только Антон, Борис и Владимир нужны для восстановления сообщения в исходном виде, а от Георгия можно избавиться. Поскольку сообщение М всецело принадлежит только Дмитрию, он может распоряжаться им, как того пожелает.
Основной недостаток криптографического протокола, распределяющего ответственность за сохранение сообщения в тайне, состоит в том, что если хотя бы один из его участников потеряет доверенную ему часть, будет также безвозвратно утрачено и само сообщение. Если, конечно, Дмитрий не помнит его наизусть. В результате в распоряжении участников протокола останется только длина исходного сообщения. Но вряд ли они захотят довольствоваться только этим.
Существуют ситуации, в которых необходимо уметь восстанавливать секретное сообщение даже в отсутствие некоторых участников протокола. Например, вы пишете программу для управления запуском межконтинентальных ракет. Естественно, вы хотите сделать так, чтобы если офицер, имеющий доступ к "ядерной кнопке", сойдет с ума и захочет уничтожить какой-либо континент, у него это ни в коем случае не получится. У "ядерной кнопки" должны собраться вместе по меньшей мере пятеро сумасшедших офицеров, чтобы с помощью вашей программы стереть в порошок Америку.
Ситуацию можно еще усложнить. Допустим, что для нажатия "ядерной кнопки" в нашей стране нужны 1 генерал и 3 полковника. А если генерал, по причине своего старческого склероза, забыл приехать к "ядерной кнопке" в назначенное время, достаточно и пятерых полковников. При этом, если собрались всего 4 полковника, Америке ничего не грозит до тех пор, пока 5 полковников не окажутся в полном сборе. Или пока генерал не приедет.
Криптологи придумали так называемый пороговый протокол, который позволяет распределять ответственность даже еще более сложным образом. В общем случае берется любое секретное сообщение (пароль, код запуска баллистических ракет, рецепт приготовления "Кока-колы") и делится на n частей (называемых долями) так, что для реконструкции исходного сообщения обязательно нужны m из них. Такой протокол более точно именуется (m, п)-пороговым протоколом.
Например, при использовании (3.4)-порогового протокола Дмитрий может поделить между Антоном, Борисом, Владимиром и Георгием секретный пароль для включения своего персонального компьютера таким образом, что трое из них, собравшись вместе, будут в состоянии восстановить этот пароль и включить компьютер Дмитрия. Если Владимир неожиданно попадет в больницу в бессознательном состоянии, то же самое смогут сделать Антон, Борис и Георгий. Однако, если Борис в это время будет в командировке, без него Антон и Георгий так и не смогут запустить компьютер Дмитрия.