[英]Storing Passwords in reversible form
我有一个PHP应用程序需要运行bash脚本,并提供用户名和密码(用于远程系统)。 我需要将这些凭据存储在我的PHP(Web)应用程序可访问的某个位置。 逻辑位置是数据库(目前是MySQL,但是不可知)。 散列和存储凭证的“标准”方式的问题在于它是不可逆的。 我必须能够以未加密的明文形式获取凭证,以便能够将数据插入到bash脚本中。
有没有人有任何建议可以安全地解决这个问题?
我想也许是PKI的凭证,并将结果存储在DB中。 然后使用私钥解密(PHP可以做到这一点)。 存储脚本以在Web根目录外执行此操作。
任何想法都非常感激。
首先,说明(希望)明显,如果你可以以任何方式避免存储用户名和密码这样做; 这是一项重大责任,如果您的凭据存储被破坏,它可能会为同一用户提供访问许多其他地方(由于密码共享)。
其次,如果您必须使用不可逆的盐渍加密哈希来存储凭证,而不是存储密码,那么如果您的数据受到损害,则密码不能轻易地进行逆向工程,并且根本不需要存储解密密钥。
如果必须存储可解密的凭据:
如果没有必要使用用户名来查找帐户记录(在您的情况下不是这样),请加密用户名和密码。 如果您对两者进行加密,请将它们加密为一次加密运行,例如
userAndPass =(用户+ “:” +传);
encryptInit();
加密(盐);
加密(userAndPass);
密文= encryptFinal();
并存储奇异的blob,这样就可以减少短密码文本的出现,这些密文更易于破解,用户名还可以进一步密码。
PS:我不用PHP编程,因此无法在该环境中评论合适的加密s / w。
你需要研究好的双向加密方法,我的一般经验法则是:
因此,找到一个经过充分验证的良好实现,并利用它。
这里可能有一些很好的信息:
检查这个库: PECL gnupg它为您提供了与gnupg交互的方法。 您可以使用安全的公钥加密算法轻松加密和解密数据。
我建议您不要存储密码,而是通过生成ssh密钥并将公钥存储在远程系统的authorized_keys文件中,使用从主机到远程系统的无密码ssh连接。 然后,您只需要在配置期间建立连接。 不可否认的是,并没有完全回答你的问题,但是以可逆的形式存储密码对于安全漏洞来说是一个滑坡,尽管我确信聪明的大脑可以使它安全。
一个简单的入门方法是使用mysql的ENCODE()和DECODE()函数。 我不知道下面使用了什么算法,但它很容易使用:
INSERT INTO tbl_passwords SET encoded_pw = ENCODE('r00t', 'my-salt-string');
和
SELECT DECODE(encoded_pw, 'my-salt-string') FROM tbl_passwords;
如果你去PKI,我会,确保你保护你的私钥! PKI提供的强大加密功能与密钥一样安全。
我认为你是目标。 看看GPG是否有一个好的开放式加密库
看起来你几乎有两种方法可以做到这一点:
1)与您建议的一样,使用加密算法或算法,然后可以解密并用于脚本中的身份验证。 您可以使用PHP中的MCrypt库来完成此任务。
2)根据所需的安全级别和脚本的漏洞级别,您可以使用安全散列,密钥或其他一些难以猜测的唯一标识符,您可以使用该标识符在脚本范围内劫持每个用户的帐户。
正如许多人所述,您需要加密用户名和密码。 我建议您查看php的mcrypt扩展名以进行加密/解密。
我想我将研究使用从Web应用程序中即时嵌入的凭据来编译PHP脚本。
我会要求提供凭据(用于给定用途),然后创建并编译一个新的PHP脚本,仅供此用户使用。 这样,脚本只会做我需要的,而且不应该是“可读的”。 我认为这听起来是最安全的方法。
将尝试使用Roadsend。 http://www.roadsend.com/
为了跟进使用MySQL编码和解码功能的建议,手册对这些工作方式含糊不清 :
加密的强度取决于随机生成器的好坏程度。 它应该足够短串。
但我建议你可以使用内置的MySQL 5.0 AES函数 ; AES_ENCRYPT()
和AES_DECRYPT()
SELECT AES_ENCRYPT('secret squirrel', '12345678') AS encoded
=> ØA;J×ÍfOU»] É8
SELECT AES_DECRYPT('ØA;J×ÍfOU»] É8', '12345678') AS decoded
=> secret squirrel
这些使用128位AES,对于大多数用途来说应该足够强大。 正如其他人评论的那样,使用盐值和具有高熵的密钥是一种很好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.