Там нет никакого способа, чтобы полностью скрыть такие секреты от определенных нападающих , но есть способы поднять планку (которая иногда может служить как сдерживающим фактором, так и временной мерой).
Самый простой способ сделать это - применять одноразовые прокладки, такие как XOR.
int pad = 322;
int secret = 360;
int value = pad^secret; // This is 42
Вы можете добавить комбинации таких одноразовых подушечек, наряду с затемненными криптографическими функциями, чтобы сделать его более трудным для атакующих, чтобы найти значение.
Обратите внимание, что, хотя это затрудняет для злоумышленников вывод ключа, просматривая скомпилированный код, они все равно могут прикреплять отладчик к выполняемому процессу и вытаскивать вычисленный ключ из памяти. На самом деле есть отладчики (такие как IDA pro), которые делают такие вещи почти тривиальными.
Вам также нужно беспокоиться о том, что ОС выгружает ваш ключ на диск после его вычисления, который можно извлечь довольно тривиально. (Использование чего-то типа mlock() для блокировки страниц в памяти может помочь вам в этом.)
Во всяком случае, это очень сложная проблема, с которой многие разработчики программного обеспечения борются с тем, чтобы реализовать неинтрузивные (например, без проверки ключей сети).
как сильно вы защищаете это целое число и от кого вы его защищаете? –
Обычно я предлагаю что-то вроде XORing с 42, но я думаю, что в этом случае это может быть лишним. – Hasturkun
Мне не нужно, чтобы он был очень безопасным, достаточно, чтобы остановить случайного пирата. – igul222