我使用OpenSSL:加密带有敏感数据的文件
openssl enc -aes-128-cbc -a -d -salt -pass pass:<my_custom_password> -in <file_path> -out "<out_file_path>" -md md5
当然,密码不会存储在回购中。
有时我需要解密这个文件,对它进行更改,将它加密回并推送到repo。
如果我使用超过40个字符的密码,有办法破解我的安全吗?
如果可以避免,最好将敏感数据保存在存储库之外(例如,在CI系统的秘密存储中(。这是因为它通常被复制的次数较少,因此泄漏的可能性较小。
如果你选择一个强大的密码和强大的算法,它在未来很长一段时间内都是安全的。但是,如果你犯了一个错误,意外地选择了一个弱算法,比如RC4,或者你做出了其他一些糟糕的决定,如果不重写你的整个历史,很难撤销。如果你确实选择了一个薄弱的选择,而攻击者掌握了你的存储库(有时确实会发生这种情况(,他们可能会攻击你数据的最弱版本。
至于您选择的算法和工具,没有理由出于任何原因使用MD5,无论它在这种特殊情况下是否很弱。在现代版本的OpenSSL中,默认值是SHA-256,您应该明确指定它。AES-128可以,但由于openssl enc
不支持任何消息完整性,攻击者可以篡改数据。这可能不是问题,因为Git将数据存储在一个很像Merkle树的结构中,只要你能验证你的历史记录是完整的,你就可以检测到它。
因此,虽然您所做的是可以的,并且通常用于大型机密,但如果可能的话,最好将其存储在存储库之外的专用机密存储中。
这可以概括为一个问题:是否存在完全安全的哈希/加密?答案是否定的。
这也可以概括为";X安全吗"答案也是no。
假设不安全,假设有一个聪明、有动机、恶意的黑客正在积极投入无限的资源来收集你的数据,然后尽可能地进行最安全的设置。
当你完成后,定期重新评估你的安全性,以确定你是否可以改进它。
这是有平衡的:
如果您的安全性非常强,以至于您和您的员工几乎不可能访问,并且严重阻碍了您的生产力,那么您可能需要想一种更好的方法来实现您的安全目标,或者进行一些权衡。
安全的重要心态是,没有什么是真正安全的。如果你认为你的数据是安全的,你就会变得自满,这种自满会导致数据泄露。