Сейчас на форуме: laslo, UniSoft, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Быстрый алгоритм потокового шифрования |
Посл.ответ | Сообщение |
|
Создано: 14 ноября 2011 13:34 · Личное сообщение · #1 Есть софт, который очень быстро оперирует некоторыми данными и каждые 10 секунд перезаписывает их в файле-состоянии, для того, чтобы можно было продолжить обрабатывать данные с последнего состояния. Размер данных ~2mb. Требуется шифровать данные перед сбросом в файл. Требование - шифрование должно быть максимально быстрым. Шифр должен быть устойчивым к подбору гаммы (данные - фиксированная таблица) и иметь хорошую стойкость к подбору ключа (хотя бы 6 месяцев на взлом). Кто, что посоветует? ----- Yann Tiersen best and do not fuck |
|
Создано: 14 ноября 2011 13:37 · Поправил: reversecode · Личное сообщение · #2 |
|
Создано: 14 ноября 2011 13:41 · Личное сообщение · #3 PE_Kill пишет: Кто, что посоветует? AES128 в режиме CTR. Начальное значение счетчика случайное и записывается в начале файла перед данными. Проще всего реализовать через CryptoAPI или CNG (на Vista+), последний еще поддерживает аппаратное шифрование. PE_Kill пишет: Требование - шифрование должно быть максимально быстрым. Особых требований к скорости я тут не увидел. Для шифрования 2мб данных раз в 10 секунд подойдет любой шифр. Впрочем аппаратный AES будет быстрее всего другого в разы. ----- PGP key |
|
Создано: 14 ноября 2011 13:42 · Поправил: F_a_u_s_t · Личное сообщение · #4 |
|
Создано: 14 ноября 2011 13:49 · Личное сообщение · #5 |
|
Создано: 14 ноября 2011 13:57 · Личное сообщение · #6 Fedonin пишет: VMPC ("Variably Modified Permutation Composition") - улучшенный вариант RC4. программно прост и шустр. Так как требований к стойкости тоже нет, ваш вариант пойдет. А если ТЗ дополнить требованием компактной и независимой от API реализации, то это отличный выбор. Только дополню: вектор инициализации должен быть разным и храниться с данными, иначе любой потоковый шифр тривиально взламывается. Уникальный вектор инициализации можно получить соединив счетчик операций шифрования с меткой времени, а лучше от криптостойкого RNG (если он уже есть в проекте). ----- PGP key |
|
Создано: 14 ноября 2011 14:18 · Поправил: PE_Kill · Личное сообщение · #7 Во понаписали. OS - WinXP с кастомным набором библиотек, т.е. шифрования может не быть. Шифрование нужно прилепить к чужой программе, она в оригинале данные не шифрует, поэтому особо извращений не хотелось бы. Fedonin пишет: VMPC ("Variably Modified Permutation Composition") Если знать зашифрованые данные получить гамму не выйдет как в обычном RC4? ntldr пишет: Так как требований к стойкости тоже нет, ваш вариант пойдет. Единственное требование - зная алго шифрования и имея на руках файл - невозможно было его расшифровать минимум за 6 месяцев. Парк машин для атаки ВЕСЬМА ограничен. ----- Yann Tiersen best and do not fuck |
|
Создано: 14 ноября 2011 14:29 · Личное сообщение · #8 |
|
Создано: 14 ноября 2011 14:30 · Личное сообщение · #9 PE_Kill пишет: Если знать зашифрованые данные получить гамму не выйдет как в обычном RC4? Если знать зашифрованные данные, получить гамму можно для любого потокового шифра, на то он и потоковый шифр. Из этого следует основное и строго обязательное правило использования потоковых шифров: никогда не шифровать два потока с одним набором ключевых параметров. Набор ключевых параметров у разных шифров может быть разный, AES-CTR принимает на вход ключ и начальное значение счетчика, VMPC принимает ключ и вектор инициализации, RC4 только ключ (но произвольной длины). Т.е. у вас при каждом шифровании должен генерироваться уникальный входной параметр (начальное значение счетчика, вектор инициализации или дополнительная часть ключа), который хранится с зашифрованными данными (этот параметр не секретен, но должен обязательно быть уникальным). Таким образом у вас будет каждый раз разная гамма. PE_Kill пишет: Единственное требование - зная алго шифрования и имея на руках файл - невозможно было его расшифровать минимум за 6 месяцев. Насчет стойкости VMPC хз, AES точно пойдет, RC4 точно не нужно использовать. ----- PGP key | Сообщение посчитали полезным: DimitarSerg |
|
Создано: 15 ноября 2011 11:18 · Личное сообщение · #10 Ну в принципе понял, алго почитал. Теперь такой вопрос. Пока непонятно с носителем ключа, но есть вероятность, что доступно будет лишь 8 байт. Если получится так, то какая схема получения ключа из этих 8 байт будет наиболее удачной. Например взять 100 000 раз SHA256(&MD5(&Buff8Bytes)) или еще как. Время на получение ключа до 5 секунд. ----- Yann Tiersen best and do not fuck |
|
Создано: 15 ноября 2011 16:20 · Личное сообщение · #11 PE_Kill пишет: Пока непонятно с носителем ключа, но есть вероятность, что доступно будет лишь 8 байт. Маловато... Изыщите хотя-бы 10 байт, и для ваших требований к стойкости замедлять получение ключа не понадобится. PE_Kill пишет: Если получится так, то какая схема получения ключа из этих 8 байт будет наиболее удачной. Например взять 100 000 раз SHA256(&MD5(&Buff8Bytes)) или еще как. Время на получение ключа до 5 секунд. Для таких вещей есть стандарт pkdbf2 (пример использования смотрите в исходниках DiskCryptor). Но ваш случай особенный, тут надо вытягивать стойкость практически из ничего. Я бы рекомендовал сделать невозможным брут на видеокартах, добавив операцию по динамически генерируемой таблице размером > 64к внутрь цикла. На видеокарте такое будет брутиться медленнее чем на CPU. UPD: набросал реализацию предложенного алгоритма: Code:
----- PGP key | Сообщение посчитали полезным: Isaev |
|
Создано: 15 ноября 2011 18:40 · Личное сообщение · #12 |
|
Создано: 01 декабря 2011 01:04 · Личное сообщение · #13 |
|
Создано: 01 декабря 2011 05:13 · Личное сообщение · #14 |
|
Создано: 02 декабря 2011 21:10 · Поправил: Promix_17 · Личное сообщение · #15 Есть такой алгоритм поточного шифрования - SEAL, всегда его использую Длина ключа - 160 бит, скорость шифрования — примерно 4 машинных такта на байт текста. Реализация на С: |
eXeL@B —› Программирование —› Быстрый алгоритм потокового шифрования |