iPhone NSString перезаписать конфиденциальные данные нулями - PullRequest
1 голос
/ 24 февраля 2011

Мое приложение временно хранит много конфиденциальных данных, и я хочу снова перезаписать данные в памяти.

Я нашел пост, ранее предлагавший это:

char* block = malloc(200);
NSString* string = [[NSString alloc] initWithBytesNoCopy:length:encoding:freeWhenDone];
//use string
memset(block, 0, 200);// overwrite block with 0
[string release];
free(block);

но это не работает для меня. Потому что я собираю данные разными способами. Например:

mySensibleString = [anotherString substringWithRange:NSMakeRange(5,15)];

или даже получить его через HTTPS-соединение:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to receivedData.
    // receivedData is an instance variable declared elsewhere.
    [receivedData appendData:data];
}

Поэтому мне интересно, есть ли способ найти конфиденциальные данные, хранящиеся в объекте в памяти, узнать их длину и перезаписать эту память (неважно, насколько это сложно)?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Слишком много неизвестных, чтобы оправдать такие усилия. Вы не знаете, каким путем прошли данные маршрута до того, как они до вас дошли, и где копии были оставлены в памяти, но не вычищены и т. Д.

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

Очевидно, что данные записываются на диск - это другой вопрос, который стоит рассмотреть.

Итог: действительно ДЕЙСТВИТЕЛЬНО важные данные, вероятно, просто не должны находиться рядом с iPhone (и, возможно, с некоторыми другими интеллектуальными устройствами для загрузки).

1 голос
/ 25 февраля 2011

Что если вы зашифруете любые данные, которые хранятся в куче?Таким образом, каждый раз, когда вы сохраняете что-то в переменной или структуре данных, передавайте это через шифр.И тогда, когда вы захотите использовать его, просто расшифруйте его.

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

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