![](/user_photo/_userpic.png)
Математические основы криптологии и криптографические методы и средс
..pdfВ, b - открытый ключ, доступный каждому, кто хочет передать сек ретное сообщение В.
Каждый из абонентов находит свой секретный ключ из сравнений
афа = 1(modcp(/-A)), 0 < а < ф (гА), 6фР = 1(шоёф(гв)), 0 < р < ф (гв).
Итак, Абонент Открытые ключи Секретные ключи
А |
гА, |
а а |
В |
гв, |
Ь Р |
Пусть абонент А решает послать сообщение /я абоненту В: А: т —» В и пусть 0 < т < гв, иначе текст делят на куски длины меньше гв- Сначала А зашифровывает сообщение открытым ключом абонен та В, который есть в телефонной книге, и находит: я», = mA(mod rR), 0 < ni\ < Гв, и отправляет абоненту В. Абонент В расшифровывает это сообщение своим секретным ключом: m2=»i\ •'(mod rB), 0 < т2 < гв,
иполучает т2 = т.
Всамом деле: т2= т\ р=(я«р)А= fliAp(mod гв). Но ЛфР = l(mod ф (гв)), следовательно, т2= ffi(mod гв). Но так как 0 < т < гв, 0< гп2< гв, то т2= т.
Пример 50. Пусть абоненты А и В решили установить между собой скрытую связь с открытым ключом. Абонент А выбрал про стые числа />1 = 7643 и р2= 8753, их произведение гА= 66 899 179,
функцию Эйлера ф (rA) = pip2(1 - l//>i)(l - 1 /р2) = 66 882 784.
Затем он выбирает случайное число а = 9467 (открытый ключ) и на
ходит секретный ключ из решения сравнения: а< а = 1 (mod ф (гА)) =
= 9467фа s l(mod 66 882 784), 0 < а < ф (гА), т.е. а = 30 993 427. Абонент В выбрал простые числа qx= 7481 и q2= 9539, их про
изведение гв = 71 361 259, функцию Эйлера ф (гв) = гв (1-1/^|)(1- 1 /q2) = 71 344 240. Затем он выбирает случайное число Ь = 74 671 (от крытый ключ) и находит секретный ключ из решения сравнения:
Лфр з l(mod ф (гв)) = 74 671фр^1(ш<^ 71 344 240), 0 < р < ф (гв), т.е. р = 33 289 711.
Таким образом, имеется следующая таблица: Абонент Открытые ключи Секретные ключи
А |
66 |
899 179, |
946 730 993 427 |
В |
71 |
361 259, |
7 467 133 289 711 |
Абонент |
А решает послать сверхсекретное сообщение абоненту |
||
В т = 95 637. |
Тогда он шифрует сообщение открытым ключом або |
нента В:
/и, = ///(mod гв) = 9 563 774 671(mod 71 361 259) = 25 963 634. Абонент В, получив это сообщение, расшифровывает его своим сек
ретным ключом: /и23 w/(mod р) =2 596 363 433 289 71l(mod 71 361 259) >=
=95 637.
2.Надежность системы RSA
Врассмотренной криптосистеме с открытым ключом для рас шифровки сообщения т необходимо найти секретный ключ р. Это возможно в двух случаях:
1)если известно разложение гв на простые множители;
2)если известен модуль ф (гв) сравнения 6фР = l(mod ф (гв)).
Но так как rB |
= qi q2, то ф (гв) = ф |
(qi) ф (q2) = (Яг-\)(Яг - 1) = |
|
= |
(<h+qt) + 1 |
и (qi-q2f = q 2+ q2 - |
2 qx q2= ( qx+ q2f - 4 qx q2. |
Следовательно, мы имеем равенства: |
|||
ф |
(Гв) = ГВ - ( qx + q2) + 1, |
|
|
(qi - Яг)2 = ( q i + q if - 4 qt q2, |
|
а значит, зная ф (rB), можно решить эту систему и найти q\ и q2,
а зная qi и q2, легко вычислить ф (гв). Таким образом, оба подхода определения ключа р эквивалентны, т.е. задачи - одной сложности. Таким образом, встает задача разложения на простые множители на турального числа.
В теории чисел, несмотря на ее многолетнюю историю и на очень интенсивные поиски в течение последних 30 лет, эффективный алгоритм разложения натуральных чисел на множители так и не най ден. Конечно, можно, перебирая все простые числа до (гв)1/2 и деля на них гв, найти требуемое разложение. Но учитывая, что количество
простых чисел в этом промежутке асимптотически равно 2ф (гв)1/2ф (In гву \ находим, что при гв, записываемом 1000 десятичными циф рами, найдется не менее 10 497 простых чисел, на которые придется делить гв при разложении его на множители, что при современных воз можностях вычислительной техники затянется на долгие годы.
Известны и более эффективные алгоритмы разложения целых чисел на множители, чем простой перебор простых делителей, но и они работают очень медленно. Необходимо также отметить, что система RSA обладает мультипликативным свойством. Поясним сказанное. Пусть т х и т2- 2 различных открытых текста, а сх и с2- соответствующие им шифртексты. Заметим, что (тх т2) а= тхат2а =
= сх с2(mod п).
Другими словами, шифртекст открытого текста т = тх т2 есть с = cxc2(mod п). Это свойство, называемое также гомоморфным свойством RSA, позволяет осуществить атаку по выбранному шифртексту. Его нужно учитывать при совмещении схем шифрования на основе RSA и цифровой подписи RSA.
Кроме того, известно еще несколько атак на RSA. Рассмотрим две из них. Первая из них - «Метод бесключевого чтения RSА». Суть заключается в следующем. Криптоаналитику известны открытый ключ (а, п) и шифротекст С. Тогда он подбирает такое число А, для которого выполняется следующее соотношение: C"*(mod п) = С, т.е. криптоаналитик просто проводит А раз зашифрование на открытом ключе перехваченного шифротекста. Это выглядит так: (((C*)a)fl...)fl =
= С* = Ор(яЬ1 = C(mod /1). Найдя такое к, криптоаналитик вычисляет
С* = так = |
= m(mod п), т.е. получает открытый текст т. |
|
Пример |
51. Пусть абонент А хочет послать сообщение |
|
т = 193 263 |
абоненту В. А |
знает /1 = 212 887 и открытый ключ |
а = 3061. Он |
зашифровывает |
сообщение открытым ключом, т.е. |
та= 193 2633061 = С= 35 947, и посылает это число в открытый канал связи. Таким образом, криптоаналитику становится известно сооб щение С, модуль п и а. Далее криптоаналитик вычисляет (^(mod п) = = 35 9473061(mod 212 887). Затем он находит такое А, чтобы выполня
лось С к= 35 9473061Аг= 35 947 = С. Получили к = 1084. И, наконец, вычисляем С* = 35 9471084 = 193 263.
Следующая атака осуществляется на базе общего модуля. Осч новные предпосылки для ее осуществления заключаются в следукх щем. При реализации RSA можно раздать всем абонентам криптосеч ти одинаковый модуль я, но каждому свои значения я, (открыты^ ключ) и а/ (секретный ключ). При этом наиболее очевидная проблему заключается в том, что если одно и то же сообщение когда-нибудь шифровалось разными а,- и а*, причем НОД(я,-, я*) = 1 (как обычно и бывает), то открытый текст может быть раскрыт даже при неиз. вестных а,- и а*.
Таким образом, пусть заданы: т - сообщение, я и Ь - два открьи тых ключа шифрования, п - модуль. Тогда щифротекстами являются с\ = f?!a(mod я ) и с 2= mb(mod /1). Криптоаналитику известны: я, я, с\ и с2. Далее, так как я и b взаимно-простые числа, то воспользовав шись результатами подразд. 1.2, можно найти такие целые числа х ц у, что ах + by = 1. Тогда, возведя С\ в степень л:, а с2- в степень у , получим: сг1 с / = (ma)x(mbY = / и ^ = /я1= /я.
Пример 52. Пусть абонент А хочет послать сообщение т = 237 135 другим абонентам В. Абоненту А даны п = 399 799 и от крытый ключ а = 4397. Он зашифровывает сообщение открытым ключом, т.е. /и“ = с\ = 237 1354397 = 268 100(mod 399 799), и посылает это число в открытый канал связи. Абонент В хочет также послать сообщение т = 237 135 другим абонентам. Для В даны « = 399 799 и открытый ключ b = 7517. Он зашифровывает сообщение открытым ключом, т.е. ть= с2 = 237 1357517 = 263 851 (mod 399 799), и также посылает это число в открытый канал связи. Таким образом, крип тоаналитику известно: зашифрованные сообщения с\ и с2, модуль и, открытые ключи а и Ь. Далее криптоаналитик решает уравнение ах + by = 1 = 4397л: + 7517у и получает л: = -1607 и у = 940. Затем он возводит ci в степень |х|, т.е. cjW= d\ = 268 1001607 = 12 105(mod 399 799), a c2 в степень \y\, т.е. c2w= d2= 263 851940 = 362 154(mod 399 799).
Поскольку х < 0, то |
находится {d\)'x= 12 105"1= 39 501(mod |
399 799) (при у < 0 искали |
бы (ifc)"1). Далее, перемножая (d\)~]-d2 = |
= 39 501-362 154 = 237 135(mod 399 799) = /л, получили открытый текст.
3. Проблемы практической реализации RSA
В настоящее время алгоритм RSA активно реализуется как в ви де самостоятельных криптографических продуктов, так и в качестве встроенных средств в популярных приложениях. Важнейшей про блемой практической реализации является генерация больших про стых чисел. Решение задачи «в лоб» - генерация случайного боль шого числа п (нечетного) и проверка его делимости на множители от 3 вплоть до /I 0,5 В случае неуспеха следует взять п + 2 и т.д. В принципе, в качестве р и q можно использовать «почти» простые числа, т.е. числа, для которых вероятность того, что они простые, стремится к 1. Но в случае, если использовано составное число, а не простое, криптостойкость RSA падает. Имеются неплохие алгоритмы, которые позволяют генерировать «почти» простые числа с уровнем
о - 100
доверия 2 Поскольку простые числа должны выбираться таким образом,
чтобы факторизовать их произведение было вычислительно невоз можно, рекомендуется брать их очень большими и одинаковой дли ны. Так, для п - pq длины 1024 бита, р и q должны быть длиной 512 бит. Разность чисел р и q (p- q) также не должна быть маленькой, поскольку в этом случаеp ~ q и, следовательно,р~{п)т Таким об разом, разложение п может быть найдено простым делением на все числа порядка (л)1/2.
Кроме того, числа р и q должны быть также «устойчивыми» простыми числами. Число р является устойчивым {strong), если оно удовлетворяет трем условиям:
1) р - \ имеет большой простой делитель, обозначим его как
г(т.е. р = l(mod г));
2)р + 1 имеет большой простой делитель, обозначим как s (т.е. p = s - l(mods));
3 ) г - 1 имеет большой простой делитель, обозначим его как t (т.е. г = l(mod t)).
Условие 1 не позволит успешно факторизовать п (р - 1) методом Полларда, который позволяет быстро разложить число п на множи тели, если его делитель р имеет небольшие (скажем, меньше мил лиона) простые делители. Условие 2 позволит избежать р + 1 мето дом Ульямса, позволяющего разложить п при условии, что р + 1 име ет небольшие делители. Условие 3 позволит избежать метода бесключевого чтения RSA (циклической атаки). Если р выбирается слу
чайно |
и имеет довольно большой размер, то, как правило, р - 1 |
и р + 1 |
будут иметь большие простые делители. Однако выбор ус |
тойчивых простых чисел не защищает систему от атаки алгоритмом факторизации на основе эллиптических кривых.
Получить устойчивые простые числа можно следующим способом. Генерируем большие простые числа s и t. Затем получаем такое простое число г, что г - 1 делится на t (для этого рассматриваем не четные числа вида r = kt+ 1, где к - последовательные натуральные числа, и проверяем их на простоту, пока не найдем простое). Теперь, имея простые г и s, строим новое простое р. Для этого вычисляем р = ((/-' - г I_1) mod rs) +xrs, где x - некоторое целое число, и, про
веряя р на простоту, находим устойчивое простое число р. Следующая проблема - какой длины ключи следует испо
льзовать?
Для практической реализации алгоритмов RSA полезно знать оценки трудоемкости разложения простых чисел различной длины, сделанные Шроппелем (табл. 9).
|
|
Таблица 9 |
|
Оценки трудоемкости реализации RSA |
|
lg п Число операций Примечания |
||
50 |
1,4Ю10 |
Раскрываем на суперкомпьютерах |
100 |
2,3-1015 |
На пределе современных технологий |
200 |
1,2-1023 |
За пределами современных технологий |
400 |
2,7-1034 |
Требует существенных изменений |
800 |
1,3-1051 |
в технологии |
Нераскрываем |
В конце 1995 года удалось практически реализовать раскрытие шифра RSA для 500-значного ключа. Для этого с помощью сети Ин тернет было задействовано 1600 компьютеров. Сами авторы RSA рекомендуют использовать следующие размеры модуля и:
-768 бит —для частных лиц;
-1024 бит - для коммерческой информации;
-2048 бит - для секретной информации.
Третий немаловажный аспект реализации RSA - вычислитель ный, приходится использовать аппарат длинной арифметики. Если используется ключ длиной к бит, то для операций по открытому ключу требуется 0(1?) операций, по закрытому ключу - 0(1?) опера ций, а для генерации новых ключей требуется 0(к4) операций. По сравнению с тем же алгоритмом DES, RSA требует в тысячи и десят ки тысяч раз большее время.
2.3.3. Криптосистема без передачи ключей
Пусть абоненты А, В, С, условились организовать секретную переписку между собой. Для этой цели они выбирают достаточно большое простое число р и такое, что р - 1 хорошо разлагается на не очень большие простые множители. Если среди множителей такого числа кратных нет, то число р - 1 называют евклидовым. Каждый из абонентов независимо один от другого выбирает случайное число, натуральное, взаимно простое с числом р - 1: А, В, С, ... - абоненты; а, Ъ, с, ... - выбранные ими случайные числа. Далее абонент А нахо дит число а из условия:
аа= l(mod <p (р)), 0 < а < р - 1; |
(9) |
абонент В находит число р из условия: |
|
6р= l ( m o d ( p ( p ) ) , 0 < p < p - 1, |
(10) |
где ф (р) - функция Эйлера, а, а - секретные ключи абонента А; Ь, Р - секретные ключи абонента В и т.д. Пусть абонент А решает по слать сообщение т абоненту В. Можно предполагать, что 0 < т <р - 1. Тогда он сначала зашифровывает это сообщение своим первым сек ретным ключом, находит:
ttti = ma(modp), 0 < mx <p |
(11) |
и отправляет абоненту В. Абонент В, в свою очередь, зашифровыва
ет вновь это сообщение также своим первым |
ключом: |
|
т2= т\ *(mod р), 0 < т2 |
<р |
(12) |
и пересылает его обратно абоненту А. Абонент А, получив обратно свое дважды зашифрованное сообщение, шифрует его же в третий
раз своим вторым ключом: |
|
# « з = т2“(modр), 0 < т3 <р |
(13) |
и вновь отправляет его абоненту В. Последний расшифровывает эту шифротелеграмму при помощи своего второго ключа:
т4= wijP(mod р), 0< т 4<р.
В самом деле, из сравнений (10)—(12) имеем* т4 = ///(mod р),
где к = aa£P(mod р - 1).
В силу (9) и (10) к = l(mod ф (/>)). Поэтому т4= /«(mod р), а так как каждое из них положительно и меньшер, то т4 = т.
Пример 53. Пусть абоненты А и В решили установить между собой скрытую связь без передачи ключей. Они выбрали для этого простое число р = 9551. Тогда р —1= 9550. Абонент А выбирает слу чайное число а = 8159, а абонент В - 6 = 7159. Абонент А решает
сравнение: 8159a=l(mod ф (9551)), 0 < a < 9550 и находит a = 6639,
а абонент В решает сравнение: 7159Р == l(mod ф (9551)), 0 < Р < 9550 и находит р = 6139.
Абонент А решает послать секретное сообщение абоненту В т = 7032. Тогда он сначала шифрует сообщение своим первым ключом:
т, = /«“(modр) = 703281593(mod 9551) = 153.
Абонент В, получив это сообщение, шифрует его своим первым ключом: т2 = ////(mod р) = 15371 59(mod 9551) = 4896 и пересылает его абоненту А, который, получив зашифрованное сообщение, шиф рует его же в третий раз своим вторым ключом: т2=т2 “(mod р) = = 48966639(mod 9551) = 7577 и отправляет его абоненту В, который расшифровывает эту шифротелеграмму при помощи своего второго ключа: т4=т3p(modр) = 75776l39(mod 9551) = 7032.
2.3.4. Алгоритм Эль-Гамаля
Поиски более эффективных систем открытого шифрования при вели к тому, что в 1985 году Т .Эль-Гамаль (США) предложил алго ритм на основе возведения в степень по модулю большого простого числа р. Криптоалгоритм не запатентован, но попадал под действие патента на метод ключевого обмена Диффи - Хеллмана.
В отличие от RSA метод Эль-Гамаля основан на проблеме дис кретного логарифма. Этим он и похож на алгоритм Диффи - Хел лмана. Если возводить число в степень в конечном поле достаточно легко, то восстановить аргумент по значению (т.е. найти логарифм) довольно трудно.
Рассмотрим схему алгоритма. Основу системы составляют па раметры р и п - числа, первое из которых - простое, а второе - целое.
Абонент А генерирует секретный ключ а и вычисляет открытый ключ у = «“mod р. Если абонент В хочет послать А сообщение т, то он выбирает случайное число к, меньшее р и вычисляет:
yi - пкmod р и уг ~ т ® ук,
где Ф - побитовое сложение по модулю 2 . Затем В посылает (уиуг) А.
А, получив зашифрованное сообщение, восстанавливает его: т = (yi “ mod р) Ф уг.
Известен вариант схемы, когда операция Ф заменяется на ум ножение по модулю р. Это удобнее в том смысле, что в первом слу чае текст необходимо разбивать на блоки той же длины, что и число j<*mod р. Во втором случае этого не требуется. Значит, можно обра батывать блоки текста заранее заданной фиксированной длины, меньшей, чем число р.
Уравнение расшифровки в этом случае будет иметь вид:
т =уг1у\кmod р.
Пример 54. Пусть абоненты А и В решили установить между собой скрытую связь с открытым ключом на базе алгоритма Эль-
Гамаля. Абонент А выбрал простое число р = 1 125 899 906 842 679 и
целое число п = 745 819 352 812 378. |
|
|
Затем абонент А генерирует секретный |
ключ а = 725 391 90б |
|
243 661, и вычисляет открытый |
ключ у = п |
amod р = 745 819 352 |
812 378 725 391 906 243 661 mod |
1 125 899 906 842 679 = 1 124 5^8 |
734 648 807, и передает числар, п н у в открытый канал.
Пусть абонент Б хочет послать А сообщение т = 4 567 345. Он выбирает случайное число А = 51 394 216 073 587 меньшее р и вы числяет: yi = «*mod р = 440 797 012 227 8 8 8 , ./mod р = 1 124 568 7з 4 648 80751394 216073 587 = 380 488 279 630 195, уг = л*ф / = 380 488 2 $з 459 650 и посылает А пару (уь уг).
Абонент А, получив зашифрованное сообщение, восстанавлива ет его: т = (y^modp 0 уг = (440 797 012 227 8 8 8 725 391906243 661 mod 1 125 899 906 842 679 0 380 488 283 459 650) = 380 488 279 630 195 0 3$0 488 283 459 650 = 4 567 345.
При использовании метода Эль-Гамаля в системе открытого шифрования с модулем р из 150 знаков достигается та же степень защиты, что для алгоритма RSA с модулем из 200 знаков. Это позво ляет в 5-7 раз увеличить скорость обработки информации. Однако в таком варианте открытого шифрования нет подтверждения под линности сообщений. Однако схема Эль-Гамаля не лишена опреде ленных недостатков.
Среди них можно выделить следующие.
1. Отсутствие семантической стойкости. Если g - примитивный элемент GF(p), то за полиномиальное время можно определить, яв ляется ли некоторое число х квадратичным вычетом или нет. Это де лается возведением в степень x^'^m od р. Если результат равен 1, то х - квадратичный вычет, если - 1, то х - квадратичный невычет. За тем пассивный противник проверяет, являются ли gk и g' квадратич ными вычетами. / ' будет квадратичными вычетом тогда и только
тогда, когда / |
и / являются квадратичным вычетами. Если это так, то |
у2= »i/mod р |
будет квадратичным вычетом тогда и только тогда, |
когда сообщение т будет само квадратичным вычетом, т.е. пассив ный противник будет иметь некоторую информацию об открытом тексте, имея лишь шифрованный текст и открытый ключ.