Date: Tue, 03 Dec 2002 21:32:26 +0500
From: Andrey Sapozhnikov <sapa@icb.chel.su>
Newsgroups: ftn.ru.cgi.perl
Subject: Шифрование данных в Perl программах
> Короче берешь на случайное число умножаешь и в следющем действии юзера
> делишь. или сдвигаешь на байт влево или вправо.
Криптостойкость подобного "шифра" в общем случае будет
чрезвычайно низка. Достаточно отметить, не проводя
дополнительного анализа стойкости, что данный "шифр"
абсолютно не отвечает принципу Кирхгофа. А
последовательность арифметических операций умножения
и деления вообще бессмысленна по той причине, что
(x * k1) / k2 = x * (k1 / k2), где константное
значение k1/k2 и будет являться ключом данного "шифра".
Я бы хотел отметить, что создание новых стойких
алгоритмов шифрования исключительно сложный процесс,
требующий большого объема математичиских доказательств
и если только Вы не специалист в области криптографии,
то заниматься подобным не только бесполезно, но и
вредно в силу создания иллюзий защищенности системы.
Лучше воспользоваться готовыми проверенными алгоритмами
криптования, хотя для того, чтоб их грамотно применить
вме равно нужны базовые знания в области криптографии.
Применительно к Perl я рекомендовал бы использовать
my $plaintext = $cipher->decrypt_hex($ciphertext) or
die "decryption failed";
$plaintext =~ /^(d+)&(w+)&(w+)$/ or
die "validation failedn";
time() <= $1 or die "parameter expired";
my ($param1, $param2) = ($2, $3);
В данном случае модуль Crypt::CBC решает за нас
несколько задач - дополнение ключа и данных до
размера блока требуемого данному алгоритму
криптования, генерацию случайного IV (начального
вектора), криптование и упаковку результата
в строку.
From: Andrey Sapozhnikov <sapa@icb.chel.su>
> У них в сишной-то реализации ассемблерными вставками народ развлекается, а ты
> pure perl хочешь... Они ж с открытым ключом, они тяжелые по определению.
IDEA и Twofish - это симметричные алгоритмы (т.е. с закрытым ключом).
Кстати, я тут проделал небольшой сравнительный бенчмарк сайферов.
Сайферы которые не умеют работать с Crypt::CBC - выбросил, за
исключением GOST_PP - его поправить оказалось проще простого
(причем не изменяя сам модуль).
Самым быстрым из pure-perl оказался DES_PP. Из сайферов с
большим размером ключа наиболее быстрые GOST_PP и CAST5_PP.
Blowfish_PP - в пролете, скорость черепашья. А вот Rijndael_PP
вполне себе неплох, хотя вдвое медленнее CAST5_PP. C-шные
реализации показали близкую скорость, очевидно решающим
фактором тут уже становится Crypt::CBC. Отказ от регенерации
ключа в Crypt::CBC не приводит к заметному ускорению -
Digest::MD5 чрезвычайно быстр. Hа моей машине (P4 1.7GHz) он
показывает 307235.08/s.
1581 Прочтений • [Шифрование данных в Perl программах (crypt perl howto)] [08.05.2012] [Комментариев: 0]