Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Кодирование файлов конфигурации

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Собственно задача такая - нужно сохранить и защитить от изменения пользователем настройки программы, но в то же время сделать возможным их изменения мной и включение конф. файла в поставку программы.
То есть нужно что то вроде кодированных инишников.
Я вот думаю, самому писать алгоритмы и т.п. или есть уже что то подобное?
 
Раньше я держал настройки в запароленном db файле (paradox), но сейчас программу переписываю без BDE - вот и встала проблема.
 
Кстати насчет пароленного парадокса - насколько он трудновскрываем - есть инфа?

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 21:54 31-03-2003
hog



oink
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
думаю, что лучше шифровать самому. причем делать примерно так: есть класс настроек с методом "SaveToStream" (в TMemoryStream), а потом шифровать весь stream сразу и скидывать его в TFileStream.
 

Цитата:
Кстати насчет пароленного парадокса - насколько он трудновскрываем - есть инфа?

вскрываем, полно готовых решений.

Всего записей: 1141 | Зарегистр. 14-12-2001 | Отправлено: 00:02 01-04-2003
andrews



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
если дело серьезное, то самое надежное рещение - это ассимметричная криптография делаешь hash с конфига (т.е. считаешь скажем md5 или sha1 с него), потом делаешь открытый/закрытый ключ. далее шифруешь на закрытом ключе этот hash и вставляешь в конец конфига. проверка заключается в следующем - в программе считаешь hash с конфига (без hash'а в конце естественно ), затем на открытом ключе расшифровываешь hash из самого конфига и сравниваешь их если совпадают, значит всё в порядке алгоритмы шифрования можно взять из пакета openssl на www.openssl.org или из исходников PGP
PS так обычно делают лицензии - стандартная процедура цифровой подписи

Всего записей: 96 | Зарегистр. 21-03-2003 | Отправлено: 01:36 01-04-2003
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrews
Вобщето, скорей всего это занадто. Ему достаточно будет XOR-a.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:49 01-04-2003
andrews



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vserd
ага, и именно по этому человек интересуется:

Цитата:
Кстати насчет пароленного парадокса - насколько он трудновскрываем - есть инфа?

а XOR ломается так - просто берется и опять же XOR'ится конфиг сам с собой, но с посимвольным сдвигом и подсчитывается совпадение символов. когда совпадение символов будет максимальным (для текста ~60-80%) сдвиг будет равен длине ключа, потом начинается простой перебор. ну а самый простой вариант - посмотреть дебагером

Всего записей: 96 | Зарегистр. 21-03-2003 | Отправлено: 12:23 01-04-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andrews
Более серьёзно применять простое LZSS сжатие совместно со своим хоr-ом. А что если к xor прибавить mul и записывать два байта вместо одного, без всякого LZSS? Про дебаггер речи не ведётся. Каким методом вычисляется обратная функция?

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 12:52 01-04-2003
andrews



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pinocchio
дебагер в данном случае - это проще всего. если нужна надежная зашита, то лучше PKI пока не придумали ничего... остальное - это всё игрушки. и потом - если там программа из 20 строк - то и защищать ее посредствам PKI конечно смысла не имеет...

Всего записей: 96 | Зарегистр. 21-03-2003 | Отправлено: 13:06 01-04-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD
Если дело происходит в интрасети, то наиболее верным способом было бы хранение конфига в удаленной субд, тогда и проблема отпадает. Если же все это происходит локально, то вариантов можно предложить море, вопрос как всегда в том, каковы будут потери от взлома, чтобы затраты на защиту их не перекрыли многократно. Иногда и xor'а достаточно, а порой и rsa мало...
 
andrews
pki, в частности, цифровая подпись, хороши в вопросах передачи данных. Здесь же и поставщик и потребитель в одном месте. Достаточно заменить один байт в коде, где у тебя идет проверка цифровой подписи и вуаля. Тогда уж проще не заморачиваться с хэшированием, а просто закриптовать и публичный ключ раскидать по экзешнику.  
 


----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 13:40 01-04-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andrews

Цитата:
лучше PKI пока не придумали ничего...  

Если известен способ шифрования, известно и обратное действие. Лучше собственного способа шифрования никогда никто не придумает. Это про тайну которую знает более двух человек. Программа расшифровки, пока её не продублировали является наисложнейшим ключём. А вот принцыпы одни и те же:
Увеличение объёма.

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 14:23 01-04-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio
andrews совершенно прав. Даже если ты знаешь алгоритм RSA и имеешь публичный ключ, ты потратишь гораздо больше времени на взлом зашифрованного им сообщения, чем на дебаг кода, чтобы увидеть что там использован лемпель-зив пусть даже с xor'ами и mul'ами. Достаточно посмотреть на продолжительность и задействованные ресурсы для недавно завершившегося коллективного взлома 40-битного rsa. Хотя, способ шифрования всем известен. А если бы он был 128-битным? Другое дело, что в данном случае это не самое лучшее решение, по причинам, которые я описывал выше.


----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 14:50 01-04-2003
andrews



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pinocchio

Цитата:
Лучше собственного способа шифрования никогда никто не придумает

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

Всего записей: 96 | Зарегистр. 21-03-2003 | Отправлено: 14:51 01-04-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrews
Защита от трассировки поможет и кустарному алгоритму. А вот делать так, чтобы все эти мучения с ассиметричными алгоритмами сводились к банальному cmp... Ну не верю я, что они смогут хорошо работать в локальном масштабе. Это все равно, что пытаться зашифровать что-то от самого себя

----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 15:35 01-04-2003
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Наиболее реально мне видится шифрование с открытым ключем - то есть программа расшифровывает конфиг и использует, но ключа для создания измененного конфига у нее нет - соответственно пользователь изменить настройки не может даже зная алгоритм раскрытия конфига и публичный ключ зашитый в программе.
Вот вопрос тогда такой -  
Есть для этого дела готовые исходники функций или компоненты для Делфи?
Уж сильно мало у меня времени и сил чтобы сейчас разбиратся в чужих исходниках и алгоритмах и переписывать их. Программа и так кой как работает
 
По поводу СУБД - ведь для доступа к СУБД нужен пароль - который в свою очередь опять же хранится в программе и с помощью дебагера может быть извлечен... есть мысли?

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 16:32 01-04-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
соответственно пользователь изменить настройки не может даже зная алгоритм раскрытия конфига и публичный ключ зашитый в программе

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

----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 17:53 01-04-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

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


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

На взлом шифра потратится гораздо больше времени, чем на отыскивание публичного ключа. Это как раз то о чём я и говорил...
Мат. выкладк (прошу andrews заткнуть уши):
1. Абсолютно все действующие шифровальщики пользуют хеширование совместно с самим методом (вообще все программы используют массивы).
2. Бинарное дерево строится с любого файла по остатку 4. При этом задействуется достаточно большой ресурс.
3. Любое бинарное дерево обеспечивает "пористость" математического пространства - выбывают определённые числа (неопределённость - 2a байта <> 2b байтам).
4. Пористое пространство можно выразить через хэш.
5. Кто нибудь отлаживал или дебагил наипростейший LZSS в ассемблерном виде?
6. Элементарный хеш полученый с самого екзешника займёт ловителя блох очень на долго (сравни 1000 инструкций асм -:- 10000000).
7. А ключа никакого нет - ключь это навар с расшифровки экзешника в сравнении с расшифровкой по 0x00000...
8. Если удаётся идентифицировать алгоритм (например RSA) то шифровальщик становится прозрачным для дебагера, а вот на новых алгоритмах всегда тормозишь не хуже чем автор, когда он ищет ошибки.
9. LZSS это ещё одно бинарное дерево в той же памяти. Чтобы понять как работает алгоритм на ассемблерном уровне у меня ушёл месяц - с исходниками. Может быть я чемпион тупости? Тогда ответьтем на пункт №5
10. Прекрасно Вас понимаю - приятно на готовеньком, и даже в голову не приходит совмещать например собственное и RSA.

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 13:46 02-04-2003
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Guderian
Это усложнит жизнь не только мне но и взломщику.
 
Pinocchio
Круто завернул....
 

Цитата:
Вот вопрос тогда такой -  

остается открытым...

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 14:32 02-04-2003
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
Наиболее реально мне видится шифрование с открытым ключем - то есть программа расшифровывает конфиг и использует, но ключа для создания измененного конфига у нее нет - соответственно пользователь изменить настройки не может  

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

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 14:41 02-04-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio

Цитата:
На взлом шифра потратится гораздо больше времени, чем на отыскивание публичного ключа.

Согласен, если использовать утюг и сапоги на три размера меньше против носителя этого самого ключа. Если же ты пытаешься доказать, что rsa взламывается с полпинка или модифицированный by Pinocchio lzss гораздо "пористей" и забористей?
 
Можно еще всю таблицу умножения начиная с пункта 11 перечислить. От этого десять раз модифицированный lzss не станет более криптостойким чем rsa. Там совершенно другие порядки. За время взлома, скажем, 128-битного ключа, ты не то что lzss, весь windows сможешь пропахать вдоль и поперек и еще дети твои и внуки смогут это продолжить до сотого колена

----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 15:03 02-04-2003
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А использовать функции wincrypt.dll (если пишем под Windows) ?
По-моему, дешево и сердито

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 15:15 02-04-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MrZeRo
Вычти из этого списка win2k и старше. Хотя, ты безусловно прав в одном, готовых реализаций (причем, штатных) этого добра по вынь навалом.
 
vserd

 
UncoNNecteD

Цитата:
Это усложнит жизнь не только мне но и взломщику.

Невнимательно прочитал. Ассиметричный алгоритм в противовес симметричному в данной задаче усложнит жизнь только тебе...

----------
Продается нужник. Самому очень нужен, кабы не нужда - не продавал бы.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 15:39 02-04-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Кодирование файлов конфигурации


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru