2014-04-01 9 views
1

У меня есть важное сохранение файла в каталоге документов моего приложения. Я не разрешаю другим просматривать его содержимое, поэтому я шифрую файл с автогенерированным ключом AES и шифрую этот ключ AES с открытым ключом RSA, а затем сохраняю зашифрованный ключ AES в NSUserDefaults.Безопасно ли писать секретный ключ RSA в моем коде

При использовании важного файла я заберу зашифрованный ключ AES и расшифрую ключ AES с помощью открытого ключа RSA, а затем расшифруйте файл.

Но я не знаю, где хранить закрытый ключ RSA, безопасно ли это записать в моем коде, например, NSString *rsaPrivateKey = @"%^^&*(())";, если нет, есть ли более безопасное решение?

Я знаю, как генерировать RSA публичный и закрытый ключ с использованием OpenSSL (This link helps me)

Edit:

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

+0

Это чувствительный предмет. Невозможно сохранить его локально, и он будет полностью защищен от взлома. Лучше всего это получить его с сервера и сохранить его в цепочке ключей iOS. Получение строкового литерала из программы не очень сложно. – borrrden

+0

@borrrden Спасибо за ответ. Я знаю, что лучше получить его с сервера, но на самом деле у меня нет сервера ... – KudoCC

+0

Если у вас нет сервера, я предлагаю вместо этого использовать '# define' и сделать его C-строкой , Фактически, сделайте это несколько и объедините их вместе в один 'NSString', или даже лучше вы можете создать ключ на UUID, который вы создаете во время выполнения. – borrrden

ответ

1

В принципе вы пытаетесь решить проблему DRM. Пока вы не можете доверять системе времени исполнения, полного решения не существует. Лучше всего хранить ключи в контейнерах, поставляемых в системе, и надеяться, что они хорошо защищены (т. Е. Ключевая цепочка iOS, о которой уже упоминалось).

Если это не удается, вы можете зашифровать ключ RSA ключом AES, сгенерированным из некоторой статической информации в устройстве. Это следует рассматривать как обфускацию, а не шифрование, поскольку ключ не секрет. Вероятно, вы должны попробовать использовать стандартный формат контейнера, такой как PKCS # 8, для шифрования ключей.

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

+0

Хорошо, так как важный файл открыт для самого пользователя, поэтому использование ключевой цепи должно быть хорошим решением. Но проблема, с которой я столкнусь, заключается в том, как создавать публичные и закрытые ключи RSA во время выполнения. Есть ли у вас предложения. Благодарю. – KudoCC

+0

Вопрос действительно будет, если вам все еще нужна пара ключей RSA. Вы можете также зашифровать симметричный ключ ключом из цепочки. Пока все остается на одном устройстве, нет необходимости в PKI. –

+1

Да, как глупо я !!! :) – KudoCC

Смежные вопросы