Какой алгоритм шифрования проще — AES, RSA, Blowfish, Twofish?
Из 2 последних - по логике должен быть Blowfish, а что с 2 первыми?
Хочу изучить, чтобы мог реализовать на любой платформе без сторонних библиотек. Или что-то изменить - чтобы не поддавалось расшифровке сторонними средствами, и в то же время различие не слишком отсвечивало.
А также для тренировки мышления и конкретных знаний.
Но начинать надо с простого.
Buick: это факт. Писать криптографию самому - безумие. Везде есть проверенные библиотеки для этого. Просто разобраться, понять принципы и грамотно использовать- уже хорошо.
Денис Загаевский: Не везде, и часто завязанные на системном API, что сложно маскируется и легко выявляется отладкой.
Сами алгоритмы тоже лучше модифицировать, а то скоро в декомпиляторах в списке строк будет прямо кнопка "try decrypt", и в меню список типичных алгоритмов... Одним кликом указываешь строку, другим - предлагаемый ключ - готово...
Ну а разобраться, просто прочитав теорию - я не могу, только метод исследования и вечная неуверенность в том, что лично не видел (не насчет безопасности, а именно непонимание), и остальные в команде такие же - сумрачная тевтонско-китайская команда с верхушкой в России)
Денис Загаевский: Нам сложно правильно провести грань между известным и неизвестным. Для нас-то рано или поздно все становится известным, если оно хоть немного стоит денег. Поэтому когда сами создаем защиту для того, что полностью защитить нельзя в принципе (код от декомпиляции, IP серверов и реализацию протокола в клиентском приложении) - всегда кажется, что сделали мало или вообще не то.
Buick: просто не надо самим создавать защиту. Есть целые компании, которые на этом собаку съели. Если ваше ПО стоит того, чтобы го защищать, то купите защиту и не костыляйте.
Денис Загаевский: Это какую защиту купить? Обфускатор? Не очень они впечатляют.
___При обфускации кода - стремятся тупо переименовать методы и классы, это эффективно, только если кода много. А если мало, то больше нравится делать иначе: давать реальные имена, но ложные, и даже создавать методы с именами типа "cannot_decompile", что приведет в ступор, по крайней мере, начинающих, склонных пользоваться только рефлектором.
___Запутывать control-flow - чтобы получится реальный "can not decompile" - многие обфускаторы вовсе не слышали, также как и заворачивать все в рефлексию. А ведь перспективы тут есть, если развить мышление. Что и хочу сделать, изучая сложные алгоритмы - такие, как шифрование.
___На активную защиту (выявлять дебаггер, отладочные прокси и драйвера, проверять чек-суммы функций - не пропатчены ли, репортить на сервер, идентифицировать железо) - тоже большинство кладет. Выявить дебаггер весьма проблематично для .NET - их несколько, и кроме стандартного, они не предоставляют удобной возможности выявить.
___Если кода мало, то надо сделать так, чтобы было много. Напихать всего побольше, зависимости запихать в EXE с помощью IlMerge. И вот эту кашу - уже обфусцировать и закапывать активную защиту. Обфускаторы тоже мало этим заняты.
___Наконец, технология вроде NecroBit, которая защищает от совсем уж начинающих и неусердных с рефлектором. Вот ее предоставляет пара обфускаторов - но покупать ради одного этого? "$1 за удар, $99 за знание, куда ударить"? Проще исследовать и повторить.
@Sanasol
AES, Blowfish, Twofish - блочные алгоритмы шифрования, причем довольно похожие, никакого хэширования там нет, оно вообще в них никак не используется.
RSA тоже алгоритм шифрования.
Самый простой алгоритм шифрования с точки зрения реализации - RSA (каждая функция занимает одну строчку). Расплачиваться за это приходится не самой простой генерацией ключей шифрования.