#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, который, вероятно, находится в библиотеке, которая уже есть в телефоне. Если вы используете библиотеку, которая является частью операционной системы телефона, я не думаю, что это означает, что ваше приложение «содержит шифрование».
Конечно, я не юрист. Кто знает — закон может посчитать «свиную латынь» допустимой технологией шифрования.