Используйте ключ ssh для шифрования и дешифрования пароля - PullRequest
4 голосов
/ 12 ноября 2010

Мой python-скрипт (Python 2.6, в Debian Linux) запрашивает у пользователя пароль, который затем сохраняется в домашнем каталоге пользователя.

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

Это хорошая идея использовать для этого закрытый ключ ssh? Как я могу использовать ключ для шифрования строки в Python?

(кстати, я не хочу использовать брелок и тому подобное)

EDIT

Хорошо, я понимаю, что это плохая идея использовать ssh-ключ пользователя для подобных вещей. Вместо этого я сейчас просто использую кодировку base64, как описано здесь: Как можно кодировать и декодировать строку с помощью Python для использования в URL? Конечно, это не сохранить, когда кто-то читает мой скрипт на Python. Но этого достаточно для меня, не нужно сохранять пароль в виде простого текста.

Ответы [ 2 ]

5 голосов
/ 12 ноября 2010

Единственное, что определенно стоит сделать, - это сохранить файл, который может прочитать только пользователь.

Ваш аргумент для использования ключа ssh выглядит примерно так:

  1. Мне нужно сохранить пароль, поэтому я его зашифрую
  2. Если я использую ssh-ключ пользователя для шифрования, это предотвратит расшифровку пароля, даже если у него есть источник моего сценария, потому что только пользователь может прочитать его ssh-ключ.

Если вы храните зашифрованный пароль в файле, только пользователь может прочитать, вы получите то же преимущество, что и при использовании ключа ssh, не беспокоясь о том, чтобы вообще читать ключи ssh пользователя.

Я согласен, что есть некоторая выгода от того, чтобы не хранить пароль в виде обычного текста, чтобы не допустить, чтобы кто-то вошел в систему как root, просто делая:

cat secret-password

чтобы получить пароль, но помните, что в вашем скрипте Python будет легко найти строку, которая говорит:

password = decrypt-password(data)

и добавить следующую строку:

print "The user's password is",password

Что-то вроде os.fchown() сделало бы трюк для защиты файла, так же как и создание файла с правильными разрешениями.

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

Если вы действительно беспокоитесь об этом, просто запрашивайте пароль у пользователя при каждом запуске сценария.

2 голосов
/ 12 ноября 2010

Is it a good idea to use the private ssh key for this?

нет

No:

  • Закрытый ключ может быть защищен паролем сам.
  • Плохо читать секретные ключи пользователя.
  • Может быть изменено независимо от вашего сценария.

Вы также, кажется, путаете свою терминологию. Вы использовали encoding, decoding и hashing, когда я предположил, что вы имеете в виду encrypting и decrypting.

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

...