VMPC
VMPC (англ. Variably Modified Permutation Composition) — это потоковый шифр[1], применяющийся в некоторых системах защиты информации в компьютерных сетях. Шифр разработан криптографом Бартошем Жултаком (пол. Bartosz Żółtak,англ. Bartosz Zoltak) в качестве усиленного варианта популярного шифра RC4. Алгоритм VMPC строится как и любой потоковый шифр на основе параметризованного ключом генератора псевдослучайных битов. Основные преимущества шифра, как и RC4 — высокая скорость работы, переменный размер ключа и вектора инициализации (от 128 до 512 бит включительно), простота реализации (буквально несколько десятков строк кода).[2]
Основа шифра - генератор псевдослучайных чисел[3], базой которого является односторонняя необратимая функция VMPC (англ. Variably Modified Permutation Composition):
Реализация алгоритма
Ключевое расписание
Алгоритм преобразования ключа[2] и (дополнительно) вектора инициализации в 256-элементную перестановку P. Инициализация глобальной переменной s.
С : Длина ключа в байтах
K : Ключ
z : Длина вектора инициализации в байтах
V : Вектор инициализации
i : 8-разрядная переменная
j : 16-разрядная переменная
s : 8-разрядная глобальная переменная
P : таблица из 256 байт для хранения перестановок
1. s = 0
2. for i = 0 to 255: P[i] = i
3. for j = 0 to 767 // выполнить пп. 4-6:
4. i = j mod 256
5. s = P[(s + P[i] + K[j mod c]) mod 256]
6. Temp = P[i]
P[i] = P[s]
P[s] = Temp
7. Если используется преобразование вектора инициализации
for j = 0 to 767 // выполнить пп. 8-10:
8. i = j mod 256
9. s = P[(s + P[i] + V[j mod z]) mod 256]
10. Temp = P[i]
P[i] = P[s]
P[s] = Temp
Алгоритм зашифрования
Генерация выходной ключевой последовательности[2].
Для генерации L байт выходного ключевого потока выполняются следующие операции:
L : длина ключевой последовательности в байтах
1. i = 0 2. Повтор пп. 3-6 L раз: 3. s = P[(s + P[i]) mod 256] 4. Output = P[(P[P[s]] + 1) mod 256] 5. Temp = P[i] P[i] = P[s] P[s] = Temp 6. i = (i + 1) mod 256
Реализация генератора псевдослучайных чисел
Односторонняя функция VMPC (англ. Variably Modified Permutation Composition)
Функция VMPC[2] степени k < n над n-элементным множеством x∈A, A = {0,1,…n-1}:
for x = 0 to n-1: Qk(x) = VMPCk(P(x)) = P(Pk(Pk-1(…(P1(P(x)))…)))
Где P: A → A взаимно однозначная n-элементная перестановка
Pi (x) n-элементная перестановка,
Pi = fi (P(x)), Pi(x) ≠ P(x) ≠ Pj (x), i≠j i,j∈{1,2…k}
fi (x) = (x + i) mod n ,
Функция VMPC 1 степени Q1 (x)= VMPC1 (P(x) )=P(P(P(x))+1)
Функция VMPC 2 степени Q2 (x)= VMPC2 (P(x))=P(P(P(P(x))+1)+2)
Функция VMPC 3 степени Q3 (x)= VMPC3 (P(x))=P(P(P(P(P(x))+1)+2)+3)
Пример расчета функции VMPC 1 степени
P(x) – один из вариантов[2] перестановки {0,1,2,3,4}
| x | 0 | 1 | 2 | 3 | 4 |
| P(x) | 3 | 0 | 4 | 1 | 2 |
| VMPC1 (P(x)) | 4 | 2 | 1 | 0 | 3 |
VMPC1 (P(x))=P(P(P(x)) + 1)
x = 0
P(0) = 3
P(P(0)) = 1
P(P(0)) + 1 = 2
P(P(P(0) + 1)) = 4
VMPC1 (P(0)) = 4
Поиск обратного значения функции VMPC
Нахождение обратного значения функции VMPC является вычислительно сложной задачей[2].
Например, при n = 256 для вычисления обратного значения функции VMPC1 требуется операций, для VMPC2 - , для VMPC3 - .
Алгоритм
Восстановление n − элементной перестановки P, соответствующей значению Q(X)= VMPCk (P(X)).
X, Y − временные переменные
Для элемента P(x) = y вводятся следующие обозначения:
X − аргумент: base или parameter
Y − значение: parameter или base соответственно
Пример: для элемента P(0) = 3: если аргумент 0 – parameter, то значение 3 – base.
Алгоритм:
- Для произвольного значения X ∈ {0,1,…n-1} и Y ∈ {0,1,…n-1} найти один элемент перестановки P из предположения P(X) = Y.
- В случайном порядке выбирается: является ли X – parameter, Y − base, или X – base, Y − parameter элемента P(X) = Y. P(X) = Y − текущий элемент перестановки P.
- Найти все элементы перестановки P по алгоритму поиска.
- Если все n элементов перестановки найдены без противоречий, то завершить алгоритм.
- Иначе
- Найти новый элемент перестановки по алгоритму отбора, P(X) = Y − текущий элемент перестановки.
- Сохранить parameter текущего элемента перестановки.
- Перейти к п. 2.
- Если при выполнении п. 2. возникает противоречие:
- Удалить все найденные при выполнении п. 2. элементы перестановки P
- Для текущего элемента перестановки P: parameter = (parameter + 1) mod n,
- Если parameter принимает значение, сохраненное при выполнении п. 4.2 , то:
- удалить текущий элемент перестановки P.
- за текущий элемент перестановки принять значение, полученное при выполнении п. 1.
- перейти к п. 5.1.
- Перейти к п.2.
Алгоритм поиска
Нахождение всех возможных элементов перестановки P по заданному Q и уже найденным элементам перестановки P.
D, C − временные переменные
Обозначения:
statement y − последовательность y из k + 2 элементов перестановки P, использованных для вычисления Q(y).
word x последовательности y −элемент последовательности y под номером x.
Алгоритм:
- C = 0; D = 0;
- Если известен элемент P:
- Если элемент P(D) и k других известных элементов удовлетворяют общей схеме k + 1 элементов любой последовательности statement, то найти оставшееся word этой последовательности
- Если найденное word не является известным элементом P
- Обозначить найденное word как элемент P
- С = 1
- Если найденное word противоречит какому-либо из найденных ранее элементов, сообщить об ошибке, завершить алгоритм поиска.
- D = D + 1
- Если D < n перейти к п.2
- Если C = 1 перейти к п.1.
Алгоритм отбора
Выбор такого нового элемента перестановки P, вычисление которого позволит найти максимальное количество элементов P на последующих шагах алгоритма нахождения обратного значения функции VMPCk. В результате выполнения алгоритма отбора определяется base нового элемента и произвольно выбирается его значение parameter. Данный алгоритм подходит для случая k<4.
B, R − временные переменные
Ta, Tv − временные массивы
W[j] − массив чисел
Алгоритм:
- Инициализация переменных
- Ta = 0 , Tv = 0
- B = 0
- R = 1
- Подсчет количества m известных элементов перестановки, которые являются word в последовательности statement, в которой неизвестный элемент P является word R c аргументом B. Ta = Ta + W[m]
- Подсчет количества m известных элементов перестановки P, которые являются word в последовательности statement, в которой неизвестный элемент P является word R со значением B. Tv = Tv + W[m]
- R = R + 1
- Если R < n перейти к п.2.
- B = B + 1
- Если B < n перейти к п.1.c.
- Выбирается значения index − любой из индексов массивов Ta или Tv, при котором значение, хранимое в ячейке массива максимально.
- Если в п.8 выбран index массива Ta, то:
- X = index
- Случайно выбирается Y ∈ {0,1,…n-1}, такой что элемент перестановки со значением Y еще не найден.
- Результат: P(x) = Y X − base, Y – parameter
- Если в п.8 выбран index массива Tv , то:
- Y = index
- Случайно выбирается X ∈ {0,1,…n-1}, такой что элемент перестановки со значением X еще не найден.
- Результат: P(x) = Y X – parameter, Y − base
Особенности
Вероятность получения двух последовательных одинаковых результатов при генерации ключевой последовательности при использовании шифра VMPC равна что совпадает с соответствующей вероятностью идеального генератора случайной последовательности[2]. - число разрядов внутреннего состояния генератора псевдослучайной последовательности, обычно равно . В 2005 году А. Максимов показал, что на основании выходных бит возможно отличить последовательность генератора VMPC от случайного потока [4]
Эксперименты, проведенные Б.Жултаком, показали, что не наблюдается статистически значимого отклонения вероятности появления в выходной последовательности:
- каждого из возможных значений ( для байт выходной последовательности);
- каждой из возможных пар последовательных значений ( для байт выходной последовательности);
- каждой из возможных троек последовательных значений ( для байт выходной последовательности)
Безопасность
Утверждается, что потоковый шифр, благодаря значительной модификации исходного RC4 с учетом его уязвимостей, более устойчив к существующим атакам на потоковые шифры и атакам на шифр RC4[2]. В то же время, безопасность большинства потоковых шифров практически сводится к нулю при использовании одного и того же ключа для зашифрования различных открытых текстов. В таком случае потоковый шифр уже не является генератором одноразового блокнота (потока случайных бит для зашифрования открытого текста). Данная проблема шифром VMPC в некотором роде решается использованием уникального вектора инициализации для каждого зашифрованного потока.
Утверждается, что сложность атаки на шифр составляет операций[2]. Однако, существует метод, защищающий алгоритм от возможных уязвимостей. Данный подход заключается в повторении зависимой от ключа перестановки два раза: до и после перестановки, зависимой от вектора инициализации. Данное ключевое расписание именуется KSA3.
Ссылки
- VMPC Stream Cipher
- Спецификация VMPC
- Bartosz Zoltak VMPC One-Way Function and Stream Cipher (недоступная ссылка)
См. также
Литература
- ↑ Габидулин Э.М., Кшевецкий А.С., Колыбельников А.И. Защита информации. — Москва: МФТИ, 2011. — P. 225.
- ↑ 1 2 3 4 5 6 7 8 9 Zoltak B. VMPC One-Way Function and Stream Cipher (англ.) // Bimal R., Meier W. Fast Software Encryption. — Berlin: Springer Berlin Heidelberg, 2004. — P. 210-225. — ISBN 978-3-540-25937-4. — doi:10.1007/978-3-540-25937-4_14. Архивировано 23 апреля 2018 года.
- ↑ Шнайер Б. Практическая криптография. — Москва: 2-е изд. — М.: Вильямс, 2005. — P. 610.
- ↑ Goutam P., Subhamoy M. RC4 stream cipher and its variants (англ.). — Boca Raton, FL: CRC Press, 2012. — ISBN 978-1-4398-3135-9.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.