Как ОС хранят ключи для зашифрованных данных - PullRequest
0 голосов
/ 10 марта 2019

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

Но я хочу знать, как сама система защищает ключи шифрования. Я знаю, что некоторые устройства имеют специальное оборудование для хранения некоторых важных ключей (например, Secure Enclave в чипах Apple). Но я хочу знать, как это будет сделано на обычном компьютере.

Я имею в виду, что они, вероятно, хранят это где-то на диске, но как они делают это безопасно, чтобы вы не могли просто прочитать это?

1 Ответ

1 голос
/ 10 марта 2019

Практически каждое «безопасное хранилище учетных данных» делает это путем шифрования файла хранилища учетных данных на диске с помощью ключа random , дополнительно зашифрованного парольной фразой.Без ключевой фразы вы не сможете получить доступ к ключу, необходимому для расшифровки содержимого.Вы также можете хранить ключ в криптоустройстве (например, смарт-карте NFC или USB-ключе), и они будут защищены собственной системой вызова (парольная фраза, отпечаток пальца и т. Д.).

Фраза-парольполученные от пользователя непосредственно элементами ОС, так что подделать его (например, с помощью веб-сайта) будет сложнее, а также, чтобы ни одно приложение не нуждалось в прямом доступе к хранилищу учетных данных - как только пользователь разблокирует хранилище, приложение может получитьУчетные данные в нем изначально хранятся, и только те.Для этого есть различные механизмы, но наиболее распространенным является использование идентификатора приложения исполняемого файла, который выдает запрос - с дополнительным ограничением, что исполняемый файл должен запускать только подписанные двоичные элементы (без вставки в библиотеку и т. Д.) И не должен подвергатьсяотладка (ОС полностью осведомлена об этом).

Что касается того, как ОС предотвращают утечку открытого текста, пока он остается в памяти?Хах.Это совсем другая история, и существует множество подходов - предотвращение перетекания данных в своп, использование зашифрованного свопинга, дешифрование только тех учетных данных, которые необходимы, и отказ от них, как только они не нужны, с участием ядра в управлении онлайнхранение (в ОЗУ) во время работы системы и использование ядра для выполнения всех криптографических операций, для которых требуется доступ, например, к асимметричным секретным ключам шифра.Ядро может далее передать это аппаратному устройству, в то время как ОС предоставляет унифицированный API независимо от того, где хранятся закрытые ключи.Такие API существуют в OS X и Windows, и, безусловно, в Linux.

Поскольку устройства TPM или USB, такие как устройства чтения криптокарт, могут безопасно хранить закрытые ключи, вместо них действительно полезно использовать личные сертификаты для аутентификации.паролей.Затем устройство с закрытым ключом может подписать запрос с удаленного сервера (например, веб-сайта, поддерживающего сертификаты), и удаленная система проверяет подпись запроса на основе вашего открытого и, следовательно, не конфиденциального сертификата.Побочные заявления: я бы хотел, чтобы финансовые учреждения и повседневные сайты поддерживали личные пароли вместо паролей.Это более безопасно и абсолютно без проблем, и работает на всех платформах - даже мобильных!

...