Чтение онлайн

ЖАНРЫ

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

security dump-keychain login.keychain | grep «password» — i

Аргумент dump-keychain для команды security в окне терминала дампирует все содержимое связки ключей в стандартный вывод. Для поиска паролей мы применили команду grep. Вывод этой команды может получиться примерно таким, как в следующем примере, в зависимости от того, какие пароли запомнил ваш компьютер:

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="AirPort network password"

«desc»<blob>="Web form password"

«desc»<blob>="Web form password"

«desc»<blob>="Web form password"

«desc»<blob>="Web form password"

Хорошо,

все это очень интересно, но зачем я об этом рассказываю, как все это связано с iOS? Оказывается, что в архитектурном отношении связка ключей в iOS очень похожа на связку ключей в OS X, так как операционная система iOS создавалась на основе исходного кода OS X. Многие концепции iOS похожи на соответствующие элементы OS X, это касается и связки ключей. Необходимо отметить ряд очень важных аспектов, связанных со связками ключей в iOS, — в частности, поговорить о группах доступа и сервисах. Чтобы упростить вам изучение этой темы, я объясню, как эти концепции реализуются в OS X, а потом мы подробнее рассмотрим вариант связки ключей, применяемый в iOS.

На компьютере Mac нажмите клавиши Command + Пробел или просто нажмите значок Spotlight (Поиск) на верхней панели меню на экране (рис. 8.1).

Рис. 8.1. Нажмите значок Spotlight на панели меню для OS X

Когда откроется строка поиска, введите в нее запрос Keychain Access и нажмите Enter, чтобы открыть программу Keychain Access. В левой части окна этой программы находится область Keychains (Связки ключей). В ней выберите регистрационную связку ключей login, а затем в области Category (Категория) слева — запись Passwords (Пароли). Теперь перед вами должен открыться примерно такой интерфейс, как на рис. 8.2.

Рис. 8.2. Программа Keychain Access в Mac OS X

Keychain Access — это программа с графическим пользовательским интерфейсом, которая выстроена в OS X на базе интерфейсов API для работы со связкой ключей и обеспечения безопасности. Этот красивый и удобный интерфейс скрывает большую часть тех сложностей, которыми отличаются фреймворки безопасности в OS X. Теперь, если в системе есть какие-либо пароли, сохраненные в приложениях, например в Safari, вам потребуется дважды щелкнуть на одной из записей-паролей в правой части экрана. Откроется такое диалоговое окно, как на рис. 8.3.

Рис. 8.3. Диалоговое окно Keychain Access, в котором отображается информация о сохраненном пароле

Познакомимся с некоторыми свойствами пароля, показанного на рис. 8.3.

• Name (Имя) — имя пароля, присвоенное ему приложением, сохранившим этот пароль. Так, в данном

случае мы имеем дело с паролем для входа в беспроводную сеть 206-NET. Это имя иногда называют подписью.

• Kind (Вид) — вид элемента. В данном случае пароль относится к виду «пароль для беспроводных сетей». Это обычная строка, ее можно использовать для выполнения запросов к связке ключей (рассмотрено далее).

• Account (Учетная запись) — обычно это ключ для того значения, которое мы хотим сохранить. Связка ключей использует хранилище для пар «ключ/значение», так же как словарь из языка Objective-C. Ключ — это произвольная строка, и большинство приложений, сохраняющих элементы в связке ключей, хранят ключи и значения именно в этой секции.

• Where (местоположение) — часто именуется сервисом. Это идентификатор сервиса, сохранившего данный элемент в связке ключей. Этот идентификатор — как раз тот пароль, который вы запоминаете, и связка ключей фактически не имеет с ним дел, так как вы считаете этот пароль осмысленным. В iOS принято задавать в качестве имени этого сервиса идентификатор пакета нашего приложения. Так мы отличаем данные, сохраненные в конкретном приложении, от сохраненных данных из других приложений. Подробнее поговорим об этом в дальнейшем.

Кроме того, вы видите на рис. 8.3 флажок Show Password (Показать пароль). Если установить этот флажок, система будет запрашивать разрешение на показ пароля к конкретному элементу. Если вы введете свой пароль и дадите такое разрешение, то программа Keychain Access получит для вас защищенный пароль и отобразит его на экране.

Мы можем использовать команду security в окне терминала для выборки ровно той же информации. Если ввести в окне терминала следующую команду:

security find-generic-password — help

то получится примерно такой вывод:

Usage: find-generic-password [-a account] [-s service]

[options…] [-g] [keychain…]

— a Match «account» string

— c Match «creator» (four-character code)

— C Match «type» (four-character code)

— D Match «kind» string

— G Match «value» string (generic attribute)

— j Match «comment» string

— l Match «label» string

— s Match «service» string

— g Display the password for the item found

— w Display only the password on stdout

If no keychains are specified to search, the default search list is used.

Find a generic password item.

Итак, если передавать команде security требуемые параметры один за другим, то можно получить свойства интересующего вас пароля (см. рис. 8.3):

security find-generic-password

— a «AirPort»

— s «com.apple.network.wlan.ssid.206-NET»

— D «AirPort network password»

— l «206-NET»

— g login.keychain

Как было показано ранее, команда — g запросит команду security отобразить пароль, ассоциированный с указанным элементом (при наличии такого пароля). Следовательно, после ввода этой команды в окно терминала вам будет предложено ввести пароль к вашей учетной записи перед продолжением работы. Аналогичным образом мы указывали пароль к учетной записи, чтобы отобразить пароль на рис. 8.3.

Поделиться с друзьями: