шифрование паролей в приложениях для iPhone

#iphone #encryption

Вопрос:

Мне нужно сохранить пароль пользователя в моем приложении для iPhone.

При размещении приложения в app Store я должен сообщить Apple, есть ли в приложении шифрование для целей экспорта.

Я не хочу, чтобы мое приложение было ограничено только НАМИ, но я также не хочу хранить или отправлять пароли по сети открытым текстом.

Итак, в основном вопрос в том, могу ли я зашифровать пароли таким образом, чтобы мое приложение не было ограничено?

Ответ №1:

Просто сохраните пароль в связке ключей. Это системный API, который предоставляет Apple, и вам не нужно ничего знать о шифровании. Apple отправляет его, и они несут ответственность за обеспечение соответствия экспорта системным рамкам. Предположительно, они используют более слабое (или вообще не используют) шифрование, если они продают устройство в любом месте, где это запрещено, но если вы используете доступные API, вы не будете отправлять криптографический код с ограниченным экспортом в своем двоичном файле, и единственный способ, которым вас можно было бы интерпретировать так, означал бы, что Apple отправляет его с каждым iPhone.

Сказав это, я не юрист, я рекомендую проконсультироваться с ним, если вас это беспокоит. Никакое количество советов других программистов не имеет особого отношения к тому, что по сути является юридическим вопросом.

Комментарии:

1. Я спросил, будет ли использование связки ключей означать необходимость объявить, что вы используете шифрование на технической конференции в прошлом году, и ответ был: «Мы не знаем».

Ответ №2:

Похоже, что поставляемую функцию crypt() можно использовать для паролей:

Эта библиотека (FreeSec 1.0) была разработана за пределами Соединенных Штатов Америки в качестве бесплатной замены библиотеки шифрования libcrypt только в США. Программы, связанные с интерфейсом crypt (), могут быть экспортированы из США только в том случае, если они используют crypt() исключительно для целей аутентификации и избегают использования других программных интерфейсов, перечисленных выше. В библиотеке была проявлена особая осторожность, чтобы программы, использующие только интерфейс crypt (), не привлекали другие компоненты.

(из документации по iphone для crypt(3))

Комментарии:

1. если они используют crypt() исключительно в целях аутентификации… Я не верю, что вы правильно прочитали справочную страницу. Аутентификация-это не шифрование. Аутентификация никогда не была ограничена (IIRC) — только шифрование. Например, большой, толстый модуль RSA: если используется для подписи RSA, никаких проблем. Используйте те же самые большие модули для шифрования, и вы должны соблюдать правила экспорта. Кстати, если у вас есть симметричный шифр, который использует 63-битные ключи, все в порядке. При 64 битах вам необходимо обратиться в Министерство торговли за лицензией — см. bis.doc.gov/encryption/massmarket_keys64bitsnup.html .

Ответ №3:

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

Для безопасной связи вам следует использовать SSL, который, вероятно, находится в библиотеке, которая уже есть в телефоне. Если вы используете библиотеку, которая является частью операционной системы телефона, я не думаю, что это означает, что ваше приложение «содержит шифрование».

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