| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Управляемый шифр |
| Автор: alexsk 24.4.2006, 11:32 |
| Управление шифрования ключом. Как это сделать? Как именно метод шифрования может управляться ключом. Сформулируем более конкретно: Предположим у нас есть набор криптографических примитивов (например циклический сдвиг, таблица замены и т. д.), мы генерируем (не важно как) определённый ключ, длинной в, скажем, 12 символов. Наша задача зашифровать текст на основе данного ключа , используя данные примитивы. Вопрос: как программа должна выбирать какие именно примитивы и в каком порядке должна использовать для шифрования(имеется ввиду сам алгоритм выбора), при условии что для следующего текста мы будем использовать другой ключ? |
| Автор: Snowy 24.4.2006, 11:37 |
| Вообще-то по идее в алгоритм шифрования порядок должен быть заложен изначально. Порядок действий от смены ключа не меняется... |
| Автор: Sunvas 25.4.2006, 00:11 |
| Что-то не ясно в чем проблема: ты хочешь узнать как зашифровать текст покруче или что? |
| Автор: alexsk 25.4.2006, 09:29 |
| я хочу написать программу по сути схожую с ГОСТ28147-89, только ГЛАВНЫМ ОТЛИЧИЕМ, будет то, что сам выбор используемых примитивов,и их порядок будет определён не изначально и постоянен (как в ГОСТе), а меняться в зависимости от используемого ключа. В итоге имеем, что алгоритм используемых крипто-примитивов действительно постоянен и не меняется никогда, а весь алгоритм шифрования изменяется в зависимости от ключа. так вот вопрос и состоит втом, какая должна быть зависимость, и как она должна определятся. Хотя бы, как определяться? Добавлено @ 09:33 В принципе наброски уже есть, кроме модуля управления ключом. Не могу сообразить какой алгоритм. |
| Автор: Snowy 25.4.2006, 11:34 |
| Ну, могу предложить такой вариант: считаешь CRC ключа. Полученный результат делишь на кол-во примитивов. Остаток от деления и будет номером нужного примитива. |
| Автор: alexsk 25.4.2006, 12:30 |
| Что такое CRC? |
| Автор: Snowy 25.4.2006, 12:44 |
| http://forum.vingrad.ru/index.php?showtopic=494 http://forum.vingrad.ru/index.php?showtopic=27597&hl=crc32 И вообще поиск: http://forum.vingrad.ru/index.php?showtopic=27597&hl=crc32 |
| Автор: alexsk 25.4.2006, 13:01 |
| Такой вариант не подходит по следующей причине: как я понял, CRC, для каждой строки всегда один и тот же, а нам необходимо знать некоторую последовательность номеров примитивов. Возможно, правда взять вариант, что у нас заранее заложены некоторые комбинации последовательностей примитивов, тогда встаёт вопрос, о том, по какому закону будут распределяться результаты ф-ии CRC, при условии равномерного распределения ключей? |
| Автор: alexsk 25.4.2006, 13:15 |
| А как по поводу распределения результатов CRC? Добавлено @ 13:24 Я хочу сказать, даст ли циклическое вращение ключа равномерное случайное распределение комбинаций примитивов, не будет ли простого увеличения на одно и тоже значение? |
| Автор: Snowy 25.4.2006, 14:29 |
| Значение может повториться только после прокрутки на 8 символов. И то, вероятность очень мала. Также можно исключать повторения одного и того же примитива. Если уж вдруг так получилось, что один примитив попадает второй раз, то либо крутить дальше (если длина ключа позволяет), либо просто брать следующий по порядку. Гарантии нормального распределения нет. Т.к. номер будет зависеть от пароля. Если пароль 11111111, то результат будет всегда одинаковый. Как вариант: Если примитив уже использован, исключать его из списка возможных. Соответственно количество примитивов уменьшается и делить CRC нужно будет уже на меньшее число. И так вплоть до использования всех примитивов. |
| Автор: alexsk 26.4.2006, 10:45 | ||
Значит, если распределение ключей равномерное, то и распределение CRC будет равномерное? |
| Автор: Snowy 26.4.2006, 10:59 |
| Нет. Поэтому рекомендую вариант с выбыванием примитивов. |
| Автор: alexsk 26.4.2006, 12:07 | ||
Значит, если распределение не равномероное, то каким образом можно гарантировать, равномерное распределение выбора первого примитива при изменении ключей случайным образом с достаточно равномерным распределением? |
| Автор: Snowy 26.4.2006, 12:27 |
| Объясняю на пальцах. Схема такая: Допустим у нас есть 3 примитива. 0 - 1 1 - 2 2 - 3 (первая цифра - порядковый номер, вторая - имя) k - кол-во примитивов. Сейчас равно 3. Берем пароль. Вычисляем CRC. n := CRC32(password) mod k; Варианты n - [0..2] Допустим, получилось n = 1. Применяем примитив под номером 1 - это примитив "2". Приминили. Выбрасываем. Список примитивов изменился: 0 - 1 1 - 3 k = 2 Берем пароль. Вычисляем CRC. n := CRC32(password) mod k; Варианты n - [0..1] Допустим снова получилось 1. Применяем примитив под номером 1 - это примитив "3". Приминили. Выбрасываем. Список примитивов изменился: 0 - 1 k = 1 Берем пароль. Вычисляем CRC. n := CRC32(password) mod k; Вариантов нет. На выходе всегда 0. Применяем примитив под номером 0 - это примитив "1". Все. Мы приминили все примитивы. Для декодирования применяем ту же схему порядка примитивов. Для одной и той же строки CRC32 всегда один и тот же. n = CRC mod k = const, при CRC=const и k=const То есть. Если пароль для кодирования и декодирования одинаковый и кол-во и порядок примитивов тот же, то при декодировании мы получим тот же порядок применения примитивов. |
| Автор: alexsk 26.4.2006, 12:37 |
| Очевидно не понятен вопрос. Я хотел сказать, не будет ли у нас при таком алгоритме какой либо из порядков примитивов наиболее вероятен, что упростило бы задачу злоумышленника, а значит ослабило бы сам метод шифрования. При условии что сам ключ у нас "идеальный" (т.е. каждый раз генерируется с равномерным распределением и имеет достаточную длинну (скажем 256 бит)). |
| Автор: Snowy 26.4.2006, 12:53 |
| Нет. Порядок полностью зависит от ключа. Никаких приоритетов у одних примитивов перед другими нет. Все примитивы имеют одинаковую вероятность. Добавлено @ 12:53 Изменение одного байта в ключе приведет к полностью другому порядку примитивов. |
| Автор: alexsk 26.4.2006, 13:06 |
| Огромное СПАСИБО за помощь!!!!!! Черезвычайно полезно, быстро и ПОНЯТНО. Жалко не могу добавть к репутации. Очень признателен. |
| Автор: Snowy 26.4.2006, 14:17 |
| Всегда пожалуйста. Заходите еще. |