207355
.PDFобразом, чтобы (n-1)/2 также было простым [191]. Кроме того можно было бы все указанные операции проводить в полях Галуа GF(2^k), методы вычисления в которых выходят далеко за рамки этого обзора [28]. Они предоставляют возможность намного более эффективно осуществлять умножение (а следовательно и возведение в степень), так как позволяют избежать при вычислениях необходимости переносов и приведений по модулю. Размер ключа в этом случае будет, однако, существенно длинее.
Несмотря на то, что очень большие дискретные логарифмы возможно и являются трудновычислимыми, хотелось бы предупредить читателя, что для их вычисления существуют алгоритмы намного лучшие, чем исчерпывающий поиск. Самые лучшие из известных в настоящее время алгоритмов, когда n является простым числом, описаны в [80], или в [186] при вычислениях в GF(2^k). Но такие поля должны тщательно анализироваться при выборе размера ключа. Злополучная аппаратная реализация была однажды разработана в Hewlitt-Packard, используя GF(2^127) [247]. И ключи в ней были быстро раскрыты с помощью [29].
В предположении, что n и g являются стандартными параметрами, интересной альтернативой описанному ранее интерактивному протоколу заключается в учреждении и использовании для распространения некоторого единого для всех справочника. Каждый пользователь записывает в этот справочник свой собственный X, вычисленный как g^x mod(n) для своего случайно выбранного секретного x. Это позволяет двум пользователям сформировать их совместный секретный ключ даже до того как они поговорят друг с другом с самого начала. Основной недостаток такого доступа к справочнику состоит в том, что он не поддерживает пользователей в изменении своих секретных ключей достаточно часто. Мы намереваемся вернуться к этой теме в разделе 1.7.
Другим подходом к проблеме распространения ключей является предложенная Беннетом (C.H.Bennet) и Брассардом (G.Brassard) квантовая криптография. Ее надежность не зависит от недоказанных предположений о вычислительной сложности, основанных на трудности вычислений каких бы то ни было функций.
Она остается таковой даже тогда, когда нарушитель имеет неограниченные вычислительные ресурсы, или если все-таки P = NP [17,18,19,20,21].
1.3. Криптосистемы с открытым ключом. Теория.
Система открытого распространения ключей, так как она описана в разделе 1.2, позволяет двум сторонам сформировать совместную часть некоторой распределенной секретной информации. Однако, ни одна из сторон не имеет никакого непосредственного влияния на то, какой окажется эта информация.
Если бы А захотел передать В единственное специальное сообщение, то за использованием системы открытого распространения ключей должно было бы последовать использование криптосистемы с открытым ключом, в которой первоначальная совместно сформированая информация сохранялась бы в качестве секретного ключа.
Криптосистемы с открытым ключом используются непосредственно для передачи исключительно важных сообщений. Во многом подобные криптосистемам с секретным ключом криптосистемы с открытым ключом состоят из: пространства ключей K, а для каждого k из K, из пространств открытых сообщений Mk, пространств шифртекстов Ck и пар функций Ek: Mk -> Ck и Dk: Ck -> Mk, таких что Dk(Ek(m)) = m для любого
открытого текста m из Mk. Снова, как и в криптосистемах с секретным ключом, эффективные алгоритмы для вычисления как Ek, так и Dk, должны легко получаться для каждого ключа k. Мы будем называть алгоритмы, полученные таким образом, естественными алгоритмами. Важной новой отличительной особенностью является то, что Ek должна быть однонаправленной функцией с потайным ходом: необходимо, чтобы было практически невозможно построить никакого эффективного алгоритма для вычисления Dk (но только естественного алгоритма), зная описание естественного алгоритма для вычисления Ek.
В частности, это означает, что k не должно появляться в явном виде в естественном алгоритме шифрования.
Криптографические системы с открытым ключом используются следующим образом. Каждый пользователь раз и навсегда выбирает некоторый случайный ключ k из K. Он использует этот ключ для получения обоих естественных алгоритмов Ek и Dk. Затем он делает публично доступным свой алгоритм шифрования Ek, возможно посредством использования при этом некоторого справочника, но хранит в тайне свой алгоритм дешифрования Dk.
В том случае если другой пользователь захочет послать ему некоторое сообщение, то он найдет в справочнике его открытый алгоритм шифрования и использует его для того чтобы зашифровать свое сообщение. Тогда, используя собственный секретный ключ, только законный получатель сможет расшифровать это сообщение.
В противоположность криптосистемам с секретным ключом, заметим, что если пользователь А, закодировав некоторое сообщение m для пользователя В, сохранил шифртекст С, но потерял открытый текст (или забыл все, что в нем содержалось), то он не будет иметь никаких преимуществ перед нарушителем в раскрытии m из С.
Также в противоположность криптосхемам с секретным ключом, если нарушитель перехватывает шифртекст и знает для кого он был зашифрован, то он может использовать открытый алгоритм шифрования для проверки любого конкретного предположения о том, каким может быть соответствующий открытый текст. Возможность формировать шифртексты из открытых текстовых сообщений по своему выбору является причиной сокращения числа классических уровней атаки, которые обсуждались в связи с криптосистемами с секретным ключом (раздел 3.1). Однако следующая важная атака может иногда применяться:
* Атака на основе выбранного шифртекста : против определенного пользователя, чьи функции суть Ek и Dk, криптоаналитик задается выбранными шифрованными сообщениями С1, С2, ..., Ci и подбирает соответствующие m[1] = Dk(C1), m[2] = = Dk(C2),..., m[i] = Dk(Ci), при условии, что они существуют. Он хочет определить k, или какой-нибудь эффективный алгоритм вычисления Dk, или(за неимением такой возможности), пытается найти m[i+1] из некоторого нового шифртекста С[i+1] = Ek(m[i+1]).
Криптосистемы с открытым ключом могут существовать только, если вообще существуют как однонаправленные функции, так и однонаправленные функции с потайным ходом. В самом деле функции шифрования должны быть однонаправленными функциями с потайным ходом, а процесс, который по ключу обеспечивает естественный алгоритм шифрования, должен реализовывать однонаправленную функцию.
В результате получается, что мы не знаем, как доказать существование криптосистем с открытым ключом. Это может быть не более, чем причудливый способ поговорить о пустом множестве, даже несмотря на то, что возможная осуществимость этого понятия была уже формально продемонстрирована в относительных утверждениях [49,46,47].
Поэтому точно так же, как это было в случае однонаправленных функций (с потайным ходом), мы должны быть удовлетворены кандидатами на криптосистемы с открытым ключом. Два наилучших из известных таких кандидата были спроектированы вскоре после того, как Диффи и Хеллман ввели понятие криптографии с открытым ключом [100,101].
Одна из них, так называемая ранцевая криптосистема Меркля(R.C. Merkle) и Хеллмана [180,147], была вскоре раскрыта [99,104,209,3,59,166,60]. И хотя существуют еще не раскрытые варианты первоначальной схемы, им, по видимому, не стоит доверять. Брикель(E.F. Brickell) написал очень детальную историю криптоанализа ранцевой криптографической системы [61].
Другая, наилучшая из известных криптосистем с открытым ключом, все еще остается несокрушимой, и мы сейчас опишем ее в некоторых деталях. Были предложены и другие системы, такие как системы Макэлиса(R.J. McEliece) [177] и ЭльГамаля(T. ElGamal) [105]. Мы не будем обсуждать их здесь. По поводу исчерпывающего обзора криптографии с открытым ключом обращайтесь к [167].
1.4. Криптосистема RSA
Самой первой криптосистемой с открытым ключом из вообще предложенных в открытой литературе была система Райвеста (R.L.Rivest), Шамира (A.Shamir) и Эдльмана (L.M.Adleman)[205]. Она стала известна под названием RSA или MIT криптосистемы. Основана она на вере в то, что модульное возведение в степень при фиксированных экспоненте и модуле является однонаправленной функцией с потайным ходом (см. раздел 4.1). Для первоначального ознакомления с этой криптосистемой обращайтесь к [120].
Пусть p и q - два больших различных простых числа, и пусть n = p*q и e некоторое целое, взаимно простое с (p-1)*(q-1). Тогда каждая такая тройка k = объявляется личным(секретным) ключом для криптосистемы RSA.
Оба соответствующих пространства открытых текстов Mk и зашифрованных сообщений Ck суть Zn - множество неотрицательных целых, меньших n. Если подлинное сообщение окажется слишком длинным, чтобы принадлежать Zn, его необходимо разбить на части и зашифровать, используя режим шифрования со сцеплением блоков, описанный в разделе 3.5.
Соответствующая ключу k функция шифрования Ek: Mk -> Ck определяется как Ek(m) = m^e mod(n). Для того, чтобы полностью определить естественный алгоритм ее вычисления достаточно записать e и n в открытый справочник. Такая пара называется открытым ключом, который легко вычисляется с помощью личного ключа .
Вспомним из раздела 1.1, что Ek является кандидатом на однонаправленную функцию с потайным ходом, и хотя существует эффективный алгоритм вычисления обратной ей функции Dk, мы не знаем, как получить его эффективно, задаваясь только естественным алгоритмом вычисления Ek (т.е. только для заданных n и e).
Однако эффективный алгоритм вычисления Dk легко получить, задав дополнительную секретную информацию p и q. С этой целью, используя обобщеные алгоритмы Евклида для нахождения наибольшего общего делителя, чтобы вычислить целое число d, такое что e*d = 1 mod ф(n), где ф(n) = (p-1)*(q-1). По известной теореме Эйлера m^(e*d) = m mod(n) для каждого целого числа m и, следовательно, (m^e)^d mod(n) = m, при условии что 0 <= m < n, что обеспечивается, когда m принадлежит Mk.
Функция дешифрования Dk: Ck -> Mk в связи с этим определяется как Dk(c) = m^d mod(n), и эффективный алгоритм для модульного возведения в степень также может быть использован и для ее вычисления. (Для заданных p и q существует даже более эффективный алгоритм вычисления Dk, основанный на китайской теореме об остатках [193]).
Суммируя все сказанное, тогда каждый пользователь криптосистемы RSA должен раз и навсегда выбрать случайно подходящие целые числа p, q и e и вычислить с их помощью d. После чего он делает свой открытый ключ доступным в пользовательском справочнике, тогда как d сохраняет в секрете. Это дает возможность любому другому пользователю шифровать посылаемые ему сообщения, которые только он и может расшифровать. Для того чтобы эта идея была реализована практически, решающим является удовлетворение требование, чтобы генерация больших случайных простых чисел и вычисление d были легкоосуществимы. К счастью, проверка чисел на простоту оказывается действительно легче их разложения на множители, благодаря вероятностным алгоритмам СоловеяШтрассена (R. Solovay - V. Strassen)[223] и Рабина (M.O. Rabin)[197].
По поводу более связанного с криптографией вопроса генерации простых чисел (а не проверки на простоту) обращайтесь к [81,13]. Относительно описания расширенного алгоритма Евклида для вычисления d смотрите [4,94] (если же вы предпочитаете переоткрыть расширенный алгоритм Евклида самостоятельно, то можете найти полезными те указания, которые даны к задаче 8.5.12b [52]).
В качестве небольшого примера, пусть p = 19 и q = 23, так что n = 437 и ф(n) = 396. Пусть также e = 13, и поэтому d = 61, так как 13*61 = 793 = 2ф(n)+1. Тогда сообщение в открытом текте m = 123 будет зашифровано как c = 123^13 mod(437) = 386. Действительно, 386^61 mod(437) = 123. Особо отметим ситуацию, когда криптоаналитик, перехвативший шифртекст c = Ek(m), посланный известному пользователю, знает естественный алгоритм шифрования Ek, используемый отправителем для вычисления c. Это предположение имеет два важных следствия. Если бы нарушитель угадал в точности открытый текст сообщения m, то он смог бы вычислить Ek(m) точно так же, как и получатель, и сравнить полученный результат с c, чтобы проверить свое предположение. Такая угроза является опасной, если число возможных открытых текстов сравнительно невелико, учитывая возможность исчерпывающего поиска.
Эта трудность может быть до некоторой степени преодолена путем разбавления коротких сообщений случайными битами, однако использование вероятностного шифрования (раздел 4.6) является более приемлемым решением. Смотрите также [206].
Другое следствие из знания нарушителем открытого алгоритма шифрования более специфично для криптосистемы RSA. Он знает, что c = m^e mod(n) для известных значений c, e и n (но не знает m). Если бы он мог разложить n (раскрыв таким образом личный секретный ключ законного получателя c), то он мог бы получить ф(n) = (p-1)*(q-1) и, применив расширенный алгоритм Евклида, вычислить d, а затем и m = c^d mod(n). К счастью, неизвестно алгоритма, который смог бы разложить на множители
двухсотзначное десятичное число за приемлемое время, и, таким образом, считается абсолютно надежным выбирать и p и q длиной примерно в сто знаков.
При выборе p и q необходима особая тщательность для того, чтобы не предоставить никаких зацепок известным алгоритмам факторизации. В частности, наибольший общий делитель p-1 и q-1 должен быть небольшим, а оба p-1 и q-1 должны иметь большие простые делители.
Блэкли (G.R. Blakley) и Борош (I. Borosh) предлагают выбирать p и q так, чтобы (p-1)/2 и (q-1)/2 были бы простыми [31]. Для более широкого обсуждения этих вопросов рекомендуем [94]. Гордон (J.A. Gordon) предлагает эффективные способы выбора подходящих сильных простых чисел [139].
Даже если факторизация и трудна, неизвестно является ли столь же трудным и раскрытие RSA. Возможно, что d может быть вычислено из открытой информации e и n, вообще, без разложения n на множители. Возможно также и то, что значение d (а,следовательно, и значения множителей числа n) действительно практически трудновычислимы из e и n, даже если существует иной эффективный алгоритм раскрытия m из e, n и m^e mod(n). Были предложены другие криптосистемы с открытым ключом, для которых было доказано, что раскрытие открытого текста из доступной нарушителю информации в них, столь же трудно, сколь и разложение на множители больших чисел [196,240], но такие криптосистемы тотчас же раскрываются при атаке на основе выбранного шифртекста.
Наконец, даже если m и в самом деле практически трудно вычисляется из той информации, которая доступна нарушителю, вероятно еще остается возможность легко получить эффективно некоторую частичную информацию, такую как половина битов m. Вероятностное шифрование решает все эти возможные слабости при простом предположении, что разложение на множители является действительно трудной задачей.
Пользователи RSA должны быть осведомлены о том, что эта криптосхема является слабой при некоторых видах атак на основе выбранного шифртекста [86,95]. Предположим, например, что нарушитель перехватил некоторое c = m^e mod(n), где e и n открытая информация. Ему хотелось бы определить m. При атаке на основе выбранного шифртекста, ему предоставляется возможность передать некоторое c' законному получателю с тем, чтобы получить в ответ соответствующее m', такое, что c'= m'^e mod(n). Разумно ожидать, что получатель может уклониться от ответа, если нарушитель попытается использовать непосредственно c'= c (в противном случае никакая криптосистема, вероятно, не может быть надежной). Однако, нарушитель может замаскировать свой вопрос, выбрав случайно некоторое x из Zn* и вычислив c'= (x^e)*c mod(n).
Исходный открытый текст m может быть тогда получен эффективно (используя обобщенный алгоритм Евклида), поскольку m = m'*x^(-1) mod(n). Неизвестно, может ли более хитроумная атака на основе выбранного шифртекста действительно раскрыть RSA в том смысле, что позволит нарушителю вычислить множители n или, хотя бы, секретную экспоненту дешифрования d.
Если бы это было так, то последующие шифртексты можно было бы расшифровывать без необходимости обращения к законному получателю. Для первого знакомства в связи с этом смотри [98].
Несмотря на все свои преимущества перед криптографическими системами с секретным ключом, RSA все же значительно медленнее, чем DES. Напомним, что аппаратная реализация DES в настоящее время способна достигать скорости 20 мегабит в секунду. Это заставляет рассматривать коммерческую применимость даже самых быстрых RSA устройств шифрования скорее как плохую. На вентильной матрице Кочанского (M. Kochanski) [159,222] можно достичь примерно 5 килобит в секунду с 512-ти битовым ключом (что является безусловно наименьшим пределом на размер ключа, который вообще можно рассматривать).
Есть сообщение в [185] о более быстрой реализации, принадлежащей Омуре (J. Omura), но и она все еще более чем в тысячу раз медленнее, чем DES.
Существует также знаменитая "микросхема Райвеста", которая так никогда и не была отлажена [202,203] и проект Брикеля, который при реализации теоретически смог бы достичь 25 килобит в секунду. О еще более быстрой реализации сообщается в [207].
Читайте также [187].
Необходимо заметить, что программная реализация еще медленнее. Самый быстрый, из известных автору, имеющий коммерческое применение RSA шифратор - это CryptoCom компании Algorithmic Research для IBM PC.
Он шифрует очень быстро, так как всегда использует число 3 в экспоненте в качестве открытого ключа (что обычно очень опасно [143], хотя и не настолько в данной ситуации, т.к. здесь RSA используется только для обмена DES ключами). Один 512-ти битовый блок он дешифрует примерно за 9 секунд, или при разбивке записи, со скоростью около 57 бит в секунду! (В действительности CryptoCom - гибридная система, так что на самом деле она работает немного быстрее за большой промежуток времени (смотри раздел 4.7). Была объявлена намного более быстрая реализация RSA на IBM PC, но официальная документация о ней пока еще недоступна.
1.5. Генерация псевдослучайных битов
Последовательность называется псевдослучайной, если она выглядит, как бессистемнаая и случайная, хотя на самом деле создавалась с помощью сугубо детерминированного процесса, известного под названием псевдослучайного генератора. Такие генераторы задаются действительно случайной начальной последовательностью, называемой исходной, и детерминировано получают из нее намного более длинную псевдослучайную последовательность. В этом смысле псевдослучайные генераторы можно рассматривать как распространители случайности. В качестве энциклопедии по классической выработке псевдослучайных последовательностей и тестам, цель которых заключается в том, чтобы различать псевдослучайные последовательности от истинно случайных, рекомендуем [158].
Случайность и криптография очень сильно взаимосвязаны. Основная цель криптосистем состоит в том, чтобы преобразовать неслучайные осмысленные открытые тексты в кажущийся случайным беспорядок. Эта способность может быть использована для генерации псевдослучайных последовательностей следующим образом. Пусть Ek некоторый алгоритм шифрования, и пусть x[0] произвольный открытый текст. Рассмотрим последовательность, определяемую как x[i+1] = Ek(x[i]) для i > 0. Если Ek является подходящим для криптографических целей, то похоже, что x[1], x[2],... - это последовательность без явной системности (хотя очевидно, что она непременно должна
зациклиться). Для того чтобы уменьшить корреляцию в этой последовательности, может быть предпочтительнее сохранять только несколько битов из каждого x[i].
Отношение между случайностью и криптографией в другой связи является более интересным. Даже самые лучшие криптосистемы были бы бесполезны, если бы криптоаналитик мог угадывать используемый ключ(это замечание относится к криптосистемам как с секретным, так и с открытым ключом). Не существует лучшего способа предотвратить эту угрозу, чем выбирать ключ действительно случайным образом. Отсутствие этого в "телеграммных ключах" было главной причиной раскрытия Энигмы (Enigma) [122,201].
Как крайний пример, рассмотрим одноразовый шифр. Общеизвестно, что эта криптосхема обдадает совершенной секретностью, если шифр в ней выбирается случайно, и в то же время может быть раскрыта без большого труда, если шифром является обычный текст на английском языке.
Напомним, что основное неудобство одноразовых шифров состоит в том, что шифр должен быть не только случайным, но и иметь в точности такую же длину, как и шифруемое сообщение, и при этом использоваться только один раз.
Режим Выходной Обратной Связи, описанный в разделе 3.5, прекрасно объединяет эти два понятия вместе: он использует криптосистему для генерации псевдослучайной последовательности из короткого исходного вектора (k и s0, из которых секретно только k), и эта последовательность используется как одноразовый шифр для реальных сообщений открытого текста. Преимущество этого подхода заключается в том, что секретный ключ намного короче, чем открытый текст, и может быть повторно использован столько раз, сколько угодно, так как s0 каждый раз меняется (напомним, что s0 задается открытым образом как часть шифртекста, так что для обеспечения надежности необходимо только однажды передать ключ k). Неизбежной платой за использование короткого ключа является, конечно, потеря совершенной секретности. Однако, может быть, этот режим внешней обратной связи является не более, чем принятие желаемой за действительную Эвристикой?
Скажем, что псевдослучайный генератор является криптографически сильным, если последовательность, которую он вырабатывает из короткого секретного исходного ключа, является по существу точно такой же, как и по-настоящему случайная последовательность, предназначенная для той же цели, для какой она используется как одноразовый шифр.
Под словами "по существу точно такой же" мы понимаем, что никакое практически легкоосуществимое вычисление не может позволить криптоаналитику получить никакой информации об открытом тексте при перехвате его шифртекста(за исключением разве что с пренебрежимо малой вероятностью). Другими словами, такой генератор ведет себя так же, как если бы был совершенно секретной по Шеннону криптосхемой, до тех пор, пока криптоаналитик не затратит чрезмерно большое количество времени. Такие генераторы могут использоваться для реализации криптосистем с секретным ключом, если обе стороны договорились об исходном секретном векторе, который они собираются использовать при условии, что они никогда не будут использовать один и тот же исходный вектор дважды.
Намного менее очевидно, что криптографически сильные псевдослучайные генераторы могут быть использованы при реализации криптосистем с открытым ключом, но в следующем разделе мы покажем, что такое тоже возможно.
Первый шаг к обоснованию таких генераторов был сделан Шамиром (A. Shamir) [210]. Ключевое понятие псевдослучайных генераторов - непредикативность влево - было впоследствии введено Блюмом (M. Blum) и Микэли (S. Micali) [41]: криптоаналитик, который знает как работает генератор, но не знает, какой исходный вектор в действительности используется, не может сделать ничего лучшего, чем подбрасывать правильную монету, для того чтобы угадать первый бит, выработанный генератором, даже после просмотра всей сгенерированной затем последовательности (если только он не окажется очень удачливым или же сможет проделать практически невыполнимые вычисления).
Как и обычно, мы не знаем существуют ли такие генераторы, но первый кандидат был предложен Блюмом и Микэли, которые доказали, что их генератор является непредикативным влево в предположении, что трудноосуществимым является определение дискретных логарифмов.
Полная уместность генераторов непредикативных влево была установлена Яо(A. Yao), который доказал, что любой такой генератор является криптографически сильным [243]. Наконец, Л.Левин дал необходимые и достаточные условия для существования таких генераторов [170].
Теперь мы приведем описание более простого и в вычислительном отношении более эффективного кандидата на криптографически сильный псевдослучайный генератор, который известен как BBS генератор, названный так в честь Л. Блюма(L.Blum), М.
Блюма(M. Blum) и Шуба(M. Shub) [33].
Он основывается на втором кандидате на однонаправленную функцию с потайным ходом, описанном в разделе 1.1. Напомним, что n называется целым числом Блюма, если оно является произведением двух различных простых p и q, оба из которых сравнимы с 3 по модулю 4. Напомним также, что возведение в квадрат по модулю n является перестановкой квадратичных остатков по модулю n, и считается, что она является однонаправленной функцией с потайным ходом, так как было доказано, что трудность ее обращения (т.е. вычисления примитивных корней) вычислительно эквивалента разложению n на множители.
В предположении, что факторизация n трудна, может быть доказана даже более сильная теорема: для почти всех квадратичных остатков x, подбрасывание правильной монеты приводит к наилучшей возможной оценке первого значащего разряда x, который, однако, может быть легко вычислен при знании x^2 mod(n) [231,232,5].
Другими словами, практически трудно вычислить не только сам примитивный квадратный корень, но даже и получить вероятностную информацию о его первом значащем бите (подобно следующему: "Я не убежден, но верю, что этот бит должен быть нулем, а не единицей").
Теперь мы готовы описать BBS-генератор и доказать при соответствующем предположении, что он является криптографически сильным.
Пусть n - целое Блюма с неизвестным разложением на множители. Выберем в качестве исходного числа случайный квадратичный остаток x[0] (для того, чтобы это сделать, выберем случайное целое x взаимно простое с n и вычислим x[0] = x^2 mod(n)). Для i >= 0 определим рекурсивно x[i+1] = x[i]^2 mod(n) и пусть b[i] - первый значащий бит x[i]. Для любого целого t первые t битов, сгенерированные из x0, таким образом, и будут искомой псевдослучайной последовательностью BBS[n,t](x0) = b[0]b[1]b[2]...b[t-1].
То что BBS-генератор непредикативен влево означает, что никто не может отгадать b[0], зная n и b[1]b[2]...b[t-1]. Если бы это было не так, первый значащий бит неизвестного примитивного квадратного корня x любого заданного квадратичного остатка y мог бы быть определен следующим образом. Вычисляем псевдослучайную последовательность BBS[n,t-1](y) и представляем ее как BBS[n,t](x) с удаленым первым своим битом. Отгадываем этот пропущенный бит и замечаем, что по определению он и является первым значащим битом x, который мы искали.
Из этого следует, что BBS-генератор должен быть непредикативным влево в предположении, что факторизация n трудна. Следовательно, по теореме Яо, он является криптографически сильным.
Дополнительное привлекательное свойство этого генератора заключается в том, что он обеспечивает прямое определение тех отдельных битов, которые он вырабатывает, для всех, кто знает разложение n на множители. Для этого заметим, что x[i] = x[0]^(2^i) mod(n). По теореме Эйлера x^ф(n) = 1 mod(n), где ф(n) = (p-1)(q-1).
Следовательно, x[i] = [x[0]^((2^i) mod ф(n))] mod(n), вычисляется эффективно из исходного числа x[0] и требуемого индекса i посредством двух применений быстрого алгоритма модульного возведения в степень.
1.6. Вероятностное шифрование.
Криптография с открытым ключом в значительной степени решает проблему распространения ключей, которая является довольно серьезной для криптографии с секретным ключом. Однако, как мы указывали выше, при перехвате шифртекста c = Ek(m) всегда становится известной некоторая информация об открытом тексте m, поскольку криптоаналитик может вычислить без посторонней помощи открытую функцию шифрования Ek для любого отвечающего ему открытого текста.
Задавая произвольно m' по своему выбору, он может легко выяснить, верно ли, что m = m', так как это справедливо только, если Ek(m') = c.
Даже если определение m из c и в самом деле было бы трудно осуществимым из знания только естественного алгоритма шифрования, что мы не знаем, как доказать, нельзя сказать сколь велика и какова должна быть эта частичная утечка информации об m.
Используя метафору Гольдвассера (S. Goldwasser), применение криптографии с открытым ключом подобно прятанию верблюда под одеялом: можно утаить, какой верблюд на самом деле спрятан, но не число его горбов.
Целью вероятностного шифрования - понятия, введенного Гольдвассером и Микэли (S. Micali) [132] - является кодирование сообщений таким образом, чтобы никакое легковыполнимое вычисление на основе шифртекста не могло бы дать какой бы то ни
было информации о соответствующем открытом тексте (кроме, разве что, с пренебрежимо малой вероятностью).
Это напоминает системы совершенной секретности в смысле Шеннона, с дополнительными преимуществами коротких ключей и возможностью для каждого пользователя обнародовать свои алгоритмы открытого шифрования.
Конечно, от таких систем нельзя ожидать настоящей совершенной секретности, они вообще несекретны против криптоаналитика, обладающего неограниченной вычислительной мощностью.
Основное техническое различие между вероятностным шифрованием и системами с открытым ключом состоит в том, что естественные алгоритмы шифрования являются при этом вероятностными, а не детерминированными. Одно и то же сообщение в открытом тексте может привести к возникновению большого числа различных шифртекстов.
В результате криптоаналитик, имеющий по его предположению истинный открытый текст не сможет долго проверять свою догадку посредством его шифрования (с помощью естественного алгоритма законного получателя) и сравнения полученного результата с переданным шифртекстом.
Формально система вероятностного шифрования состоит из пространства ключей K и для каждого k из K - пространств сообщений открытых текстов Ck, вероятностных пространств Rk и пар функций Ek: (Mk х Rk) -> Ck и Dk: Ck -> Mk, таких что Dk(Ek(m,r)) = m для любого сообщения открытого текста m из Mk и случайного числа r из Rk.
С помощью любого k из K должны легко получаться эффективные естественные алгоритмы для вычисления как Ek, так и Dk, но должен трудно получаться любой эффективный алгоритм вычисления Dk при заданном только естественном алгоритме вычисления Ek.
Используемая таким образом система вероятностного шифрования в известной степени очень похожа на систему с открытым ключом. Раз и навсегда каждый пользователь выбирает ключ k из K, который используется для получения обоих естественных алгоритмов вычисления Ek и Dk.
Он делает алгоритм шифрования Ek публично доступным и сохраняет в секрете алгоритм дешифрования Dk. В том случае, когда другой пользователь захочет послать ему свое сообщение m, он находит Ek в справочнике, случайно выбирает некоторое r из Rk и вычисляет шифртекст c = Ek(m,r). Используя свой секретный потайной ход, только законный получатель может легко определить m из c.
Как следствие большого числа шифртекстов, соответствующих каждому открытому тексту, при использовании вероятностного шифрования неизбежно некоторое раскрытие данных. Заметим, что для криптосистемы RSA, это было не так.
Несмотря на все свои замечательные теоретические свойства, оригинальная система вероятностного шифрования Голдвассера - Микали претерпевала столь громадное раскрытие данных, что не имела большого практического значения. И мы не будем описывать ее здесь.
