Как Python-брелок реализован в Windows?

Как python-keyring обеспечивает безопасность в Windows?

В GNOME/KDE в Linux пользователю предлагается ввести свой пароль для авторизации доступа к связке ключей для каждого приложения.

В Windows нет такой подсказки, когда приложение обращается к связке ключей. Что останавливает случайное приложение Python для получения пароля из набора ключей, запустив

import keyring
get_password(service, username)

Как осуществляется согласие пользователя? Является ли вся концепция, по крайней мере в Windows, основана на предположении, что все установленные программы являются "доверенными"?

4 ответа

Рассматривая это немного, кажется, что пароли хранятся в хранилище учетных данных Windows, которое является эквивалентом ключей Gnome или KDE. Вы можете увидеть те, которые вы сохранили, открыв диспетчер учетных данных Windows. Я попадаю туда, просто набирая Credential Manager на Windows 8.1 с начального экрана, но я думаю, что вы также можете перейти к нему со страницы учетных записей пользователей.

В любом случае, как вы можете видеть из прикрепленного изображения, пароль, который я добавил в набор ключей в качестве теста, отображается под Windows Credentials->Generic Credentials->keyring_demo, Открытие этого окна, поскольку другой пользователь на ПК не показывает этот пароль, поэтому кажется, что оно защищено от других пользователей. Этот экран также позволяет отозвать или изменить пароли.

Диспетчер учетных данных Windows

Что касается того, как осуществляется согласие, я считаю, keyring будет работать до тех пор, пока ваша учетная запись пользователя Windows находится в системе, но я не знаю особенностей.

Метод менеджера cedential работает, но в моем случае добавьте:

  • интернет-адрес или сеть "myPassGroup"
  • имя пользователя "pass1"
  • пароль "ххх"

затем добавьте еще одну запись, используя тот же сетевой адрес

  • Интернет или сетевой адрес "myPassGroup"
  • имя пользователя "pass2"
  • пароль "ххх"

pass2 ЗАПРЕЩАЕТСЯ ПЕРВЫЙ ВХОД pass1! это серьезный недостаток, так как "адрес в Интернете или сети" используется в качестве имени группы в связке ключей, мне нужно поставить многократный пароль под тем же именем

мое решение состоит в том, чтобы использовать команду Python Direct

  • открыть CMD в Windows
  • введите Python
  • затем введите импорт ключей
  • затем введите keyring.set_password("имя_группы", "пароль", "пароль")
  • затем введите keyring.set_password("groupName", "passKey2", "password2")

Вы можете проверить результат по

  • keying.get_password ("groupname", "passKey")
  • keying.get_password ("имя_группы", "passKey2")

Я знаю, это будет работать, но все еще изо всех сил, чтобы найти, где фактические данные сохраняются

Я использовал следующую команду, чтобы выяснить,

  • python -c "import keyring.util.platform_; print (keyring.util.platform_.config_root ())"

  • python -c "import keyring.util.platform_; print (keyring.util.platform_.data_root ())"

data_root в моем случае это "C:\Users\JunchenLiu\AppData\Local\Python Keyring" Я проверил папку, она не существует... она должна быть где-то сохранена. Может быть, кто-то может понять это.

но мое решение должно работать в Windows

Это из github python-keyring. Я полагаю, что для Windows существует аналогичная проблема, как и для MacOS, хотя на веб-сайте говорится, что анализ не был завершен.

Вопросы безопасности

У каждого встроенного бэкэнда могут быть соображения безопасности, которые необходимо понять перед использованием этой библиотеки. Авторам инструментов или библиотек, использующих связку ключей, рекомендуется учитывать эти опасения.

Как и любой список известных проблем безопасности, этот список не является исчерпывающим. Дополнительные проблемы могут быть добавлены по мере необходимости.

      macOS Keychain
        Any Python script or application can access secrets created by keyring from that same Python executable without the operating system prompting the user for a password. To cause any specific secret to prompt for a password every time it is accessed, locate the credential using the Keychain Access application, and in the Access Control settings, remove Python from the list of allowed applications.
from keyring.backend import KeyringBackend

class SimpleKeyring(KeyringBackend):
    """Simple Keyring is a keyring which can store only one
    password in memory.
    """
    def __init__(self):
        self.password = ''

    def supported(self):
        return 0

    def get_password(self, service, username):
        return self.password

    def set_password(self, service, username, password):
        self.password = password
        return 0

    def delete_password(self, service, username):
        self.password = None
Другие вопросы по тегам