淘客熙熙

主题:【原创】聊聊这次密码泄露事件 -- 代码ABC

共:💬12 🌺187 新:
全看分页树展 · 主题 跟帖
家园 【原创】继续聊聊这次的泄密事件

好吧,有人提到了备份泄露的问题。确实盗取备份比到IDC机房偷东西要简单很多。有预防手段吗?

有的,只要把备份数据加密就好了。一般备份软件都有一个加密选项可以选择对备份数据进行加密,选择这个选项的话你需要事先提供一个密码。备份软件生成一个秘钥对备份数据进行加密,然后使用你提供的密码对密钥进行保护。没有密码就无法恢复数据,而且备份文件上的内容是加密的。这样数据由于备份被盗而泄露风险将大大降低。

这里先简单明确两个概念:密码和密钥。密码大家都很明白,是一种秘密信息,通常用于身份验证或权限检查。而密钥是加密操作的一个参数,通常加密函数接收两个参数:原文和密钥,输出密文。在密码体系里只要密钥保持秘密那么理论上无法从密文恢复原文(加密函数算法通常是公开的)。一般来说密码是人机交互用的,密钥则是系统内部使用。

要真正实现加密备份其实也不简单。备份动作通常使用脚本自动进行,普通的备份工具就需要把密码写在脚本里面。能偷到备份数据的人,通常也不难拿到这个脚本。即使解决了这个问题,还有这个密码管理的问题。如果一直使用相同密码,那么时间一长还是有泄露的可能,如果每次密码不同那么如何确保做恢复的人能够找到正确的密码也是一件令人头疼的事情。实际上要做好这个工作,纯粹的技术手段是不够的,必须有适合的“体力”手段。

如果不幸整个数据库还是给人偷走了,怎么办?这时一个良好的加密系统就是最后一根救命稻草了。注意我说的是加密系统而不是加密算法,算法只是一个手段。而加密系统的核心之一是如何保证密钥不会被泄露即——密钥管理方法。这里涉及密钥的存放、访问和变更等一系列问题。而大多数系统都是栽在这个问题上,由于服务程序本身需要知道密钥——因为它们有验证密码以及其他访问秘密信息的需求,也就是这些程序需要通过某种渠道获取密钥,如果程序员偷懒把这个密钥存放在配置文件里或直接硬编码在源代码中,那么对于数据库被盗的威胁其实帮助不大。因为能偷数据库的人要得到服务器上的文件或者你的源代码并不困难。原则上密钥必须存放在另外的地方,交给专门的保密员保管。当程序需要这些密钥的时候通过保密员手工输入(或者使用USB-Key之类的东西导入)。高级一点的可以通过加密协议在单独的一台密钥管理服务器上自动获取,而这台密钥管理服务器必须保证物理安全,也就是我们还是要回到所谓的“体力”手段。实际上掌管密钥的无论是人还是机器都必须有适合的制度和措施确保安全,这些安全措施不能光靠代码实现。

以上只是密钥管理部分,而实际中如何使用密钥和加密算法,即密码协议部分则是加密系统的另一个核心内容。

土鳖抗铁牛

通宝推:xtqntd,

本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河