OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 18 Апрель, 2024 17:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 07 Май, 2007 18:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Как в исходном тексте программы "спрятать" константы (ключи для шифрования), чтобы хакеры помучились их из программы выковыривать? На самом деле, как это сделать идей-то всяких много, интересует есть ли какой-либо научный подход к этой проблеме?...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 07 Май, 2007 20:19 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну, не знаю... Цепочечное шифрование, когда ключ для расшифровки очередного блока спрятан в конце предыдущего...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Май, 2007 09:07 

Зарегистрирован: Четверг, 03 Август, 2006 16:28
Сообщения: 182
Сергей Губанов писал(а):
Как в исходном тексте программы "спрятать" константы (ключи для шифрования), чтобы хакеры помучились их из программы выковыривать? На самом деле, как это сделать идей-то всяких много, интересует есть ли какой-либо научный подход к этой проблеме?...


Известный алгоритм шифрования RSA (или RSA-Euro) основан на использовании двух ключей: открытого и закрытого. Открытым можно только шифровать. Для дешифровки используется закрытый ключ.
Поэтому обычно делают так: забивают в исходный текст список ключей, предварительно зашифровав их открытым ключом RSA. Когда пользователь вводит свой персональный ключ, он тоже шифруется тем же открытым ключом RSA, и затем ищется в списке. Закрытый ключ никак не используется.

Уязвимое место здесь - участок программы, в котором производится сравнение двух ключей. Если это просто код вроде IF Ключ_Пользователя = Ключ_Из_Списка THEN ...., то его довольно просто найти и пропатчить. Но разными хитрыми приемами его можно очень хорошо замаскировать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Май, 2007 10:17 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Sergo
Прочитал три раза. Не понял. А как можно просмотреть зашифрованый список ключей, предварительно его не расшифровав?

Но идея с асимметричным шифрованием здравая. Что если в качестве части закрытого ключа использовать содержимое dll-файла, в котором находится важная часть программы? Т.е. при подготовке дистрибутива имеем программу в виде файлов program.exe и important.dll. после этого генерируем пару ключей, и закрытый ключ привязываем к important.dll (ну ищем там общие последовательности, или ещё как. создаём diff-файл, другими словами). В результате пользователю уходит набор program.exe, important.dll, open.key и secret.diff. Особенно интересно будет хакеру, если код расшифровки/проверок будет находиться в этой самой important.dll


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Май, 2007 10:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Sergo писал(а):
забивают в исходный текст список ключей, предварительно зашифровав их открытым ключом RSA. Когда пользователь вводит свой персональный ключ, он тоже шифруется тем же открытым ключом RSA


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

В моём случае пользователь ничего не вводит. У меня просто две программы общающиеся по TCP. Программы должны быть уверены, что общаются со своими "родными" копиями, а не хакерскими заглушками. Для этого, по всей видимости, надо использовать протокол SSL. Ключ шифрования ключей придётся захардкодить - вот в этом-то и проблема.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Май, 2007 12:20 

Зарегистрирован: Четверг, 03 Август, 2006 16:28
Сообщения: 182
Ivor писал(а):
Sergo
Прочитал три раза. Не понял. А как можно просмотреть зашифрованый список ключей, предварительно его не расшифровав?


Шифруется каждый ключ в отдельности, а не весь список целиком.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 08 Май, 2007 23:17 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Сергей Губанов писал(а):
Sergo писал(а):
забивают в исходный текст список ключей, предварительно зашифровав их открытым ключом RSA. Когда пользователь вводит свой персональный ключ, он тоже шифруется тем же открытым ключом RSA


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

В моём случае пользователь ничего не вводит. У меня просто две программы общающиеся по TCP. Программы должны быть уверены, что общаются со своими "родными" копиями, а не хакерскими заглушками. Для этого, по всей видимости, надо использовать протокол SSL. Ключ шифрования ключей придётся захардкодить - вот в этом-то и проблема.

Никакой "ключ шифрования ключей" не нужен :)
Есть n участников. Все они используют a.
1)Для каждого (i-го) берется секретное число x_i и публичное число yi= a^x_i. (по y_i вычислить x_i очень сложно). Далее если i и j хотят поболтать, они передают в общий доступ ключи y_i и y_j (и свои координаты :) ).
2)Таким путем генерятся секретные (возможно, одноразовые :) ) ключи z_ij (для i-го) и z_ji (для j-го) по формуле z_ij=y_j^x_i=a^x_i^x_j =y_i^xj. Ими они шифруют и дешифруют свою дальнейшую переписку.
В итоге используется симметричное шифрование без осо. Нужно только "захардкодить" собственно алгоритм симметричного шифрования (из непрошибаемых-ГОСТ 89 года) и генератор x_i. Хотя это все-таки чтобы никто не вклинился без спросу.
Для зашиты от посторонних требуется подпись.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB