К сожалению вы не понимаете, так выходит не по моему, а по статьям создателя алгоритма, попрошу за вопросами обращаться к нему.
Прошу за ответами на ваши вопросы обращаться к автору и смотреть его статьи.
Прочитал статьи, ваша взяла, пусть я буду некомпетентен, видимо как и создатель алгоритма, спасибо.
Меня не интересует доказывать вам криптостойкость алгоритма, это не мой алгоритм и я не буду доказывать то, что он самый лучший среди всех. Автор назвал ваше умножение на матрицу как Quaternion Encryption Scheme, претензии по названии отправлять к нему, благодарю.
1) Я вас спросил как узнать, вы мне отвечаете, спросите у себя… хмм…
2) Технических данных? все необходимые технические данные по работе qes имеются в статье, что именно вас здесь не устраивает?
3) Я не храню во флоат, я задал вам вопрос как это изменит
4) хммм, я не меняю задачу, я показываю вам реальные варианты, у вас есть файлы, которые, допустим зашифрованы не с 1 бита, а с N, как узнать это?
5) У меня одна матрица? хмм, не понял ответа.
Перефразирую все вышесказанное, я предлагаю вам доказать ваши слова и предоставить на ваше усмотрение сколько угодно файлов, зашифрованных одними и теми же матрицами и одним и тем же алгоритмом, вы сможете за какой-нибудь реальный промежуток времени найти мастер матрицу и показать что все так просто как вы и говорите или это просто слова?
Я понимаю что вы скорее всего скажете что у вас есть куда более интересные и важные дела, а на такую ерунду нет времени…
Я бы и сам попробовал реализовать все что вы предложили, но к сожалению не получил от вас хороших ответов в предыдущем посте.
Вы написали «При этом это будет работать, даже если изначально работа была не с отдельными битами, а с числами некоторой разрядности и операции были по модулю некоторому, например по модулю 2^n»
Допустим у меня есть миллион сообщений, исходных и зашифрованных одним и тем же ключом, соответственно теперь нам нужно количество бит элемента вектора…
1) как мне узнать количество бит вектора?
2) принципиально ли это, т.е. если исходные вектора например были по 192 бита, а я беру по 24 бита, то все будет ок?
3) будут ли какие-то изменения в зависимости от того целочисленный это тип данных или вещественный?
4) как мне узнать если данные были зашифрованы не с самого начала и важно ли это?
5) что мне делать если использовалось, допустим, 15 разных матриц в какой-то последовательности, как мне узнать какая матрица шифровала какой вектор или это вообще не нужно?
Я надеюсь что вы нашли в статьях свои ответы, пожалуйста дайте ссылки на ваши ответы, а именно:
1) «Делается очень просто, N пар «вход-выход», записывается N уравнений с ячейками матрицы в качестве неизвестных, и линейно решается по модулю 2.»
2) «Мастер матрицу — почему же нельзя, все можно, арифметика на кольце mod 256 — практически такая-же. Деление только отличается (кстати имнно по этому у меня сомнения, что вы сможете расшифровать шифрованное обратно, если вы храните числа по модулю 256 :-) )»
Желательно учитывая что это не mod 256, а mod 2^n
Да, эти две версии, + FPGA на ~235000 логических элементов, они являются гораздо более простыми элементами, чем ядра видеокарты, подробно расписано как раз по вашей ссылке.
Совершенно верно, побеждает тот и у кого ядер больше и у кого конвейер лучше, но хотелось бы виделить некоторые пункты:
1) «К сожалению эти результаты далеко не самые лучшие, т.к. при программировании использовалась технология OpenMP и возможность автоматической оптимизации компилятора Intel. При программировании на более низком уровне, т.е. например intrinsic команд, результаты могут улучшиться в несколько раз.»
Я лично видел как в других проектах при использовании intrinsic, производительность возрастала в 2-4 раз по сравнению с обычным OpenMP, таким образом цифры графика у XeonPhi теоретически можно разделить в 2 — 4 раза.
К тому же пиковая производительность double у данных устройств ~1.2 TFlops, согласно intel.com и ссылке на Tesla, точной информации по fpga не имеется.
2) По поводу «ядер больше». Отдельным моментом хотелось бы указать что на FPGA создается всего 13 ядер.
Т.е. результаты таковы: FPGA — 13, XeonPhi — 61 (244 threads), Tesla — 2496.
Если брать в счет всего 1 итерацию, то все эти вычислители легко выигрывает обычный Core i5, но при 25 итерациях время шифрования у Core i5 увеличивается приблизительно в 25 раз, в то время как у этих вычислителей нет.
3) У FPGA при 13 ядрах почти не изменяется результат при 1, 5, 9, 15, 25 итерациях благодаря почти полной конвейеризации.
На первый взгляд не совсем понятно как это достигается если вы не знаете что такое FPGA, но представить это можно так, что FPGA из 235000 своих логических элементов создает 13 специализированных ядер именно для решения данной задачи.
При этом для 1 итерации используется около 50% всех логических элементов, а для 25 итераций около 80%.
Этот результат не является идеальным, но он выполнен с помощью OpenCL, не нужно почти никаких модификаций кода, если у вас уже есть код для GPU.
Если же вам нужна еще большая производительность, то добро пожаловать в мир Verilog и т.п. языков.
Энергопотребление является решающим фактором если вам нужно что-то шифровать или выполнять другие задачи постоянно, т.к. количество потребляемой энергии у FPGA приблизительно в 2 раза ниже чем у Tesla и в 3 раза ниже чем у XeonPhi.
Из очевидных минусов именно этой платы DE5-net можно назвать ее стоимость, а именно около 8000$.
Простите, немного устал объяснять, данная статья основана на переработке статей Tomoyuki Nagase и некоторых других авторов, к сожалению в открытом доступе их нет, одна из них, например Secure Signals Transmission Based on Quaternion Encryption Scheme.
Вы можете узнать всю необходимую информацию оттуда, а именно почему он (или его вариация M-QES) является более защищенным в отличие от Hill Cipher и какие методы использовались для улучшения этой защиты по сравнению с Hill Cipher.
Один из вариантов таков, что все статьи этого автора по QES неверны, а правы вы, тогда приношу свои извинения.
Данная статья в первую очередь является обзорной и показывает возможности применения данного алгоритма для различных архитектур и показывает разницу между ними. Могу пояснить мою проделанную работу, а именно каковы результаты и почему они таковы. Спасибо.
Для выяснений криптостойкости прошу не читать мои попытки объяснения в комментариях, а обращаться к автору алгоритма, благодарю.
Если можете, предоставьте пожалуйста ссылку для решения задачи в общем случае, хотелось бы увидеть на конкретном примере, не совсем понятно почему по модулю 2.
Я написал вам, что там не mod 256, а mod 2^n, читайте пожалуйста.
Я рад что у вас есть сомнения, но у меня есть рабочий проект, который шифрует и расшифровывает обратно, основная часть его представлена здесь, всегда можете испробовать.
Видимо это мой первый и последний пост на хабр, слишком радостно тут встречают.
Если можете, предоставьте пожалуйста ссылку для решения задачи в общем случае, хотелось бы понять как именно это делается, из вашего предложения не совсем ясно.
mod 2^n это не жесткий mod 256, он зависит от количества n бит элемента вектора (для uchar выше это 8), на случай если вызывает сомнение почему mod 256.
Но, надеюсь, ситуация прояснилась что нельзя создать «мастер матрицу» или вы меня здесь поправите?
Хотелось бы прояснить еще 1 момент, почему на бумаге ваша формула верна, а при реализации алгортма не совсем.
Для примера можете просмотреть код, представленный в статье, там представлена упрощенная реализация этого алгоритма для uchar.
Представьте что у вас есть матрица 3х3 и вектор пикселя изображения, например (222, 111, 55), после их умножения вектор например стал (444, 222, 110)
Но дело в том что данные хранятся в uchar, соответственно выполняется «обрезание» mod 2^8, таким образом результирующий вектор будет (188, 222, 110), и он будет использоваться для следующей итерации шифрования, таким образом нельзя сделать результирующую «мастер матрицу», надеюсь объяснено понятно, вариант в пункте 1 выше является разновидностью.
Ваша идея верна, есть несколько но:
1) Никто не заставляет вас шифровать все данные N разными матрицами последовательно, для того чтобы злоумышленник выявлял «мастер матрицу», вы так же можете разделить все данные на Х частей и каждую часть шифровать своей матрицей
2) При KPCA, т.е. то что вы описали как «А дальше начинается проблема:» решить систему «линейных уравнений» будет не совсем просто хотя бы потому, что при создании матрицы используется 4 неизвестных, а зашифрованные вектора состоят из трех элементов, таким образом мы получим три уравнения с четырьмя неизвестными.
Это не совсем так, здесь не написано что этот алгоритм используется в первую очередь для шифрования изображений (например первая картинка — это одна итерация шифрования), к тому же количество если считать что «Любое последовательное перемножение на группы матриц можно свести к умножению на одну единственную матрицу», то это так, но откуда у вас в наличии все имеющиеся матрицы?
Количество вариантов матрицы равно 2^8n, где n-количество байт, таким образом при использовании float мы получаем 2^32 вариантов матриц, соответственно при x количестве итераций количество комбинаций возрастает до 2^32x, таким образом, допустим при 15 итерациях количество возрастает до 2^480, что представляет собой немаленькое число.
Если я правильно понял ваш вопрос, то как раз для решения данной проблемы используется различное количество итераций и использование различных матриц на каждой итерации, что существенно усиливает криптостойкость.
Прошу за ответами на ваши вопросы обращаться к автору и смотреть его статьи.
Прочитал статьи, ваша взяла, пусть я буду некомпетентен, видимо как и создатель алгоритма, спасибо.
Меня не интересует доказывать вам криптостойкость алгоритма, это не мой алгоритм и я не буду доказывать то, что он самый лучший среди всех. Автор назвал ваше умножение на матрицу как Quaternion Encryption Scheme, претензии по названии отправлять к нему, благодарю.
2) Технических данных? все необходимые технические данные по работе qes имеются в статье, что именно вас здесь не устраивает?
3) Я не храню во флоат, я задал вам вопрос как это изменит
4) хммм, я не меняю задачу, я показываю вам реальные варианты, у вас есть файлы, которые, допустим зашифрованы не с 1 бита, а с N, как узнать это?
5) У меня одна матрица? хмм, не понял ответа.
Перефразирую все вышесказанное, я предлагаю вам доказать ваши слова и предоставить на ваше усмотрение сколько угодно файлов, зашифрованных одними и теми же матрицами и одним и тем же алгоритмом, вы сможете за какой-нибудь реальный промежуток времени найти мастер матрицу и показать что все так просто как вы и говорите или это просто слова?
Я понимаю что вы скорее всего скажете что у вас есть куда более интересные и важные дела, а на такую ерунду нет времени…
Я бы и сам попробовал реализовать все что вы предложили, но к сожалению не получил от вас хороших ответов в предыдущем посте.
Вы написали «При этом это будет работать, даже если изначально работа была не с отдельными битами, а с числами некоторой разрядности и операции были по модулю некоторому, например по модулю 2^n»
Допустим у меня есть миллион сообщений, исходных и зашифрованных одним и тем же ключом, соответственно теперь нам нужно количество бит элемента вектора…
1) как мне узнать количество бит вектора?
2) принципиально ли это, т.е. если исходные вектора например были по 192 бита, а я беру по 24 бита, то все будет ок?
3) будут ли какие-то изменения в зависимости от того целочисленный это тип данных или вещественный?
4) как мне узнать если данные были зашифрованы не с самого начала и важно ли это?
5) что мне делать если использовалось, допустим, 15 разных матриц в какой-то последовательности, как мне узнать какая матрица шифровала какой вектор или это вообще не нужно?
Очень жду ответа на все вопросы.
1) «Делается очень просто, N пар «вход-выход», записывается N уравнений с ячейками матрицы в качестве неизвестных, и линейно решается по модулю 2.»
2) «Мастер матрицу — почему же нельзя, все можно, арифметика на кольце mod 256 — практически такая-же. Деление только отличается (кстати имнно по этому у меня сомнения, что вы сможете расшифровать шифрованное обратно, если вы храните числа по модулю 256 :-) )»
Желательно учитывая что это не mod 256, а mod 2^n
Совершенно верно, побеждает тот и у кого ядер больше и у кого конвейер лучше, но хотелось бы виделить некоторые пункты:
1) «К сожалению эти результаты далеко не самые лучшие, т.к. при программировании использовалась технология OpenMP и возможность автоматической оптимизации компилятора Intel. При программировании на более низком уровне, т.е. например intrinsic команд, результаты могут улучшиться в несколько раз.»
Я лично видел как в других проектах при использовании intrinsic, производительность возрастала в 2-4 раз по сравнению с обычным OpenMP, таким образом цифры графика у XeonPhi теоретически можно разделить в 2 — 4 раза.
К тому же пиковая производительность double у данных устройств ~1.2 TFlops, согласно intel.com и ссылке на Tesla, точной информации по fpga не имеется.
2) По поводу «ядер больше». Отдельным моментом хотелось бы указать что на FPGA создается всего 13 ядер.
Т.е. результаты таковы: FPGA — 13, XeonPhi — 61 (244 threads), Tesla — 2496.
Если брать в счет всего 1 итерацию, то все эти вычислители легко выигрывает обычный Core i5, но при 25 итерациях время шифрования у Core i5 увеличивается приблизительно в 25 раз, в то время как у этих вычислителей нет.
3) У FPGA при 13 ядрах почти не изменяется результат при 1, 5, 9, 15, 25 итерациях благодаря почти полной конвейеризации.
На первый взгляд не совсем понятно как это достигается если вы не знаете что такое FPGA, но представить это можно так, что FPGA из 235000 своих логических элементов создает 13 специализированных ядер именно для решения данной задачи.
При этом для 1 итерации используется около 50% всех логических элементов, а для 25 итераций около 80%.
Этот результат не является идеальным, но он выполнен с помощью OpenCL, не нужно почти никаких модификаций кода, если у вас уже есть код для GPU.
Если же вам нужна еще большая производительность, то добро пожаловать в мир Verilog и т.п. языков.
Энергопотребление является решающим фактором если вам нужно что-то шифровать или выполнять другие задачи постоянно, т.к. количество потребляемой энергии у FPGA приблизительно в 2 раза ниже чем у Tesla и в 3 раза ниже чем у XeonPhi.
Из очевидных минусов именно этой платы DE5-net можно назвать ее стоимость, а именно около 8000$.
habrahabr.ru/post/226779/#comment_7699309
Это сэкономит вам немного времени, спасибо.
Вы можете узнать всю необходимую информацию оттуда, а именно почему он (или его вариация M-QES) является более защищенным в отличие от Hill Cipher и какие методы использовались для улучшения этой защиты по сравнению с Hill Cipher.
Один из вариантов таков, что все статьи этого автора по QES неверны, а правы вы, тогда приношу свои извинения.
Данная статья в первую очередь является обзорной и показывает возможности применения данного алгоритма для различных архитектур и показывает разницу между ними. Могу пояснить мою проделанную работу, а именно каковы результаты и почему они таковы. Спасибо.
Для выяснений криптостойкости прошу не читать мои попытки объяснения в комментариях, а обращаться к автору алгоритма, благодарю.
Я написал вам, что там не mod 256, а mod 2^n, читайте пожалуйста.
Я рад что у вас есть сомнения, но у меня есть рабочий проект, который шифрует и расшифровывает обратно, основная часть его представлена здесь, всегда можете испробовать.
Видимо это мой первый и последний пост на хабр, слишком радостно тут встречают.
mod 2^n это не жесткий mod 256, он зависит от количества n бит элемента вектора (для uchar выше это 8), на случай если вызывает сомнение почему mod 256.
Но, надеюсь, ситуация прояснилась что нельзя создать «мастер матрицу» или вы меня здесь поправите?
Для примера можете просмотреть код, представленный в статье, там представлена упрощенная реализация этого алгоритма для uchar.
Представьте что у вас есть матрица 3х3 и вектор пикселя изображения, например (222, 111, 55), после их умножения вектор например стал (444, 222, 110)
Но дело в том что данные хранятся в uchar, соответственно выполняется «обрезание» mod 2^8, таким образом результирующий вектор будет (188, 222, 110), и он будет использоваться для следующей итерации шифрования, таким образом нельзя сделать результирующую «мастер матрицу», надеюсь объяснено понятно, вариант в пункте 1 выше является разновидностью.
1) Никто не заставляет вас шифровать все данные N разными матрицами последовательно, для того чтобы злоумышленник выявлял «мастер матрицу», вы так же можете разделить все данные на Х частей и каждую часть шифровать своей матрицей
2) При KPCA, т.е. то что вы описали как «А дальше начинается проблема:» решить систему «линейных уравнений» будет не совсем просто хотя бы потому, что при создании матрицы используется 4 неизвестных, а зашифрованные вектора состоят из трех элементов, таким образом мы получим три уравнения с четырьмя неизвестными.
Количество вариантов матрицы равно 2^8n, где n-количество байт, таким образом при использовании float мы получаем 2^32 вариантов матриц, соответственно при x количестве итераций количество комбинаций возрастает до 2^32x, таким образом, допустим при 15 итерациях количество возрастает до 2^480, что представляет собой немаленькое число.