Сохранять и извлекать закрытый ключ из брелка Mac программно - PullRequest
6 голосов
/ 29 июня 2011

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

Я могу добавить закрытый ключ в цепочку ключей, используя метод "SecKeychainItemImport" из "Security.framework", но у меня возникают проблемы с получением секретного ключа из цепочки для ключей. Я пытался использовать методы "SecKeychainItemCopyAttributesAndData" и "SecKeychainItemCopyContent" для получения секретного ключа обратно из цепочки для ключей. Но пока не повезло.

Я также читал в блогах о том, что хранилище закрытых ключей находится внутри скрытой папки ".ssh". Но я чувствую, что хранение закрытого ключа внутри цепочки для ключей обеспечивает еще один уровень безопасности, так что кто-то еще не может иметь легкий доступ к закрытому ключу.

Ответы [ 2 ]

4 голосов
/ 30 октября 2011

Одной из целей цепочки для ключей является защита закрытых ключей, не предоставляя их данные приложению.Чтобы предотвратить случайное раскрытие секретного ключа, эти элементы помечены CSSM_KEYATTR_EXTRACTABLE | CSSM_KEYATTR_SENSITIVE по умолчанию;то есть их можно получить только с использованием SecKeychainItemExport и только в формате, защищенном парольной фразой.

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

Если по какой-то причине вам необходим доступ к необработанным битам закрытого ключа, вам необходимо подготовиться к этому во время импорта закрытого ключа вбрелокВам необходимо установить keyAttributes в CSSM_KEYATTR_EXTRACTABLE (т.е. без чувствительного бита) в параметре keyParams SecKeychainItemImport.

0 голосов
/ 29 июня 2011

Да, брелок - это то, что вы использовали бы здесь.Сначала вы хотите прочитать документацию, а затем посмотреть пример кода Apple.

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html

http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html

...