2) Предлагаю вам включить воображение, как хотите так и записывайте, главно чтоб правильно работало.
Так же можете поискать все это в Google, как работать с нестандартными типами данных.
Если нет представления об этом, то один из вариантов — посмотреть как выполняется сохранение в файл в длинной арифметике.
1) Я же написал что Big Endian, этого недостаточно?
2) Я с ними не работаю, достаточно стандартных типов данных, может быть равно 7, теоретически может быть равно и больше, я не проверял, поэтому утверждать не буду.
1) Чтение файла и запись в файл назад идет через Qt, QDataStream, setByteOrder(QDataStream::BigEndian), можете посмотреть как реализовано
2) Специализированных типов данных я не использовал, по этому поводу можете не беспокоиться, хотя сделать их можно и работать они будут.
P.S. Да, никаких других операций примешано не было, ни XOR, ни применения следующей итерации ни с каким смещением и т.п.
Всё что было изменено по сравнению с предыдущим кодом, так это замена uchar на другой целочисленный формат, т.к. мне хотелось увидеть решение в общем случае.
Так же передаются данные, так же передаются матрицы, так же умножается. Все это выполняется N раз.
В таком случае прошу вас, реализовывайте и проводите атаку, мне будет очень интересно прочитать ваши результаты.
Я повторюсь уже в который раз, но все же повторюсь еще раз, я не скрываю информацию, я лишь говорю о том, что в данном случае рассматривается KPCA для данного алгоритма, а это говорит о том, что у вас в наличии должна иметься только информация такого вида как зашифрованный файл и этот же расшифрованный файл, более ничего. (и например еще один зашифрованный файл, чтобы вы могли его дешифровать)
Если вы рассматриваете не KPCA, а что-то ваше собственное, где вам выдадут информацию о размере блока и о количестве итераций шифрования, то это совсем другая ситуация, можете сразу и попросить у тех кто вам это все даст и сам ключ шифрования, тогда никаких атак вообще производить не надо, всё уже готовое, останется только использовать и всё.
1) Действительно, здесь много непонимания т.к. я не вижу чем мои условия являются сверхъестественными? Неужели умножение вектора на матрицу является чем-то чрезвычайно сложным для понимания? Неужели нет статей подробно описывающих алгоритм? Неужели нет примера кода здесь?
2) Конкурсы? Это не конкурс определения криптостойкости, поищите статьи автора и других где они описывают криптостойкость этого алгоритма, я прошу вас лишь подтвердить ваши слова из вашего первого сообщения, если вы считаете что все довольно просто, то почему так сложно это вам доказать или вы так и дальше будете продолжать разговор о том что алгоритм некриптостойкий, «тривиальный», в таком случае это не имеет никакого смысла
Буду благодарен если вы поймете, что указав на что-то (в данном случае на слабость алгоритма) будьте добры это доказать, я не говорю что вы не правы, может быть автор алгоритма и статей по нему не прав, а вы знаете это лучше, но без ваших доказательств все ваши сообщения не имеют никакого смысла.
1) В чем же именно неизвестность реализации? В том что есть варианты размеров блоков и все возможные варианты вам известны, вы это называете неизвестностью? Или то, что я согласился проверить ваш проект на основе этого OpenCL файла и показать вам что он работает, в этом неизвестность?
2) Ключ легко генерируется, судя по вашему первому сообщению, вы прочитали все статьи автора и наверно других авторов и должны прекрасно понимать каков ключ, если нет, то получается что ваше первое сообщение не соответствует действительности.
3) Я не хочу доказывать стойкость криптосистемы, это доказывал автор, мне это не нужно, это не мой алгоритм, сколько еще раз мне написать чтобы вы это поняли? Автором, насколько я понимаю, проводились эти этапы, описанные в 3 пункте, по данным вопросам обращайтесь к нему.
4) У вас замечательные шутки, но не меняя тему там ничего не наложено, обычное умножение на матрицу.
Что я понял из ваших и своих сообщений.
1) Вы сообщили что алгоритм очень просто взломать, т.к. здесь обычное умножение на матрицу.
2) Я предложил вам доказать это
3) Вы мне сообщаете кучу условий, после реализации которых вы согласны это делать, не совсем адекватных условий (см. пункты выше, устал повторяться)
Я делаю вывод что вы не можете взломать алгоритм, про который вы сказали что в нем можно тривиально найти ключ, к чему вы вообще написали ваше первое сообщение?
Хотелось бы уточнить некоторые пункты, а именно 1, 3 и 4.
1) У меня нет смысла уточнять количество итераций шифрования, т.к. я вам не должен говорить это, все что у вас есть это эти 3 файла.
2) Вы можете сделать проект на основе OpenCL файла, я могу взять ваш проект, зашифровать вашим проектом файл и дешифровать какой-либо файл, указание полного совпадение с flagE покажет вам то, какая размерность у блока, а этого я вам сообщать тоже не должен.
Таким образом выполнение ваших пунктов говорит о том, что у вас появляется дополнительная информация для взлома алгоритма, которой при КРСА для данного алгоритма у вас быть не должно, поэтому я не могу согласиться на ваши условия и надеюсь что вы все-таки понимаете почему.
Я хотел бы вас поправить, выше приведен пример кода, который именно это и должен делать, то что он это делает это на данный момент еще не доказано, попробуйте использовать его для 3 файлов, которые я предоставил, добудьте ключ и предоставьте 4 расшифрованный файл, тогда это будет доказано.
Могли бы вы это сделать или на этом стоит закончить?
Я вас не пойму, вам вроде было вчера всего достаточно, вы написали что задача решается в общем случае без всяких проблем, что видно теперь?
Я никаких правил игры не менял, давайте посмотрим что написано мной:
«Т.е. вариации этого кода только таковы что, например uchar заменится на int или long long или float или double, произвольно выбрано мной.»
Что после этого написано вами:
"Ок, давайте свои пары шифрованных/не шифрованных файлов, точнее как:
Вы выберете ключ (любой набор матриц), этим ключем зашифруйте один файл в пару сотен кб, и пришлите мне и оригинал и шифрованный файл, потом зашифруйте второй файл и пришлите мне только шифрованный.
Моя задача будет — восстановить второй файл, не зная исходного ключа."
Я также возвращаюсь к тому что вы раньше согласились найти супер матрицу и к тому, что исходники у вас имеются!!! И к тому что я написал что Я могу заменить uchar на что угодно и вы на это согласились.
Моя реализация алгоритма основана на статьях, в которых написано что размер блока равен 24*N бит ПО ВЫБОРУ, если не можете взломать, прошу признать это и закончить на этом.
«Вы выберете ключ (любой набор матриц), этим ключем зашифруйте один файл в пару сотен кб, и пришлите мне и оригинал и шифрованный файл, потом зашифруйте второй файл и пришлите мне только шифрованный.
Моя задача будет — восстановить второй файл, не зная исходного ключа.»
1) Никаких требований по тому какой размер блока вы не писали.
2) Никаких требований по тому, что я предоставлю вам то, на что я заменю uchar тоже не было.
3) Вы написали что можно решить задачу в «общем случае», что я и хочу увидеть, алгоритм ведь простой, обычное умножение на матрицу как сказал oleg1977.
Тем не менее я вам помогу.
Размер блока может быть равен 24*N, где N может изменяться от 1 до 8 с шагом в 1.
Прошу заметить что при условно реальном случае KPCA вам никто предоставлять размер блока не будет.
Речи о том, что я вам предоставлю то, на что я заменил uchar не было потому, что вы написали:
«При этом это будет работать, даже если изначально работа была не с отдельными битами, а с числами некоторой разрядности и операции были по модулю некоторому, например по модулю 2^n»
К тому же мы рассматриваем условно реальный случай KPCA, давайте не будет упрощать задачу, благодарю.
На мой взгляд совершенно ясно, arrD — исходный файл, любой, допустим формата .bmp как на картинке в начале, остальное — 9 элементов матрицы поворота.
Как можно догадаться из кода режим шифрования — ЕСВ.
Много-раундовость, у вас есть этот исходный код, представьте что я подаю исходный .bmp файл в это ядро (файл будет передаваться через массив arrD), на выходе будет зашифрованный файл.
В следующем раунде я подаю этот зашифрованный файл на вход этого же ядра, при этом могу поменять элементы матрицы и т.д. до N итераций шифрования.
Полные исходники представлены в этой статье, передается файл, передаются элементы матрицы, выполняется умножение, есть ли еще вопросы?
Один момент, в данном коде используется uchar, в спецификации qes в статьях указано, что количество бит в векторе это выбранная создателем величина, т.е. здесь вы видите что используется массив данных uchar, с таким же успехом этот массив может быть другого типа данных, например int, long long и т.п.
Т.е. вариации этого кода только таковы что, например uchar заменится на int или long long или float или double, произвольно выбрано мной.
Как я понял «При этом это будет работать, даже если изначально работа была не с отдельными битами, а с числами некоторой разрядности и операции были по модулю некоторому, например по модулю 2^n» это не сильно меняет задачу, т.к. как вы сказали все это будет работать.
Я поддерживаю вашу статью, но хочу дополнить, что, например, в довольно популярной игре Dota2, некоторые из вариантов немного изменены, что позволяет больше держать людей внутри, например:
1) Так называемые кумиры Dota2 повышают её популярность
6) Некоторые считают что есть шанс подняться до самого верха и заработать 1kk+ $, да, этот шанс есть, но он настолько мал, что об этой цифре даже лучше и не думать
Есть статья, которая показывает что играть это замечательно, с ней можно в чём-то согласиться, но только отчасти.
Отлично, попытаюсь объяснить более подробно что написано выше
«Для шифрования данных необходимо выполнить обычное умножение матриц, например: B' = P(q) * B, где B — данные которые необходимо зашифровать, P(q) — матрица поворота, B' — зашифрованные данные.»
Это основная часть алгоритма, вы мне уже много раз писали что вы понимаете что здесь идет обычное умножение на матрицу и что у этого умножения есть огромная проблема в виде линейных корреляций.
Как видно из википедии у нас имеется матрица поворота 3х3, мы берем данные в виде векторов 3*N байт и умножаем их на эту матрицу, получаем зашифрованные данные.
Вот собственно и весь алгоритм, что конкретно здесь не понятно?
Есть пример кода выше OpenCL/C++, он тоже непонятен?
Так же можете поискать все это в Google, как работать с нестандартными типами данных.
Если нет представления об этом, то один из вариантов — посмотреть как выполняется сохранение в файл в длинной арифметике.
2) Я уже во второй раз говорю, используются только стандартные типы данных, зачем мне вам описывать то, чего нет?
2) Я с ними не работаю, достаточно стандартных типов данных, может быть равно 7, теоретически может быть равно и больше, я не проверял, поэтому утверждать не буду.
Что-то еще?
2) Специализированных типов данных я не использовал, по этому поводу можете не беспокоиться, хотя сделать их можно и работать они будут.
P.S. Да, никаких других операций примешано не было, ни XOR, ни применения следующей итерации ни с каким смещением и т.п.
Всё что было изменено по сравнению с предыдущим кодом, так это замена uchar на другой целочисленный формат, т.к. мне хотелось увидеть решение в общем случае.
Так же передаются данные, так же передаются матрицы, так же умножается. Все это выполняется N раз.
Я повторюсь уже в который раз, но все же повторюсь еще раз, я не скрываю информацию, я лишь говорю о том, что в данном случае рассматривается KPCA для данного алгоритма, а это говорит о том, что у вас в наличии должна иметься только информация такого вида как зашифрованный файл и этот же расшифрованный файл, более ничего. (и например еще один зашифрованный файл, чтобы вы могли его дешифровать)
Если вы рассматриваете не KPCA, а что-то ваше собственное, где вам выдадут информацию о размере блока и о количестве итераций шифрования, то это совсем другая ситуация, можете сразу и попросить у тех кто вам это все даст и сам ключ шифрования, тогда никаких атак вообще производить не надо, всё уже готовое, останется только использовать и всё.
2) Конкурсы? Это не конкурс определения криптостойкости, поищите статьи автора и других где они описывают криптостойкость этого алгоритма, я прошу вас лишь подтвердить ваши слова из вашего первого сообщения, если вы считаете что все довольно просто, то почему так сложно это вам доказать или вы так и дальше будете продолжать разговор о том что алгоритм некриптостойкий, «тривиальный», в таком случае это не имеет никакого смысла
Буду благодарен если вы поймете, что указав на что-то (в данном случае на слабость алгоритма) будьте добры это доказать, я не говорю что вы не правы, может быть автор алгоритма и статей по нему не прав, а вы знаете это лучше, но без ваших доказательств все ваши сообщения не имеют никакого смысла.
2) Ключ легко генерируется, судя по вашему первому сообщению, вы прочитали все статьи автора и наверно других авторов и должны прекрасно понимать каков ключ, если нет, то получается что ваше первое сообщение не соответствует действительности.
3) Я не хочу доказывать стойкость криптосистемы, это доказывал автор, мне это не нужно, это не мой алгоритм, сколько еще раз мне написать чтобы вы это поняли? Автором, насколько я понимаю, проводились эти этапы, описанные в 3 пункте, по данным вопросам обращайтесь к нему.
4) У вас замечательные шутки, но не меняя тему там ничего не наложено, обычное умножение на матрицу.
Что я понял из ваших и своих сообщений.
1) Вы сообщили что алгоритм очень просто взломать, т.к. здесь обычное умножение на матрицу.
2) Я предложил вам доказать это
3) Вы мне сообщаете кучу условий, после реализации которых вы согласны это делать, не совсем адекватных условий (см. пункты выше, устал повторяться)
Я делаю вывод что вы не можете взломать алгоритм, про который вы сказали что в нем можно тривиально найти ключ, к чему вы вообще написали ваше первое сообщение?
1) У меня нет смысла уточнять количество итераций шифрования, т.к. я вам не должен говорить это, все что у вас есть это эти 3 файла.
2) Вы можете сделать проект на основе OpenCL файла, я могу взять ваш проект, зашифровать вашим проектом файл и дешифровать какой-либо файл, указание полного совпадение с flagE покажет вам то, какая размерность у блока, а этого я вам сообщать тоже не должен.
Таким образом выполнение ваших пунктов говорит о том, что у вас появляется дополнительная информация для взлома алгоритма, которой при КРСА для данного алгоритма у вас быть не должно, поэтому я не могу согласиться на ваши условия и надеюсь что вы все-таки понимаете почему.
Могли бы вы это сделать или на этом стоит закончить?
Я не сообщаю вам размер блока потому, что в статьях, как я уже в который раз повторяюсь он равен 24*N и указано, что он выбирается пользователем.
При КРСА, а мы его и рассматриваем сейчас, размер блока вам условно никто давать не должен.
Я никаких правил игры не менял, давайте посмотрим что написано мной:
«Т.е. вариации этого кода только таковы что, например uchar заменится на int или long long или float или double, произвольно выбрано мной.»
Что после этого написано вами:
"Ок, давайте свои пары шифрованных/не шифрованных файлов, точнее как:
Вы выберете ключ (любой набор матриц), этим ключем зашифруйте один файл в пару сотен кб, и пришлите мне и оригинал и шифрованный файл, потом зашифруйте второй файл и пришлите мне только шифрованный.
Моя задача будет — восстановить второй файл, не зная исходного ключа."
Я также возвращаюсь к тому что вы раньше согласились найти супер матрицу и к тому, что исходники у вас имеются!!! И к тому что я написал что Я могу заменить uchar на что угодно и вы на это согласились.
Моя реализация алгоритма основана на статьях, в которых написано что размер блока равен 24*N бит ПО ВЫБОРУ, если не можете взломать, прошу признать это и закончить на этом.
«Вы выберете ключ (любой набор матриц), этим ключем зашифруйте один файл в пару сотен кб, и пришлите мне и оригинал и шифрованный файл, потом зашифруйте второй файл и пришлите мне только шифрованный.
Моя задача будет — восстановить второй файл, не зная исходного ключа.»
1) Никаких требований по тому какой размер блока вы не писали.
2) Никаких требований по тому, что я предоставлю вам то, на что я заменю uchar тоже не было.
3) Вы написали что можно решить задачу в «общем случае», что я и хочу увидеть, алгоритм ведь простой, обычное умножение на матрицу как сказал oleg1977.
Тем не менее я вам помогу.
Размер блока может быть равен 24*N, где N может изменяться от 1 до 8 с шагом в 1.
Прошу заметить что при условно реальном случае KPCA вам никто предоставлять размер блока не будет.
«При этом это будет работать, даже если изначально работа была не с отдельными битами, а с числами некоторой разрядности и операции были по модулю некоторому, например по модулю 2^n»
К тому же мы рассматриваем условно реальный случай KPCA, давайте не будет упрощать задачу, благодарю.
Какие именно детали формата вас интересуют?
Ловите файлы, 3 штуки, 1Мб.
Как скоро ждать результат?
Как можно догадаться из кода режим шифрования — ЕСВ.
Много-раундовость, у вас есть этот исходный код, представьте что я подаю исходный .bmp файл в это ядро (файл будет передаваться через массив arrD), на выходе будет зашифрованный файл.
В следующем раунде я подаю этот зашифрованный файл на вход этого же ядра, при этом могу поменять элементы матрицы и т.д. до N итераций шифрования.
Полные исходники представлены в этой статье, передается файл, передаются элементы матрицы, выполняется умножение, есть ли еще вопросы?
Один момент, в данном коде используется uchar, в спецификации qes в статьях указано, что количество бит в векторе это выбранная создателем величина, т.е. здесь вы видите что используется массив данных uchar, с таким же успехом этот массив может быть другого типа данных, например int, long long и т.п.
Т.е. вариации этого кода только таковы что, например uchar заменится на int или long long или float или double, произвольно выбрано мной.
Как я понял «При этом это будет работать, даже если изначально работа была не с отдельными битами, а с числами некоторой разрядности и операции были по модулю некоторому, например по модулю 2^n» это не сильно меняет задачу, т.к. как вы сказали все это будет работать.
1) Так называемые кумиры Dota2 повышают её популярность
6) Некоторые считают что есть шанс подняться до самого верха и заработать 1kk+ $, да, этот шанс есть, но он настолько мал, что об этой цифре даже лучше и не думать
Есть статья, которая показывает что играть это замечательно, с ней можно в чём-то согласиться, но только отчасти.
«Для шифрования данных необходимо выполнить обычное умножение матриц, например: B' = P(q) * B, где B — данные которые необходимо зашифровать, P(q) — матрица поворота, B' — зашифрованные данные.»
Это основная часть алгоритма, вы мне уже много раз писали что вы понимаете что здесь идет обычное умножение на матрицу и что у этого умножения есть огромная проблема в виде линейных корреляций.
Как видно из википедии у нас имеется матрица поворота 3х3, мы берем данные в виде векторов 3*N байт и умножаем их на эту матрицу, получаем зашифрованные данные.
Вот собственно и весь алгоритм, что конкретно здесь не понятно?
Есть пример кода выше OpenCL/C++, он тоже непонятен?