Современные информационные технологии/4.Информационная безопасность.

Волокитин С. С.

Юго-Западный государственный университет, Россия

Надежность реализаций алгоритма RSA

         В современном обществе задача обеспечения защищенной передачи информации является одной из наиболее актуальных из-за широкого распространения информационных систем и сервисов, обрабатывающих конфиденциальную информацию. При этом зачастую существует необходимость обеспечить защищенную передачу информации между узлами, не имеющими безопасного канала связи, например, компьютерами, подключенными к сети Интернет. Первым шагом к решению этой проблемы была работа Уитфилда Диффи и Мартина Хеллмана «Новые направления в современной криптографии», описывающая передачу открытого ключа по открытому каналу, для получения секретных ключей [1].

         Алгоритм RSA разработан Рональдом Ривестом, Ади Шамиром и Леонардом Адлеманом в 1977 году и до сих пор является широко распространённым криптографическим алгоритмом с открытым ключом [2]. В основе алгоритма RSA, применяемого как для шифрования, так и для цифровой подписи, лежит задача факторизации больших целых чисел. Несмотря на то, что в 2010 году были опубликованы результаты о взломе шифра с длиной ключа 768 бит, зашифрованные данные с помощью ключей 1024 и 2048 бит по-прежнему считаются защищёнными и используются в современных криптосистемах [3].

         Для получения зашифрованных данных с помощью алгоритма RSA злоумышленнику необходимо найти значение , определяемое по формуле (1).

                                     (1)

Открытым ключом, который может быть известен злоумышленнику, является пара значений . Значение  может быть получено, если известно значение , вычисляемое по формуле (2).

                                     (2)

Для получения , злоумышленнику необходимо разложить известное ему число  на простые множители  и , что в общем случае является крайне сложной задачей.

         При этом, не смотря на высокую надежность алгоритма RSA, существует большое количество уязвимостей в различных реализациях этого алгоритма. Одной из таких уязвимостей может быть уязвимость в выборе простых чисел  и . Если простые числа не выбираются независимо друг от друга, а, например, являются последовательными простыми числами, то атака на данную реализацию может быть проведена за . Исходные простые числа  и  будут лежать в окрестностях числа .

         Другим примером реализации алгоритма RSA, не обеспечивающем необходимой надежности, является библиотека «RSA Library», распространяемая под лицензией LGPLv2 [4]. Данная библиотека написана на языке PHP и с 2005 года была распространена тиражом более 5000 копий.

 

function generate_keys ($show_debug=0){

        global $primes, $maxprimes;

        while (empty($e) || empty($d)) {

                $p = $primes[mt_rand(0, $maxprimes)];

                while (empty($q) || ($p==$q)) $q = $primes[mt_rand(0, $maxprimes)];

                $n = $p*$q;

                $pi = ($p - 1) * ($q - 1);

                $e = tofindE($pi, $p, $q);

                $d = extend($e,$pi);

                $keys = array ($n, $e, $d);

        }

Листинг 1. Фрагмент кода генерации простых чисел  и

         На представленном выше фрагменте исходного кода программы «RSA Library» видно, что для генерации простых чисел  и  используется выбор случайных элементов из массива простых чисел, подготовленного заранее я заданного явно в коде программы. Очевидно, что обеспечить надежность зашифрованных с применением данной программы данных невозможно, т.к. простые числа выбираются из конечного, к тому же сильно ограниченного, массива простых чисел. Массив чисел содержит 570 элементов и задача факторизации, столь сложная в алгоритме RSA, в данной его реализации является вполне тривиальной и может быть с лёгкостью решена полным перебором всех возможных делителей числа .

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

 

Литература:

1.     Whitfield Diffie, Martin E. Hellman. New Directions in Cryptography (англ.) // IEEE Transactions on Information Theory. — Nov. 1976. — Т. IT-22. — С. 644–654.

2.     R.L. Rivest, A. Shamir, L. Adleman. A method for obtaining digital signatures and public key cryptosystems (англ.) Comm. ACM, — 1978. — P. 120–126.

3.     Thorsten Kleinjung, Kazumaro Aoki, Jens Franke, Arjen K. Lenstra, Emmanuel Thomé: Factorization of a 768-bit RSA modulus. IACR Cryptology ePrint Archive 2010: 6 (2010).

4.     RSA Library[Интернет-портал]. URL: http://sourceforge.net/projects/rsalib/ (дата обращения: 30.10.2013).