![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
Управление шифрования ключом. Как это сделать? Как именно метод шифрования может управляться ключом.
Сформулируем более конкретно: Предположим у нас есть набор криптографических примитивов (например циклический сдвиг, таблица замены и т. д.), мы генерируем (не важно как) определённый ключ, длинной в, скажем, 12 символов. Наша задача зашифровать текст на основе данного ключа , используя данные примитивы. Вопрос: как программа должна выбирать какие именно примитивы и в каком порядке должна использовать для шифрования(имеется ввиду сам алгоритм выбора), при условии что для следующего текста мы будем использовать другой ключ? Это сообщение отредактировал(а) alexsk - 24.4.2006, 11:35 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Вообще-то по идее в алгоритм шифрования порядок должен быть заложен изначально.
Порядок действий от смены ключа не меняется... |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Что-то не ясно в чем проблема: ты хочешь узнать как зашифровать текст покруче или что?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
я хочу написать программу по сути схожую с ГОСТ28147-89, только ГЛАВНЫМ ОТЛИЧИЕМ, будет то, что сам выбор используемых примитивов,и их порядок будет определён не изначально и постоянен (как в ГОСТе), а меняться в зависимости от используемого ключа. В итоге имеем, что алгоритм используемых крипто-примитивов действительно постоянен и не меняется никогда, а весь алгоритм шифрования изменяется в зависимости от ключа. так вот вопрос и состоит втом, какая должна быть зависимость, и как она должна определятся. Хотя бы, как определяться?
Добавлено @ 09:33 В принципе наброски уже есть, кроме модуля управления ключом. Не могу сообразить какой алгоритм. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну, могу предложить такой вариант:
считаешь CRC ключа. Полученный результат делишь на кол-во примитивов. Остаток от деления и будет номером нужного примитива. |
|||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
Что такое CRC?
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
Такой вариант не подходит по следующей причине: как я понял, CRC, для каждой строки всегда один и тот же, а нам необходимо знать некоторую последовательность номеров примитивов.
Возможно, правда взять вариант, что у нас заранее заложены некоторые комбинации последовательностей примитивов, тогда встаёт вопрос, о том, по какому закону будут распределяться результаты ф-ии CRC, при условии равномерного распределения ключей? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Конечно. В этом и смысл. CRC ключа определяет порядок следования примитивов.
Для кодирования и декодирования он должен быть один и тот же.
Для последовательности примитивов, можно модифицировать строку ключа (например прокрутить по кругу на символ) и снова посчитать CRC и получить номер следующего примитива. И так нужное кол-во раз. |
|||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
А как по поводу распределения результатов CRC?
Добавлено @ 13:24 Я хочу сказать, даст ли циклическое вращение ключа равномерное случайное распределение комбинаций примитивов, не будет ли простого увеличения на одно и тоже значение? Это сообщение отредактировал(а) alexsk - 25.4.2006, 13:26 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Значение может повториться только после прокрутки на 8 символов.
И то, вероятность очень мала. Также можно исключать повторения одного и того же примитива. Если уж вдруг так получилось, что один примитив попадает второй раз, то либо крутить дальше (если длина ключа позволяет), либо просто брать следующий по порядку. Гарантии нормального распределения нет. Т.к. номер будет зависеть от пароля. Если пароль 11111111, то результат будет всегда одинаковый. Как вариант: Если примитив уже использован, исключать его из списка возможных. Соответственно количество примитивов уменьшается и делить CRC нужно будет уже на меньшее число. И так вплоть до использования всех примитивов. |
|||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
||||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
Значит, если распределение не равномероное, то каким образом можно гарантировать, равномерное распределение выбора первого примитива при изменении ключей случайным образом с достаточно равномерным распределением? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Объясняю на пальцах. Схема такая:
Допустим у нас есть 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 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
Очевидно не понятен вопрос. Я хотел сказать, не будет ли у нас при таком алгоритме какой либо из порядков примитивов наиболее вероятен, что упростило бы задачу злоумышленника, а значит ослабило бы сам метод шифрования. При условии что сам ключ у нас "идеальный" (т.е. каждый раз генерируется с равномерным распределением и имеет достаточную длинну (скажем 256 бит)).
Это сообщение отредактировал(а) alexsk - 26.4.2006, 12:44 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет. Порядок полностью зависит от ключа.
Никаких приоритетов у одних примитивов перед другими нет. Все примитивы имеют одинаковую вероятность. Добавлено @ 12:53 Изменение одного байта в ключе приведет к полностью другому порядку примитивов. |
|||
|
||||
| alexsk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 24.4.2006 Где: Томск Репутация: нет Всего: нет |
Огромное СПАСИБО за помощь!!!!!! Черезвычайно полезно, быстро и ПОНЯТНО. Жалко не могу добавть к репутации. Очень признателен.
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Всегда пожалуйста.
Заходите еще. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |