加密困境:为何现代加密工具仍处于“石器时代”?

本文作者回顾了寻找适用于多平台、支持多密钥集、并能与云存储高效同步的透明加密工具的历程。文章详细探讨了单容器、文件级和文件级容器三种加密模式的优劣,并指出当前加密工具在易用性与功能集上仍存在巨大缺口,呼吁社区关注加密技术的实际可用性问题。

引言

首先,祝大家新年快乐!我希望2016年是一个美好、健康、充满乐趣、欢乐、精力和许多惊喜的一年。

我记得曾经我所有的数据都能装进一张软盘里。10倍容量的那种。最早的笔记本电脑看起来(感觉起来)就像是带轮子的大型机,整个互联网的内容或许可以存进一块硬盘里。

时代变了。技术让我们实现了真正的移动性。“移动”不再只是一个设备,而是一种理念,一种生活方式。我们已经习惯了随时随地访问任何东西;因此,对我们大多数人来说,“把软盘锁在桌子里以保证安全”已经不再是一个可行的选择。数字化和便携性的增强伴随着暴露和风险的增加。现在是2016年,幸运的是,我们已经找到了保护我们东西安全的方法,对吧?

人们常说,“加密你的东西”。加密你的通信,加密你的数据。加密、加密、再加密。我们听这话已经好几年了,所以技术应该也准备好了,对吧?

随着数据量和数据重要性的增加,并且作为一个经常旅行的人,几年前我决定开始使用“云”存储作为我的主要备份方式。需要说明的是,我认为“云”就是“别人的电脑”,因此——根据定义——是一个我不信任的地方。此外,使用云存储并不完全是因为我频繁旅行,而只是一种便捷的异地存储数据(和备份)的方式。它解决了许多问题,但也带来了新的挑战:解决“信任”问题。

当然,我使用全盘加密。小菜一碟。几乎所有的操作系统都允许你开箱即用地做到这一点,在某些情况下,你的硬盘甚至原生支持。但猜猜看,当我的数据同步到云端时,这并不能真正保护我的数据。此外,一旦我的笔记本电脑在运行,硬盘加密除了让我的机器变慢之外(叹气),并没有多大作用。总的来说,这(以及分层防御)可能是一件明智的事情,但一旦你想使用你的设备,它就解决不了任何问题。

需求

所以我认为我需要额外的加密软件。我卷起袖子(好吧,其实没有),然后打开了谷歌。我的需求很简单明了:

  1. 我有不同的数据集。我希望为每个数据集使用不同的密钥/密码,并且希望能够在我想要的时候打开/关闭一个数据集。我认为这是一个重要的功能,因为我不想让我的所有数据一直处于“打开”状态。此外,每个数据集都值得并且需要自己的密码。(即使你的机器上没有同时存储客户数据和个人数据,我相信你也能想到不用同一个密码处理所有事情的理由。)
  2. 当我的数据被备份/同步到云端并同步回我的第二台笔记本电脑时,我希望确保同步过程尽可能高效。(也就是说,不要浪费带宽,要同步得快。)
  3. 我同时使用Windows和Mac(OSX)设备。
  4. 尽管我懂一点点技术,但我更喜欢用户友好且尽可能透明的操作方式。(也就是说,当我打开一个“数据集”时,我只希望它能与我的系统其他部分集成,而不需要我施展黑魔法、巫术、做两个后空翻或者用光剑插屁股才能使用数据。)
  5. 并非我所有的数据都需要同步到云端。事实上,我不希望某些数据被同步到任何地方。
  6. 我不介意为工具付费。天下没有免费的午餐。

可选方案

查看可用的应用程序,我发现了主要有3种选项或模式:

  1. 单容器模式:应用程序创建一个单一的(大)加密文件,并允许我打开(解密)该文件。解密后,这个大文件会作为一个虚拟驱动器挂载,我可以以透明的方式使用它。
  2. 文件模式:该工具与文件系统上现有的文件交互,我需要手动就地加密和解密每个文件。
  3. 文件级容器模式:或许有更好的术语来形容这种模式,但类似于容器模式,应用程序创建一个虚拟驱动器,让我可以透明地访问我的数据。主要区别在于,每个文件和文件夹都由应用程序在后台单独加密(而不是存储在一个大文件中),因此所有加密的文件和文件夹都以单个文件的形式存储在文件系统上。

哪个是最好的?嗯,这取决于你怎么看。让我们暂时把加密部分从等式中去掉。让我们假设(仅仅为了简化)没有后门,隐私和加密方面都得到了正确实现并且可信……当然,我这么说只是为了避免一场我不会赢、不能赢、甚至不想赢的讨论,因为你们所有的论点可能都是对的。既然这些论点可能对所有应用程序都成立,我们也可以把它们抽象掉。

那么——让我们只关注功能需求和工具的可用性。(毕竟,无论我们喜欢与否,这些标准决定了人们是否会使用它。)我决定尝试一堆工具,测试了所有3种模式,并试图找到满足我简单需求的最佳模式。

单容器模式 基于容器的方法(TrueCrypt, VeraCrypt, …)效果很好。它允许我创建单独的容器,每个容器都有自己的密钥,并且可以在Windows、OSX等系统上运行。挂载容器后,会创建一个虚拟驱动器,让我能够以非常简单的方式与我的数据交互。很棒。不幸的是,由于所有东西都存储在一个单一的大(巨大)文件中,“同步到云端”的备份过程就不那么美好了。每次我对其中一个文件做了更改,都需要将10Gb的文件同步到云端,这并不理想。除此之外,我还(艰难地)发现,使用云备份和恢复功能来恢复已删除的文件也不是那么用户友好。

文件模式 也许基于文件的方法可以解决同步问题。我尝试了几种工具,允许我在需要时加密和解密单个文件。效果不错,但我厌倦了每次都要手动加密/解密。不太用户友好。此外,我发现要找到一个跨平台且相对易用的好工具并不容易。

文件级容器模式 经过一些基本的谷歌搜索后,我找到了一个叫 BoxCryptor(现在叫 BoxCryptor Classic)的工具。试用后,我发现它做得很好,满足了我所有的需求。太好了。根据谷歌搜索结果,它似乎也是唯一满足需求的工具。无论如何,我非常乐意为许可证付费,以(希望)支持未来的开发,避免工具消亡,并让开发者能够支付账单。

从加密角度来看,BoxCryptor Classic 基于 encFS,默认使用以下设置:

  • Cipher Algorithm: ssl/aes
  • Cipher keysize: 256
  • Cipher blocksize: 4096
  • PBKDF2 iterations: 5000
  • Salt size: 20
  • Per-block HMAC: NO
  • Unique IV: NO
  • Chained IV: NO
  • External IV: NO (我将让专家来判断这有多安全,但最后4个设置未启用,PBKDF2迭代次数设置为5000,并且没有选项可以更改这些值,看起来是选择了性能优先于隐私。再次声明,我不是加密专家。)

时光流逝,“未来的开发”确实发生了。版本2发布了,并且决定放弃 BoxCryptor Classic 版本。我升级到了 v2……然后发现它不再满足需求了。我无权评判新架构的安全性,也确信他们仔细听取了客户的需求来确定新功能集;但对我来说,这个新的(且更贵的)版本缺少了使其产品脱颖而出、与众不同,并且是我最初购买许可证原因之一的“创新”功能。更具体地说,他们决定取消拥有独立数据集(每个数据集使用自己的密钥/密码保护)的能力。新模式是“单一数据集,单一密码”的模式。

不幸的消息,但至少 BoxCryptor Classic 版本仍然稳定且运行良好。暂时如此。

几个月前,苹果发布了 ‘El Capitan’。就像你们中的一些人一样,我有推迟对我的系统进行重大更新的习惯,直到事情稳定下来。果然,人们开始抱怨各种各样的事情,包括使用 BoxCryptor Classic。我在 BoxCryptor 论坛上找到了这个帖子:https://forums.boxcryptor.com/topic/boxcryptor-classic-mac-os-x-1011-el-capitan#post-7948。简而言之:BoxCryptor Classic 不再工作;并且在任何更新的操作系统上不再受支持。是的,有一个临时的变通方法,但它很可能在未来的 OSX 升级中失效。我与他们的支持团队进行了沟通,他们确认将坚持其决定,只在新系统上支持 v2,并且将原始功能加回来太复杂了。

真糟糕。

又回到了起点。(不,我没有预料到这一点。)

那么——接下来怎么办?我不知道。我被告知要加密加密再加密,我也一直在告诉人们这样做。但我不知道如何让它真正发挥作用。我的意思是,如何让它可用。也许我的要求太超前了,或者干脆就是愚蠢的?我也不知道。我不声称自己比别人聪明,但我能想象很多人也有同感。

目前,我暂缓升级到 El Capitan,但这感觉更像是治标不治本。我讨厌这样做。我试图寻找一个可行的替代方案。毕竟,从我开始使用 BoxCryptor 以来已经过去了好几年,所以我确信会有其他工具做同样的事情(无论是从加密还是可用性的角度)。简而言之:没有。唯一“类似”的替代方案将涉及构建自定义的 encFS 实现,使用可能不稳定/不受支持的移植版本……这恰恰不是能说服任何人使用该解决方案的用户友好性和可靠性。这并不重要,“因为它是开源的,所以你可以改进它”。

加密技术在现代环境中准备好使用了吗?也许吧。(我还没有聪明到能真正回答这个问题。)工具准备好了吗?根据我的经验:并不尽然。(或者至少,没有那么多工具。)

从概念上讲,加密技术是有效的,工具也能完成工作。但除非我错过了什么,否则在现代化/混合的“随时随地任何事”社会中,当前的组合实现状态似乎将我们带回到了石器时代的现实。也许原因之一是使用它的人不够多。但话说回来,使用这些工具本身可能就太难了。或者这些工具可能缺少在当前技术发展和行为状态下所需的重要功能。

能做到吗?当然可以。我相信这“仅仅”是用户界面和功能集的问题。只需要把加密技术人员、UI设计师和构建功能丰富的应用程序的人聚集在一起,做出人们能用的东西,而不仅仅是完成工作的东西。

为什么这没有发生(或者没有更频繁地发生)?我不知道。BoxCryptor 的人曾经做对了,而且不止我一个人这么认为。向他们致以崇高的敬意。可惜他们没有完全意识到自己放弃了一块璞玉。我坚信(并希望)其他人会采纳这些想法并付诸实践。

好消息是,没有人阻止任何人制作出能够以简单方式使用,并在需要时以更高级方式使用的东西。Whisper Systems 是一个如何把事情做对的完美例子。人们谈论 Signal 并且使用它,因为它运行得非常好。

而且,没有人阻止任何人收取少量费用来支付他们的劳动。只要东西好用,人们就会买。即使它是开源的。

我需要你的帮助!

我想用几个问题来结束这个故事/抱怨:

  1. 需要什么条件,才能有人构建出真正有影响、能弥合技术与人们实际使用之间差距的东西?
  2. 一个好的激励因素会是什么?
  3. 需要什么,才能让我们的社区从空喊建议转变为真正有可能遵循建议?
  4. 如果我们不能齐心协力并说服更多人认识到可用性至关重要,我们还算是一个真正的社区吗?

我期待着看到你们的回答、问题、评论、建议。我也期待着支持那些能改善我们生活的倡议。

黑客擅于变通并寻求改进……成为一名黑客。

© 2016, Peter Van Eeckhoutte (corelanc0d3r)。版权所有。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计