2010-11-12 3 views
3

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

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

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

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

EDIT

Хорошо я понимаю сво плохая идея, чтобы использовать пользователи SSH ключ для вещей, как это. Вместо этого теперь я просто использую кодировку base64, как описано здесь: How does one encode and decode a string with Python for use in a URL? , конечно же, это не сохраняется, когда кто-то читает мой скрипт на питоне. Но для меня это достаточно, не нужно сохранять пароль как обычный текст.

+2

Хешинг! = Шифрование. Хеш-функции не нужны секретные ключи. – stefanw

+0

Хеширование может включать в себя секрет, но это не позволяет вам восстановить хешированный материал. – MattH

+0

спасибо, изменил терминологию (я имел в виду просто шифрование/дешифрование) – ifischer

ответ

5

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

Ваш аргумент для использования ключа 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 encode пароль, так что это не простой текст, но если мы предположим, что злоумышленник может читать и редактировать ваш скрипт, единственное, что защитит пользователя, - это тот, кто не может прочитать файл, содержащий зашифрованный пароль ,

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

+0

Механизм не должен быть «полностью защищен», у меня просто плохое чувство для хранения пароля в виде обычного текста. Может быть, кто-то получает доступ к моему домашнему каталогу (например, администраторы в моей рабочей области), тогда я хочу, чтобы его не так просто было получить пароль. – ifischer

+0

Во-первых, см. Комментарий выше - вы имеете в виду хеширование, которое является односторонней операцией или шифрованием, которая является двухсторонней? А во-вторых, если администраторы в вашем рабочем пространстве могут войти в систему как «root», они могут читать любой файл, который им нравится, включая все в вашем каталоге '.ssh'. –

+0

исправил терминологию, я имел в виду шифрование. хорошо, поэтому я думаю, что это плохая идея сделать это так. Но есть ли способ получить «немного» больше безопасности, чем просто сохранить его как обычный текст (и только с правом доступа к нему) – ifischer

2

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

№:

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

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

Как указывает Дейв Вебб, ваша предпосылка, что файл закрытого ключа доступен только для чтения, а не сам зашифрован. Вы переходите от «protected by filesystem user-read-only» к «защищенному другим файлом, который доступен только для пользователей».

+0

ОК. есть ли какой-либо другой способ получить «немного» больше безопасности, чем просто сохранить его как обычный текст (и только у пользователя, имеющего право доступа к нему)? – ifischer

+0

Теперь я использую кодировку/декодирование base64, см. Мое редактирование. – ifischer

Смежные вопросы