Динамически генерировать ключ дешифрования, а не жестко кодировать строковый литерал? (Objective-C / iPhone) - PullRequest
4 голосов
/ 22 августа 2011

Приложение для моего iPhone использует зашифрованные ресурсы. Ключ дешифрования должен быть жестко закодирован, но я стараюсь избегать использования строкового литерала. Есть ли хороший стандартный алгоритм для такого рода вещей?

Предположим, мой ключ:

abcdef01-2345-6789-abcd-ef0123456789

Вместо этого:

NSString *key = @"abcdef01-2345-6789-abcd-ef0123456789";

Я скорее делаю что-то вроде этого:

-(NSString *)key {

    //TODO: generate abcdef01-2345-6789-abcd-ef0123456789 dynamically

    return generatedKey;
}

Мысли

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Плохая идея . Причина та же, что и для жестко заданных паролей . Вы можете запутать и XOR окончательный пароль вместе из нескольких мест, но способный хакер будет следить за памятью устройства и восстанавливать любой разумный протокол с достаточным временем. Что у него есть, если он просто украл телефон. Или мог бы организовать атаки по побочным каналам и измерить время выполнения или энергопотребление, поэтому угадывая ключ так же, как это делали бы безопасные взломщики в фильмах - возиться с битами за ключом и «слушать», если они ближе к цели.

Таким образом, вы можете сделать это сложнее, но без аппаратного механизма безопасного хранения (который защищал бы доступ к памяти и скрывал потребление энергии, время выполнения и т. Д., Как это делают смарт-карты или аппаратные модули безопасности), у вас нет шансов сделать это ненадежно.

Для пароля необходимо , чтобы сохранить внеполосную информацию, отделенную от устройства. В идеале пользователь должен вводить его каждый раз, когда это необходимо. Конечно, это утомительно с точки зрения пользователя - но по крайней мере это безопасно.

0 голосов
/ 22 августа 2011

Одним из возможных способов является использование двух или трех байтовых массивов, таких что key[i] = ary1[i] ^ ary2[i] ^ ary3[i].Вы должны инициализировать их в трех отдельных местах.Тогда вам не нужно выполнять XOR в одном и том же цикле, два могут быть сначала XOR, а третий позже.Это зависит от того, насколько неловко вы хотите сделать это для любого злоумышленника.

Это не будет совершенно безопасно, но оно будет сдерживать случайного злоумышленника.Для не случайного злоумышленника вам понадобится крипто-эксперт, которым я не являюсь.Сколько вы можете заплатить за консультанта, будет зависеть от того, сколько это будет стоить вам, если данные будут украдены.

О, и никогда вызовите ваш ключ key[], который просто запрашиваетбеда.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...