Crypto in the box, stone age edition
引言
首先,祝大家新年快乐!我希望2016年是一个美好、健康、充满乐趣、欢乐、活力和惊喜的一年。 还记得我所有的数据都能装进一张软盘的时代。10张软盘的容量。最初的笔记本电脑看起来(感觉起来)像带轮子的大型机,整个互联网的数据或许都能存进一块硬盘。 时代变了。技术让我们真正实现了移动化。移动性不再仅仅是一个设备,而是一种理念,一种生活方式。我们已经习惯了随时随地访问任何内容;因此,“把软盘锁在桌子里以保证安全”对大多数人来说已不再是一个可行的选择。日益增长的数字化和便携性带来了暴露和风险的增加。现在是2016年,幸运的是,我们找到了保护物品安全的方法,对吧? 人们常说,“加密你的东西”。加密你的通信,加密你的数据。加密,加密,再加密。我们已经听了好几年了,所以技术也应该准备好了,对吧? 随着数据量和数据重要性的增加,以及作为一个经常旅行的人,我几年前决定开始使用“云”存储作为主要的备份方式。需要说明的是,我认为“云”就是“别人的电脑”,因此——根据定义——是一个我不信任的地方。此外,使用云存储并不一定是我频繁旅行的结果,而只是一种简单的异地存储数据(和备份)的方式。它解决了许多问题,但也带来了新的挑战:解决“信任”问题。 当然,我使用了全盘加密。小菜一碟。几乎所有操作系统都允许你开箱即用地进行全盘加密,在某些情况下,你的硬盘甚至原生支持。但问题是,当数据同步到云端时,全盘加密并不能真正保护我的数据。除此之外,一旦我的笔记本电脑运行起来,全盘加密除了让机器变慢之外(叹气),作用不大。总的来说,这可能是明智之举(分层防御等),但一旦你想使用设备,它并没有解决任何问题。
需求
因此,我认为需要额外的加密软件。我卷起袖子(好吧,并没有),然后打开了谷歌。我的需求非常简单:
- 我有各种数据集。我希望为每个数据集使用不同的密钥/密码,并且希望能够在我想要的时候打开/关闭一个数据集。我认为这是一个重要的功能,因为我不希望我的所有数据一直处于“打开”状态。此外,每个数据集都值得并且需要自己的密码。(即使你的机器上没有同时存储客户数据和个人数据,我相信你也能想出理由不对所有东西使用相同的密码。)
- 由于我的数据会被备份/同步到云端并同步回我的第二台笔记本电脑,我希望确保同步过程尽可能高效。(也就是说,不浪费带宽,快速同步)
- 我同时使用Windows和Mac(OSX)设备。
- 虽然我懂一点技术,但我更喜欢用户友好且尽可能透明的解决方案。(例如,当我打开一个“数据集”时,我只希望它能与系统的其余部分集成,而无需我施展黑魔法、巫术、做两个后空翻或用肛门插入光剑才能首先使用数据。)
- 并非我所有的数据都需要同步到云端。事实上,我不希望某些数据被同步到任何地方。
- 我不介意为工具付费。天下没有免费的午餐。
选项
查看可用的应用程序,我发现主要有3种选项或模式:
- 基于单容器: 应用程序创建一个单一的(大型)加密文件,并允许我打开(解密)该文件。解密后,这个大文件会作为一个虚拟驱动器挂载,我可以透明地使用它。
- 基于文件: 该工具与文件系统上的现有文件交互,我必须手动对每个文件进行原地加密和解密。
- 基于文件的容器: 也许有更好的术语来描述这种模式,但类似于基于容器的模式,应用程序创建一个虚拟驱动器,允许我透明地访问我的数据。主要区别在于,每个文件和文件夹都由应用程序在后台单独加密(而不是存储在一个大文件中),因此所有加密的文件和文件夹都作为单独的文件存储在文件系统上。
哪种最好?嗯,这取决于你的看法。让我们暂时把加密部分放在一边。让我们假设(仅为简化)没有后门,并且隐私和加密方面得到了正确实施和信任……当然,我这么说只是为了避免一场我不会赢、不能赢、甚至不想赢的争论,因为你们所有的论点可能都是正确的。既然这些论点可能对所有应用程序都成立,我们也可以对它们进行抽象。 因此——让我们只关注功能需求和工具的可用性。(毕竟,无论我们喜欢与否,这些是决定人们是否会使用它的标准。)我决定尝试一堆工具,测试所有3种模式,并尝试找到满足我简单需求的最佳模式。
单容器
基于容器的方法(TrueCrypt, VeraCrypt, …)效果很好。它允许我创建单独的容器,每个容器都有自己的密钥,并且可以在Windows、OSX等系统上运行。挂载容器后,会创建一个虚拟驱动器,让我可以非常轻松地与我的数据进行交互。很棒。 不幸的是,由于所有内容都存储在一个单一的大(巨大)文件中,“同步到云端”的备份过程并不那么美好。每次我对其中一个文件进行更改时,都必须将一个10GB的文件同步到云端,这并不友好。除此之外,我还发现(通过艰难的方式)使用云备份和恢复功能来恢复已删除的文件也不是那么用户友好。
基于文件
也许基于文件的方法可以解决同步问题。我尝试了几种工具,它们允许我在需要时加密和解密单个文件。效果不错,但我厌倦了每次都必须手动加密/解密。不那么用户友好。此外,我发现找到一个跨平台且相对易于使用的好工具并不容易。
基于文件的容器
经过一些基本的谷歌搜索,我找到了一个名为BoxCryptor(现在称为BoxCryptor Classic)的工具。试用后,我发现它做得很好,满足了我所有的需求。太好了。根据谷歌搜索结果,它似乎也是唯一满足需求的工具()。无论如何,我非常乐意支付许可费,以(希望)支持未来的开发,避免工具消亡,并让开发人员能够支付账单。 从加密角度来看,BoxCryptor Classic基于encFS,默认使用以下设置:
- 密码算法:ssl/aes
- 密码密钥大小:256
- 密码块大小:4096
- PBKDF2迭代次数:5000
- 盐大小:20
- 每块HMAC:否
- 唯一IV:否
- 链式IV:否
- 外部IV:否 (我让专家来判断这有多安全,但最后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实现,使用可能不稳定/不受支持的移植版本……这绝对不是那种能说服任何人使用的用户友好性和可靠性。它是开源的,所以你可以改进它“这一点并不重要”。
反思与呼吁
加密技术在现代环境中准备好投入使用了吗?也许吧。(我不够聪明,无法真正回答这个问题) 工具准备好了吗?根据我的经验:不完全是。(或者说,没那么多) 从概念上讲,加密技术是有效的,工具也能完成工作。但是,除非我错过了什么,否则当前在现代/混合“随时随地任何事”社会中的综合实现现状,似乎将我们带回了石器时代的现实。 也许原因之一是没有足够多的人在使用它。但话又说回来,使用这些工具本身可能就太困难了。或者这些工具可能缺少当前技术演进和行为状态下所需的重要功能。 能做到吗?当然可以。我相信这“只是”一个用户界面和功能集的问题。只需要将加密专家、用户界面设计师和构建功能丰富应用程序的人员聚集在一起,创造出人们可以使用的产品,而不仅仅是能完成任务的东西。 为什么这没有发生(或者没有更经常地发生)?我不知道。 BoxCryptor团队曾经做对了,而且我不是唯一这么认为的人。向他们致敬。遗憾的是他们没有完全意识到自己抛弃了一颗未经雕琢的钻石。我坚信(并希望)会有其他人采纳这些想法并付诸实践。 好消息是,没有什么能阻止任何人创造出既简单易用,又能在需要时提供高级功能的东西。Whisper Systems就是一个如何把事情做对的完美例子。人们谈论Signal并使用它,因为它运行得非常好。 此外,没有什么能阻止任何人为他们的工作收取少量费用。如果东西好用,人们会购买的。即使是开源的。
寻求帮助
我想用一些问题来结束这个故事/吐槽:
- 需要什么才能让某人构建出能够产生影响、弥合技术与人们实际使用之间的差距的东西?
- 什么才是好的激励?
- 需要什么才能让我们的社区从大声建议转变为真正让遵循建议成为可能?
- 如果我们不能联合力量并说服更多人相信可用性很重要,我们还是一个真正的社区吗? 我期待看到你们的回答、问题、评论、建议。我也期待支持那些能改善我们生活的倡议。 黑客打破规则并寻求改进……成为一个黑客。
© 2016, Peter Van Eeckhoutte (corelanc0d3r). 保留所有权利。