【问题标题】:Use ssh key to encrypt and decrypt a password使用 ssh 密钥加密和解密密码
【发布时间】:2011-05-09 01:55:22
【问题描述】:

我的 python 脚本(Python 2.6,在 Debian Linux 上)要求用户输入密码,然后将密码保存在用户主目录中。

因为我不想将密码保存为纯文本,所以我想以某种方式对其进行加密。所以我想也许我可以使用用户的(私有)ssh-key 来加密和解密保存在文件中的密码,这样只有有权访问私有 ssh 密钥的人才能解密保存的密码。

为此使用私有 ssh 密钥是个好主意吗?如何在 python 中使用密钥加密字符串?

(顺便说一句,我不想​​使用钥匙圈之类的东西)

编辑

好的,我知道使用用户 ssh 密钥来处理类似的事情是个坏主意。 相反,我现在只使用 base64 编码,如下所述: How does one encode and decode a string with Python for use in a URL? 当然,当有人阅读我的 python 脚本时,它不会保存。但这对我来说已经足够了,不必将密码保存为纯文本。

【问题讨论】:

  • 散列 != 加密。哈希函数不需要私钥。
  • 散列可以包含一个秘密,但它不能让你恢复散列的材料。
  • 谢谢,更改了术语(我的意思只是加密/解密)
  • 为什么还需要存储一个秘密(密码)?
  • 脚本打开一个安全的网页,用户必须在其中使用他的凭据。为了在用户每次运行我的脚本时不打扰用户输入密码,我希望在用户第一次输入后将其永久保护。

标签: python ssh-keys


【解决方案1】:

唯一值得做的事情是存储只有用户可以阅读的文件。

您使用 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 密码所以它不是纯文本,但是如果我们假设攻击者可以读取和编辑您的脚本,那么唯一可以保护用户的是攻击者无法读取包含加密的文件密码。

如果您真的对此感到担心,只需在每次运行脚本时提示用户输入密码即可。

【讨论】:

  • 该机制不必是“完全安全的”,我只是不喜欢将密码存储为纯文本。也许有人可以访问我的主目录(例如我工作区的管理员),然后我希望获得密码并不那么容易。
  • 首先看上面的评论 - 你的意思是散列是一种单向操作还是加密是一种双向操作?其次,如果您工作区的管理员可以以root 身份登录,他们可以读取他们喜欢的任何文件,包括您的.ssh 目录中的所有内容。
  • 更正了术语,我的意思是加密。好的,所以我想这样做是个坏主意。但是有没有什么办法比将它保存为纯文本(并且只有用户有权访问它)获得“一点”更多的安全性
  • base64 对除肩冲浪者以外的任何事物提供绝对零安全性。如果操作系统权限不足以解决安全问题,那么您需要真正的加密或散列机制。
  • 你是对的。但是,无论安全与否(它不是“那个”重要的),我现在感觉更好的是密码没有保存为纯文本。
【解决方案2】:

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

没有:

  • 私钥本身可以受密码保护。
  • 读取用户密钥的形式很糟糕。
  • 可以更改它而无需考虑您的脚本。

您似乎也混淆了您的术语。你用过encodingdecodinghashing,而我认为你的意思是encryptingdecrypting

正如 Dave Webb 所指出的,您的前提是私钥文件对用户是只读的,并且本身没有加密。您将从“受文件系统用户只读保护”变为“受另一个用户只读文件保护”。

【讨论】:

  • 好的。除了将其保存为纯文本(并且只有用户有权访问它)之外,还有其他方法可以获得“一点”更多的安全性吗?
猜你喜欢
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2022-11-06
  • 2016-10-15
相关资源
最近更新 更多