所以下面的评论有点太长了......
也许退后一步,比较预防性和检测性控制的好处可能会有所帮助。预防性控制包括加密,但您也可以对密码进行编码以使其不那么明显。这种方法旨在保护密码不被意外共享(b32 编码会产生不太有意义的字符(b32 产生的字符串比 b64 长)。这种方法只会增加记忆随机数字序列的难度以及应该用于解码字符串。Base32/64 编码是一种保护密码的简单方法,不需要构建/维护额外的逻辑。
预防性控制的其他方法可能会使用加密。有许多不同的方法来保护密钥。无需深入了解细节或重申 DW 已经发布的内容,您可以分层检测控制以改善安全状况。例如,您可以审核对包含密钥的文件的访问。您可以将事件(例如重新启动服务器/服务)与对密钥文件的访问相关联。对密钥文件的任何其他访问请求(成功与否)都可能表明活动异常。
为了回答你的问题,这是我的看法:
如果您必须将密码存储在配置文件中,我建议至少在可能的情况下对密码进行编码。对密码进行编码将减少在有人滚动文件时泄露的机会,例如在供应商支持代表观看的情况下。加密密码更安全,但这需要额外的复杂性。
如何处理密钥必须被硬编码或存储在另一个文件中的事实。好吧,将加密密钥分离到另一个文件中会增加某人查看密钥的难度。例如,您可以使用访问控制来限制对密钥文件的访问,但仍为配置文件维护更开放的 ACL。同样,您可以对密钥文件的访问实施审计,您可以使用该文件将需要使用密钥的事件关联回。如果您限制对二进制文件的访问,对密钥进行硬编码可能会很好。通过对二进制文件运行“字符串”可以很容易地检测到密码的仔细编码。您可以在解码密码时对硬编码密码进行编码/加密(即需要单独的功能(可能带有审核),但这会增加开发人员和管理员的复杂性(即
密码的加密密钥应该是人类可读的吗?这取决于。保护密钥的方法有限。加密密钥通常被视为难以写入内存的字母数字字符串。您始终可以对密钥进行编码/加密,但这些方法并不能阻止聪明到可以截屏的人。但是,您可以使用简单的“键”(更像是密码)作为键扩展功能的输入。在这些情况下,相对于复杂性的成本,编码等额外措施可能会增加一些额外的价值。
如果有的话,一个好的方法是实现多层控制。预防性控制更加困难,而检测性控制通常更容易实施。分离关键文件可以简化控制的整体架构和实施。无论使用预防性控制还是检测性控制,都必须启用一些审计功能以及审查审计日志。这样,如果发生不可能的事情(访问密钥),您可以采取纠正措施。