OberonCore
https://forum.oberoncore.ru/

Как лучше прятать от хакеров ключи в тексте программы?
https://forum.oberoncore.ru/viewtopic.php?f=27&t=452
Страница 1 из 1

Автор:  Сергей Губанов [ Понедельник, 07 Май, 2007 18:53 ]
Заголовок сообщения:  Как лучше прятать от хакеров ключи в тексте программы?

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

Автор:  Илья Ермаков [ Понедельник, 07 Май, 2007 20:19 ]
Заголовок сообщения: 

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

Автор:  Sergo [ Вторник, 08 Май, 2007 09:07 ]
Заголовок сообщения:  Re: Как лучше прятать от хакеров ключи в тексте программы?

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


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

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

Автор:  Иван Горячев [ Вторник, 08 Май, 2007 10:17 ]
Заголовок сообщения:  Re: Как лучше прятать от хакеров ключи в тексте программы?

Sergo
Прочитал три раза. Не понял. А как можно просмотреть зашифрованый список ключей, предварительно его не расшифровав?

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

Автор:  Сергей Губанов [ Вторник, 08 Май, 2007 10:18 ]
Заголовок сообщения:  Re: Как лучше прятать от хакеров ключи в тексте программы?

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


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

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

Автор:  Sergo [ Вторник, 08 Май, 2007 12:20 ]
Заголовок сообщения:  Re: Как лучше прятать от хакеров ключи в тексте программы?

Ivor писал(а):
Sergo
Прочитал три раза. Не понял. А как можно просмотреть зашифрованый список ключей, предварительно его не расшифровав?


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

Автор:  batyrmastyr [ Вторник, 08 Май, 2007 23:17 ]
Заголовок сообщения:  Re: Как лучше прятать от хакеров ключи в тексте программы?

Сергей Губанов писал(а):
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. Хотя это все-таки чтобы никто не вклинился без спросу.
Для зашиты от посторонних требуется подпись.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/