Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #41, АПРЕЛЬ 2004 г.

Открытый ключ с закрытыми глазами

kIlka (kilka@linkin-park.ru)

Спецвыпуск Xakep, номер #041, стр. 041-008-4


for(int j = 0; j < r * 2; j += 2)

{

data[0] ^= data[1]; // A = ((A XOR B) << B) + S[2 * i]

data[0] << data[1];

data[0] += S[i];

data[1] ^= data[0]; // A = ((A XOR B) << B) + S[2 * i + 1]

data[1] << data[0];

data[1] += S[i+1];

}

data += 2;

}

}

Здесь << k - циклический сдвиг влево на k битов. Дешифрация так же проста, как и шифрование - она заключается в применении операций в обратном порядке. Т.е. B = ((B - S[2 * i + 1]) >> A) XOR A;

A = ((A - S[2 * i]) >> B) XOR B.

Теперь о формировании массива S[]. Сначала он заполняется так: S[0] = 0xB7E15163. S[i] = S[i - 1] + 0x9E3779B9 mod 2^32. Затем выполняются следующие операции: A = S[i] = S[i] + A + B << 3; B = L[i] + A + B << A + B. Начальные значения A и B - нуль.

О симметричных криптоалгоритмах отлично рассказано в [5]. В конце этой книги собраны исходники всех описанных там алгоритмов.

Пара слов напоследок

Хорошо, когда есть куда стремиться

Как видишь, криптография - штука довольно интересная. Надеюсь, моя статья поможет тебе совладать с ней. Но никогда не стоит останавливаться на достигнутом. Кто знает, может быть, следующий стандарт шифрования РФ будет основан на твоем алгоритме?

Необходимая длина ключей для RSA

В 1994 году было разложено на множители 129-разрядное число. Причем всего за 8 месяцев. А производительность компьютеров с того времени, как известно, уже порядочно выросла. Кроме этого, было выяснено, что для больших чисел существует более эффективный, нежели по алгоритму квадратичного решета, метод разложения на множители. Это метод общего решета числового поля. Но все-таки пока дела у алгоритмов с открытым ключом не так уж плохи. Ведь даже осторожный до паранойи Брюс Шнайер считает, что ключа в 2017 бит (а максимальная длина ключа в PGP составляет аж 2048 бит) будет достаточно, чтобы защитить твои секреты в 2020 от организации с бюджетом в 25 * 10^9 долларов. Думаю, что моя личная переписка таких денег не стоит =).

Генерация ключей с помощью PGP

Пока не напишешь процедуры для вычисления чисел n, d, e сам, можно генерировать их с помощью программы PGP. Я использовал версию 2.6.3i, которая свободно распространяется через интернет. Итак, скачиваем эту программу. Набираем pgp.exe -kg -l. Теперь достаточно лишь перенаправить вывод в файл и наслаждаться результатом. Однако, как метко подметил товарищ Z0MBiE, "when i did two keys in such way, i understood - it is sucks" =). Видимо, окончательно задолбавшись генерировать ключи таким образом, Z0MBiE написал две программы (которые можно достать по адресу http://z0mbie.host.sk/) - SCRGRAB. Скачиваем и делаем так: SCRGRAB key PGP.EXE -kg -l и TEXDEN key.

Дополнительная информация по теме

[1] Дональд Кнут "Искусство программирования для ЭВМ" Книга 2, раздел Арифметика

[2] Генри Уоррен "Алгоритмические трюки для программистов"

[3] Бьерн Страуструп "Язык программирования C++"

[4] Т.Кормен, Ч.Лейзерзон, Р.Ривест "Алгоритмы: построение и анализ"

[5] Брюс Шнайер "Прикладная криптография"

Назад на стр. 041-008-3  Содержание  Вперед на стр. 041-008-5