Есть ли способ получить доступ к связке ключей в Windows без указания мастер-пароля?

Я разрабатываю сценарий с коллегой, который включает в себя подключение к базе данных. Мы хотим, чтобы код не зависел от того, какой из нас его использует, сохраняя при этом наши пароли в секрете и не требуя аутентификации снова и снова в течение рабочего дня. После некоторого поиска (мы оба новички в Python) кажется, что мы можем использовать связку ключей для этой цели, поэтому я установил ее из pip (наиболее вероятной версии 1.2.2 библиотеки, основываясь на моей памяти о дате установки).

Проблема в том, что когда я пытаюсь получить доступ к моим сохраненным паролям, мне предлагается установить мастер-пароль для доступа к связке ключей, как показано здесь (из IDLE):

>>> import keyring
>>> keyring.set_password('Service', 'MyUsername', 'MyPassword')

Warning (from warnings module):
  File "C:\Python27\lib\getpass.py", line 92
  return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
Please enter password for encrypted keyring:

После установки пароля я могу легко получить и установить пароли, пока не перезапущу оболочку. Теперь мне нужно снова ввести мастер-пароль:

>>> ================================ RESTART ================================
>>> import keyring
>>> print keyring.get_password('Service', 'MyUsername')

Warning (from warnings module):
  File "C:\Python27\lib\getpass.py", line 92
    return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
Please enter password for encrypted keyring:

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

После поиска решений, похоже, что брелок для ключей будет автоматически аутентифицироваться в Unix, если мастер-пароль совпадает с паролем для учетной записи пользователя, но это не сработало для меня в Windows.

Пытаюсь ли я заставить брелок сделать что-то, для чего он не предназначен, или в моей реализации просто ошибка?

Похоже, мой опыт противоречит тому, о котором сообщил другой пользователь, который утверждает, что ему не предлагается пароль, когда приложение пытается получить доступ к связке ключей в связанном вопросе. Как работает python-keyring в Windows?

1 ответ

Какой бэкэнд вы используете? Проверьте с помощью:

>>> from keyring import get_keyring
>>> get_keyring()
[... what is output here?]

Если это выводит это:

<keyring.backends.file.EncryptedKeyring object at 0x.....>

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

Лично для меня более важно, чтобы мои сценарии выполнялись без присмотра, чем чтобы мои пароли были безопасными, поэтому я написал эту функцию:

def configureKeyring():
    """
    EncryptedKeyring requires a master password to unlock it, which is not ideal
    for our scripts since we want them to run unattended. So if we're using
    EncryptedKeyring, automatically swap to a PlaintextKeyring instead.

    If we're using something else, say WinVaultKeyring, then that's more secure
    than PlaintextKeyring without being any less convenient, so we'll use it.
    """
    from keyring               import get_keyring, set_keyring
    from keyring.backends.file import EncryptedKeyring, PlaintextKeyring

    if isinstance(get_keyring(), EncryptedKeyring):
        set_keyring(PlaintextKeyring())

Прежде чем использовать keyring в set_password или же get_password, запустите эту функцию configureKeyring(), если вы, как и я, цените необходимость вставлять мастер-пароль, а не сохранять свои пароли в безопасности. Пожалуйста, поймите, что для безопасности вы храните свои пароли в незашифрованном виде, прежде чем делать это.

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

Другие вопросы по тегам