Перенос всей логики в ключ

Здравствуйте!

Есть программа. Точнее ActiveX dll. Работает с устройствами терминала оплаты. К этой dll цепляется графический интерфейс на .NET. Прочитал всю документацию ... пребываю в трансе ... Ключи, криптография ...

Так вот - этот ActiveX после инициализации начинает исполнять алгоритм, представляющий собой 20 конечных автоматов.

Технология защиты - защищаем dll путем переноса логики всех автоматов в ключ.

Конечные автоматы выполняются где-то раз в 50-100 мс.

Если их всех перенести в ключ?
Во входном буфере посылать туда события, точку входа (номер автомата) и входные параметры (посчитал - около 60 байт потребуется), в выходном буфере брать перечень выходных воздействий (тоже 30 байт хватит).

Суть работы.
Вначале некая защ. ячейка (ЗЯ) инициализируется массивом начальных состояний автоматов.
Затем каждый цикл:
Каждый автомат при выполнении себя берет соотв вх. значение из вх. буфера, анализирует часть входов, соответствующих этому автомату, текущее состояние из ЗЯ и при необходимости состояния других автоматов из ЗЯ. Вычисляет свое новое состояние и кладет его в массив новых состояний в ЗЯ. И формирует перечень выходных воздействий. И так все автоматы.
Затем текущие состояния замещаются новыми. Затем dll читает данные новы состояний и при необходимости их логгирует. То есть внутренние состояния автоматов нам нужны для журнала событий.

Графический интерфейс можно в принципе и не защищать или использовать простенькую автозащиту.

Так вот - во-первых - что пугает:
- трудоемкость переноса кода
- трудности при обновлении программы - надо обновлять ключ, хотя может это даже и хорошо - то, что программа остается та же (сама dll), а для обновления используется TRU
-  очень пугает неопределенность в том, сколько по времени будет выполняться. Кроме того, что код еще и обращения к ЗЯ.

Что скажите?

Re: Перенос всей логики в ключ

laby пишет:

Что скажите?

Я сейчас делаю нечто аналогичное с ключами коде. По конечным автоматам мне кажется, что это не оч хорошая идея, поскольку количество их состояний небольшое скорей всего, а сами переходы будут видны в коде программы, которая по идее должна их проверять, чтобы убедиться в том, что ключ настоящий.

ЗЫ поскольку живых разработчиков защиты на ключах коде я на этом форуме особо не встречал, предлагаю объединить усилия в плане обдумывания различных вариантов защиты, быть может это пойдет на пользу и нам и вам :). Мой скайп iam+neekeetos , без плюса посередине.

(2012-03-20 15:46:49 отредактировано laby)

Re: Перенос всей логики в ключ

Neekeetos пишет:
laby пишет:

Что скажите?

Я сейчас делаю нечто аналогичное с ключами коде. По конечным автоматам мне кажется, что это не оч хорошая идея, поскольку количество их состояний небольшое скорей всего, а сами переходы будут видны в коде программы, которая по идее должна их проверять, чтобы убедиться в том, что ключ настоящий.

ЗЫ поскольку живых разработчиков защиты на ключах коде я на этом форуме особо не встречал, предлагаю объединить усилия в плане обдумывания различных вариантов защиты, быть может это пойдет на пользу и нам и вам :). Мой скайп iam+neekeetos , без плюса посередине.

Зачем проверять то??? В том то и смысл чтоб всю логику убрать. Сомневаюсь, что смогут расшифровать все 20 связанных по состояниям в коде автоматов. Да, тут слабое место то, что назад в приложение берем состояния для логгирования. Таким образом все данные становятся известными для анализа. Живые кодеры, ау?

(2012-03-20 18:50:34 отредактировано Denis)

Re: Перенос всей логики в ключ

Я живой кодер и хочу помочь :)

laby пишет:

Технология защиты - защищаем dll путем переноса логики всех автоматов в ключ.

Правильно ли я понял, что подразумевается ключ семейства Code?

laby пишет:

Так вот - во-первых - что пугает:
- трудоемкость переноса кода
- трудности при обновлении программы - надо обновлять ключ, хотя может это даже и хорошо - то, что программа остается та же (сама dll), а для обновления используется TRU
-  очень пугает неопределенность в том, сколько по времени будет выполняться. Кроме того, что код еще и обращения к ЗЯ.
Что скажите?

На эти вопросы сходу ответить трудно, т.к. не до конца понятна логика защиты, поэтому я тоже сначала спрошу:
1. 20 конечных автоматов это искусственный элемент защиты или часть функционала защищаемого ПО?

2.

laby пишет:

Во входном буфере посылать туда события, точку входа (номер автомата) и входные параметры

Чем отличается «событие» от «входные параметры»? Если я, правильно полня, по значению «события» определяется следующее состояние автомата, т.е. если бы этот автомат распознавал, например, цепочки символов, то это был бы текущий символ распознаваемой цепочки? Тогда для чего нужны «входные параметры»? Или подразумевается, что после перехода в следующее состояние вызывается какая-то сопоставленная этому состоянию функция и «входные параметры» передаются уже ей? В этом случае, наверное, лучше по отдельности рассматривать скорость работы автомата и этих функций.

3.

laby пишет:

- трудности при обновлении программы - надо обновлять ключ, хотя может это даже и хорошо - то, что программа остается та же (сама dll), а для обновления используется TRU

Можно ли быть уверенным, что только одна версия программы работает с ключом одновременно? В этом случае можно было бы применить следующий алгоритм:
1. Сохранять зашифрованный загружаемый код (файл *.cexe) в теле программы.
2. При запуске программы проверять текущую версию загруженного кода в ключе.
3. Если версии не совпадают обновлять загруженный код с помощью GrdCodeLoad.

Это бы позволило обновлять файл программы привычным способом, не усложняя этот алгоритм использованием TRU.

Пейте сладкий чай!

Re: Перенос всей логики в ключ

Neekeetos пишет:

ЗЫ поскольку живых разработчиков защиты на ключах коде я на этом форуме особо не встречал, предлагаю объединить усилия в плане обдумывания различных вариантов защиты, быть может это пойдет на пользу и нам и вам :). Мой скайп iam+neekeetos , без плюса посередине.

Живые кодеры есть, просто никто не делится своими реальными наработками, т.к. это может стать подсказкой для взломщиков.

Что касается вопросов топикстартера, то "дёргать" из программы ключ каждые 50-100 мс - не самая хорошая идея, будут заметные тормоза. А сама задача вполне легко реализуема в ключе Code.

Re: Перенос всей логики в ключ

romik пишет:

Живые кодеры есть, просто никто не делится своими реальными наработками, т.к. это может стать подсказкой для взломщиков.

Ничего не хочу сказать, но эта фраза примерно как из документации по гварданту и провоцирует бездумное использование ключей. Например есть алгоритмы GSII64, ECC160, HASH64, RND64, подразумевается что их можно использовать для защиты программы, но нигде нету исходников или даже малейшего описания их свойств. Известно лишь что они все основаны на общем алгоритме. Теперь первый вопрос - должны ли мы в данном случае защищать собственно сами алгоритмы шифрования? Верный ответ - если алгоритм имеет подтвержденную надежность - то не должны, единственный секрет который должен существовать - это ключ шифрования. Попытка скрыть их содержимое косвенно говорит о слабости алгоритмов - разработчик считает, что такого рода секретность добавит надежности, следовательно не обладает достаточной уверенностью в нем, не имел возможности проверить либо скрывает секретные закладки (или банально дыры), позволяющие его взломать по требованию.

Теперь аналогично про защиту. Есть защищаемая программа, ключ и код который работает в ключе. Все что делает программа и весь обмен спокойно записывается, воспроизводится и тп. Если то, что делает ключ с данными недостаточно сложно, то легко сделать таблицу вопросов ответов или формулу, по которой эмулятор будет считать ответы. Допустим вы говорите, что если взломщик знает функцию, по которой работает ключ, это дает ему возможность взломать все что требуется и  сделать эмулятор(вы даете подсказку).  Такое бывает лишь в одном единственном случае - если вы используете алгоритм в качестве секрета защиты.  Это не делает задачу неразрешимой для хакера даже в случае если вы не даете подсказки.

Если бы допустим вы использовали шифр, и ключ шифрования известный только ключу, то это создало бы для хакера задачу подбора ключа (а не подбора функции), и в случае надежного алгоритма шифрования, такая задача невыполнима по многим причинам. 

Я почему и написал, что никого нету, если все скрывают детали реализации(судя по форуму вообще не обсуждается), значит с большой вероятностью они строят защиту на чем то очень слабом и по понятным причинам не хотят этого светить. Я же хотел обсудить именно надежные схемы защиты, те, которые сохраняют надежность если известно все о том как они работают, кроме ключей.

Re: Перенос всей логики в ключ

Denis пишет:

Я живой кодер и хочу помочь :)

:)

Denis пишет:

Правильно ли я понял, что подразумевается ключ семейства Code?

Так точно!

laby пишет:

Так вот - во-первых - что пугает:
- трудоемкость переноса кода
- трудности при обновлении программы - надо обновлять ключ, хотя может это даже и хорошо - то, что программа остается та же (сама dll), а для обновления используется TRU
-  очень пугает неопределенность в том, сколько по времени будет выполняться. Кроме того, что код еще и обращения к ЗЯ.
Что скажите?

Denis пишет:

На эти вопросы сходу ответить трудно, т.к. не до конца понятна логика защиты, поэтому я тоже сначала спрошу:
1. 20 конечных автоматов это искусственный элемент защиты или часть функционала защищаемого ПО?

2.

laby пишет:

Во входном буфере посылать туда события, точку входа (номер автомата) и входные параметры

Чем отличается «событие» от «входные параметры»? Если я, правильно полня, по значению «события» определяется следующее состояние автомата, т.е. если бы этот автомат распознавал, например, цепочки символов, то это был бы текущий символ распознаваемой цепочки? Тогда для чего нужны «входные параметры»? Или подразумевается, что после перехода в следующее состояние вызывается какая-то сопоставленная этому состоянию функция и «входные параметры» передаются уже ей? В этом случае, наверное, лучше по отдельности рассматривать скорость работы автомата и этих функций.

Новое состояние и набор управляющих воздействий каждого из автоматов определяется исходя из его текущего состояния, значений входных переменных, события и текущих состояний других автоматов. Кроме того появилась мысль все таймера по которым события тайм-аутов будут анализироваться в коде, а не передаваться из вне в виде события или входа.

3.

laby пишет:

- трудности при обновлении программы - надо обновлять ключ, хотя может это даже и хорошо - то, что программа остается та же (сама dll), а для обновления используется TRU

Denis пишет:

Можно ли быть уверенным, что только одна версия программы работает с ключом одновременно? В этом случае можно было бы применить следующий алгоритм:
1. Сохранять зашифрованный загружаемый код (файл *.cexe) в теле программы.
2. При запуске программы проверять текущую версию загруженного кода в ключе.
3. Если версии не совпадают обновлять загруженный код с помощью GrdCodeLoad.
Это бы позволило обновлять файл программы привычным способом, не усложняя этот алгоритм использованием TRU.

Тут я даже затрудняюсь ответить, сложно как-то

Re: Перенос всей логики в ключ

Denis пишет:

20 конечных автоматов это искусственный элемент защиты или часть функционала защищаемого ПО?

Это практически весь функционал.

Denis пишет:

Или подразумевается, что после перехода в следующее состояние вызывается какая-то сопоставленная этому состоянию функция и «входные параметры» передаются уже ей? В этом случае, наверное, лучше по отдельности рассматривать скорость работы автомата и этих функций.

Входные параметры передаются в автоматы (код). А на выходе перечень номеров (последовательность) реальных функций, которые надо выполнить. То есть в ключе логика, основанная на внешних воздействиях, идущих от датчиков устройств, тайм-аутов ожидания неких сигналов извне, которые не приходят, внешних событий. Из этой логики рождается перечень того, что нужно делать - какие воздействия посылать на устройства - исполнительные механизмы. Пример - мы подаем сигнал, что купюра подана и распознана, состояние одного автомата из ожидания купюры переходит в состояние купюра подана, другой автомат переходит из состояния нет номинала в 1000 рублей. Далее автоматы анализируют, могут ли они дать сдачу и принимают решение отдать купюру назад или принять в кассету. Дается команда на прием в кассету - команда возвращается в выходном списке. Дается уже во внешней программе команда на устройство принять купюру. В коде стартует таймер. Если купюра нормально дошла до места - генерируется новое вх воздействие, где это видно и автомат переходит в состояние купюра принята, если на протяжении какого времени нет сигнала что купюра дошла дол места - срабатывает таймер и осуществляется переход в состояние купюра застряла. На самом деле логика конечно сложнее, но как пример. Насчет работы функций (выходных воздействий) - мы просто подаем в порт нужного устройства команду. Затем если чтото пришло от устройства - обновляем входы или генерим событие, в разных случаях по разному. Из-за того, что многие команды по тайм-аутам даются - надо вызывать автоматы как можно чаще с событием "Типа вроде ничо не происходит". Но всегда что-то происходит.

(2012-03-21 12:00:58 отредактировано laby)

Re: Перенос всей логики в ключ

В общем чего в моем случае делать - реализовывать весь этот конгломерат или можно как-то малой кровью? Например засунуть туда только 3 автомата? Но в этом случае легче хекнуть ...
Хотя и 3 автомата - тоже замахаться переносить ...

Re: Перенос всей логики в ключ

Neekeetos пишет:
romik пишет:

Живые кодеры есть, просто никто не делится своими реальными наработками, т.к. это может стать подсказкой для взломщиков.

Ничего не хочу сказать, но эта фраза примерно как из документации по гварданту и провоцирует бездумное использование ключей. Например есть алгоритмы GSII64, ECC160, HASH64, RND64, подразумевается что их можно использовать для защиты программы, но нигде нету исходников или даже малейшего описания их свойств. Известно лишь что они все основаны на общем алгоритме. Теперь первый вопрос - должны ли мы в данном случае защищать собственно сами алгоритмы шифрования? Верный ответ - если алгоритм имеет подтвержденную надежность - то не должны, единственный секрет который должен существовать - это ключ шифрования. Попытка скрыть их содержимое косвенно говорит о слабости алгоритмов - разработчик считает, что такого рода секретность добавит надежности, следовательно не обладает достаточной уверенностью в нем, не имел возможности проверить либо скрывает секретные закладки (или банально дыры), позволяющие его взломать по требованию.

Вообще то тема про ключи Code и всторенный код, причём тут перечисленные алгоритмы? Если кто-то использует в проекте ключ этого типа, и не помещает в него собственный код - ему можно только посочувствовать!

Neekeetos пишет:

Теперь аналогично про защиту. Есть защищаемая программа, ключ и код который работает в ключе. Все что делает программа и весь обмен спокойно записывается, воспроизводится и тп. Если то, что делает ключ с данными недостаточно сложно, то легко сделать таблицу вопросов ответов или формулу, по которой эмулятор будет считать ответы. Допустим вы говорите, что если взломщик знает функцию, по которой работает ключ, это дает ему возможность взломать все что требуется и  сделать эмулятор(вы даете подсказку).  Такое бывает лишь в одном единственном случае - если вы используете алгоритм в качестве секрета защиты.  Это не делает задачу неразрешимой для хакера даже в случае если вы не даете подсказки.

Все эти моменты описаны в документации, нужно только очень внимательно и вдумчиво читать, т.к. некоторые вещи описаны одной-двумя фразами. Лично я перед началом проекта перечитывал документацию минимум раз пять, и сечас постоянно в неё заглядываю.
В дополнние к тому, что драйвер шифрует обмен сеансовыми ключами, сделайте общение программы с ключом достаточно сложным, используйте в коде программы и ключа вероятностные события, и сложность написания эмулятора выростет многократно.

Neekeetos пишет:

Если бы допустим вы использовали шифр, и ключ шифрования известный только ключу, то это создало бы для хакера задачу подбора ключа (а не подбора функции), и в случае надежного алгоритма шифрования, такая задача невыполнима по многим причинам.

Секретный ключ алгоритма и так хранится только в ключе, и никогда его не покидает!

Neekeetos пишет:

Я почему и написал, что никого нету, если все скрывают детали реализации(судя по форуму вообще не обсуждается), значит с большой вероятностью они строят защиту на чем то очень слабом и по понятным причинам не хотят этого светить. Я же хотел обсудить именно надежные схемы защиты, те, которые сохраняют надежность если известно все о том как они работают, кроме ключей.

Скрываются детали конкретной реализации защиты проектов, на уровне "вот эту возможность я использую для того-то, а вот эту для этого и т.п." И опять-таки, речь не о ключах алгоритмов, а о функциях собственного встроеного кода!

Re: Перенос всей логики в ключ

romik пишет:

Все эти моменты описаны в документации, нужно только очень внимательно и вдумчиво читать, т.к. некоторые вещи описаны одной-двумя фразами. Лично я перед началом проекта перечитывал документацию минимум раз пять, и сечас постоянно в неё заглядываю.
В дополнние к тому, что драйвер шифрует обмен сеансовыми ключами, сделайте общение программы с ключом достаточно сложным, используйте в коде программы и ключа вероятностные события, и сложность написания эмулятора выростет многократно.!

Не пойму, как можно использовать в моем случае вероятностные события? Мне же нужно чтобы программа работала четко,  я что должен в 95 % случаев принимать 100 рублей, а в 5% случаев отдавать назад? И что это даст. Ну допустим хакер напишет эмулятор, который будет всегда принимать, то есть получится что с эмулятором прием денег будет работать лучше!?

Re: Перенос всей логики в ключ

romik пишет:

Вообще то тема про ключи Code и всторенный код, причём тут перечисленные алгоритмы?

Ну раз вы внимательно читали документацию, помните как происходит обновление пользовательского кода в ключах? Наверно вы используете абсолютно непровереный алгоритм цифровой подписи ECC160 на основе хэша и сам алгоритм не разглашается. Обратите особое внимание что ЕСС это не нормальная подпись, это нечто собраное из их собственного алгоритма блочного шифра. Грубо говоря даже схема подписи вызывает сомнения, даже если не принимать во внимание алгоритмы шифра и хэша, которые там используются.

romik пишет:

В дополнние к тому, что драйвер шифрует обмен сеансовыми ключами, сделайте общение программы с ключом достаточно сложным, используйте в коде программы и ключа вероятностные события, и сложность написания эмулятора выростет многократно.

Да , я всегда говорю, блажен кто верует. В соседнем форуме подменили длл апи гварданта на свой эмулятор. Ничего что часть "в дополнение шифрует обмен..."  при этом отсутствует? А как вам возможность смотреть непосредственно вызовы апи просто отладчиком, где там ваше шифрование?

romik пишет:

Скрываются детали конкретной реализации защиты проектов, на уровне "вот эту возможность я использую для того-то, а вот эту для этого и т.п." И опять-таки, речь не о ключах алгоритмов, а о функциях собственного встроеного кода!

Есть такая методика еще цезарь использовал, называется сегодня security by obscurity, ака безопасность обеспечивается неразглашением. Но только вы почему то не дошли до финальной стадии, зачем все ключи и прочее, просто  СКРЫВАЙТЕ СВОЮ ПРОГРАММУ! :)

Re: Перенос всей логики в ключ

Neekeetos пишет:

Обратите особое внимание что ЕСС это не нормальная подпись, это нечто собраное из их собственного алгоритма блочного шифра.

Это не так. Подпись сделана не на блочном шифре, а на эллиптических кривых.

Neekeetos пишет:

В соседнем форуме подменили длл апи гварданта на свой эмулятор. Ничего что часть "в дополнение шифрует обмен..."  при этом отсутствует? А как вам возможность смотреть непосредственно вызовы апи просто отладчиком, где там ваше шифрование?

Вы смешиваете две разные атаки: атаку на драйвер ключа и атаку на dll api. Способы защиты от разных атак тоже разные. В первом случае шифрование трафика эффективно, во втором - нет. Для защиты от атаки на dll нужно использование статической линковки и применение Guardant Monolith (http://aktiv-company.ru/news/company-ed … -2012.html).

Re: Перенос всей логики в ключ

Neekeetos пишет:

Верный ответ - если алгоритм имеет подтвержденную надежность - то не должны, единственный секрет который должен существовать - это ключ шифрования.

Это утверждение верно не во всех случаях. Для "обычного" использования криптографии, как то защита обмена сообщениями между двумя доверенными абонентами это утверждение справедливо.
В защите софта доверенным абонентом является только ключ, а само приложение считается априори скомпрометированным. Поэтому классические подходы тут не работают и сокрытие алгоритма в данном случае эффективно.

Re: Перенос всей логики в ключ

laby пишет:

Не пойму, как можно использовать в моем случае вероятностные события?

Вероятностные события использовать можно. Например, одинаковые входные условия можно описывать разными наборами данных и использовать их "случайным" образом. При этом можно задействовать и внутренние состояния автоматов, сделав так, чтобы "декодирование" входных данных зависело от предыдущего состояния автомата.

Re: Перенос всей логики в ключ

Neekeetos пишет:

Если бы допустим вы использовали шифр, и ключ шифрования известный только ключу, то это создало бы для хакера задачу подбора ключа (а не подбора функции), и в случае надежного алгоритма шифрования, такая задача невыполнима по многим причинам. 

Ну и хочется напомнить, что в ключах Guardant Code реализованы опубликованные алгоритмы: AES и SHA256. От этого что-то радикально изменяется?

Re: Перенос всей логики в ключ

Vladimir Ivanov пишет:

Это не так. Подпись сделана не на блочном шифре, а на эллиптических кривых.

Ага, перепутал с вашей контрольной суммой. Так или иначе я указал на это как на факт использования вашего алгоритма при работе ключа. Поскольку алгоритм "секретный", то это автоматом означает что он ненадежен(обратите внимание, дело не в самом алгоритме, он может быть хоть рса внутри, просто вы не доказали обратного и не дали возможности сделать это другим ). Учитывая математику работы алгоритма(эллиптические кривые), и те ключи которые получаются в программе GrdUtil, оно ненадежно при такой длине ключа, даже если вы используете проверенные схемы. Сколько требуется на подбор нужной подписи? час, полчаса?

Vladimir Ivanov пишет:

Вы смешиваете две разные атаки: атаку на драйвер ключа и атаку на dll api. Способы защиты от разных атак тоже разные. В первом случае шифрование трафика эффективно, во втором - нет. Для защиты от атаки на dll нужно использование статической линковки и применение Guardant Monolith (http://aktiv-company.ru/news/company-ed … -2012.html).

Даже не знаю с чего начать. Вот человек в предыдущем сообщении считает что шифрование между ключом и драйвером обезопасит его сильно. Мне например это  непонятно, ведь все это можно заменить на прозрачный протокол от программы до ключа, безопасность будет на том же уровне. Аналогично , смысл смотреть обмен между длл и драйвером или же между драйвером и ключом если все существует в уже открытом виде во время вызовов апи, интеграции это тоже касается. До тех пор пока вы не создаете закрытый туннель между функциями программы(каждой из них) и ключом, это все лишь затрудняет задачу но никак не решает. Монолит в качестве примера вообще не совсем в тему, поскольку по понятным причинам нельзя программу целиком переписать под виртуальную машину.
PS: это все просто мое личное мнение, ни в коей мере не хочу никого обидеть и тп, да и могу ошибаться в чем то.

Re: Перенос всей логики в ключ

Vladimir Ivanov пишет:
laby пишет:

Не пойму, как можно использовать в моем случае вероятностные события?

Вероятностные события использовать можно. Например, одинаковые входные условия можно описывать разными наборами данных и использовать их "случайным" образом. При этом можно задействовать и внутренние состояния автоматов, сделав так, чтобы "декодирование" входных данных зависело от предыдущего состояния автомата.

какое-то масло масляное получается. То есть у нас известен вектор состояний и в коде и в программе. кодируем этим вектором как ключом и раскодируем в коде этим же ключом. Но это же все равно зависимость не случайная, так как зависимость от тех же величин, которые не случайны. К тому же можно понять что кодируется с помощью состояний и все раскодировать. Не знаю по сложности, но то что зависимость будет не случайная это точно.

(2012-03-21 13:06:02 отредактировано Neekeetos)

Re: Перенос всей логики в ключ

Vladimir Ivanov пишет:

Ну и хочется напомнить, что в ключах Guardant Code реализованы опубликованные алгоритмы: AES и SHA256. От этого что-то радикально изменяется?

Да, меняется. Но не кардинально из за того что остаются вещи вроде TRU, ключей доступа к брелку длиной по 4 байта и тому подобные моменты, на которые непонятно как реагировать. По поводу ключей доступа - их также невозможно сменить. Так что если вдруг кому то захочется получить данные ключа, он это относительно легко может сделать через вас, используя например методы социальной инженерии, деньги, угрозы, угон базы данных клиентов.

Re: Перенос всей логики в ключ

Neekeetos пишет:

Поскольку алгоритм "секретный", то это автоматом означает что он ненадежен(обратите внимание, дело не в самом алгоритме, он может быть хоть рса внутри, просто вы не доказали обратного и не дали возможности сделать это другим ).

Автоматом это не означает ничего. То есть абсолютно ничего. :) Дело все в том, что на сегодняшний день не существует, на сколько мне известно, способов чисто математически доказать стойкость того или иного алгоритма. Надежность используемых в настоящее время шифров, хешей, алгоритмов подписи и т.п. держится всего лишь на том, что сообщество экспертов до сих пор не нашло эффективной атаки, существенно отличающейся от брутфорса.

Re: Перенос всей логики в ключ

Vladimir Ivanov пишет:
Neekeetos пишет:

Поскольку алгоритм "секретный", то это автоматом означает что он ненадежен(обратите внимание, дело не в самом алгоритме, он может быть хоть рса внутри, просто вы не доказали обратного и не дали возможности сделать это другим ).

Автоматом это не означает ничего. То есть абсолютно ничего. :) Дело все в том, что на сегодняшний день не существует, на сколько мне известно, способов чисто математически доказать стойкость того или иного алгоритма. Надежность используемых в настоящее время шифров, хешей, алгоритмов подписи и т.п. держится всего лишь на том, что сообщество экспертов до сих пор не нашло эффективной атаки, существенно отличающейся от брутфорса.

Володя, давайте по теме поговорим

Re: Перенос всей логики в ключ

Vladimir Ivanov пишет:

Автоматом это не означает ничего. То есть абсолютно ничего. :) Дело все в том, что на сегодняшний день не существует, на сколько мне известно, способов чисто математически доказать стойкость того или иного алгоритма. Надежность используемых в настоящее время шифров, хешей, алгоритмов подписи и т.п. держится всего лишь на том, что сообщество экспертов до сих пор не нашло эффективной атаки, существенно отличающейся от брутфорса.

Нет, тут вас немного поправлю. Существует несколько базовых критериев, которым должен удовлетворять алгоритм шифра, например шифр должен быть устойчив к определенным типам атак. То, что шифр удовлетворяет им можно доказать математически. Можно также оценить теоретическую сложность взлома данного конкретного шифра. Теперь смотрим на ваши изобретения:
- нету теоретической оценки устойчивости к взлому вообще.
- нету никакого сообщества экспертов, которые проверяли шифр. Сам алгоритм недоступен специалистам для анализа.
Все это приводит к следствию что алгоритм нельзя использовать, поскольку его надежность не доказана.

Как я уже говорил, сделать алгоритм и скрыть рассчитывая, что это усложнит его взлом, противоречит вообще азам криптографии, вот смотрите в википедии например:

При́нцип Керкго́ффса — правило разработки криптографических систем, согласно которому в засекреченном виде держится только определённый набор параметров алгоритма, называемый ключом, а остальные детали могут быть открыты без снижения стойкости алгоритма ниже допустимых значений. Другими словами, при оценке надёжности шифрования необходимо предполагать, что противник знает об используемой системе шифрования всё, кроме применяемых ключей.

Re: Перенос всей логики в ключ

Neekeetos пишет:

Как я уже говорил, сделать алгоритм и скрыть рассчитывая, что это усложнит его взлом, противоречит вообще азам криптографии

https://forum.guardant.ru/post/746/#p746

(2012-03-21 14:22:05 отредактировано Neekeetos)

Re: Перенос всей логики в ключ

Vladimir Ivanov пишет:
Neekeetos пишет:

Как я уже говорил, сделать алгоритм и скрыть рассчитывая, что это усложнит его взлом, противоречит вообще азам криптографии

https://forum.guardant.ru/post/746/#p746

Видел, обоснуйте. За счет чего повышается сложность взлома? Я вот утверждаю, что в случае надежного шифра скрытие ничего не меняет. В случае же шифра непроверенного, да, как временная мера против взлома может сработать.

Re: Перенос всей логики в ключ

laby пишет:

Володя, давайте по теме поговорим

И правда что.