严肃的说。
对于那些你们谁不知道的是,1Password Anywhere是1Password 一个主要功能,1Password它允许你在不需要客户端软件的情况下访问你的数据。1Password原本只使用“Agile Keychain”的格式来存储其数据(只仅仅在他们的OS X的钥匙串时不包括)。这个基础格式将你的数据存储为一系列的javascript文件,这些文件当你向你的主站提供密码时会解析你的数据。由于文件是JavaScript文件,并且在javascript中存在各种各样的加密算法的实现,这就是为什么AgileBits没有理由不能出现,同时使用HTML和javascript客户端来查看你的数据,所以他们就那么做了。
如果你在磁盘上浏览你的agilekeychain“文件”,你会发现它实际上是一个目录。在这个目录下有一个名为“1Password “的HTML文件。”。如果你在HTTP上访问这个文件(注意使用文件协议不会工作),你会看到一个具有锁定形象和一个密码字段的灰色页面。然后,输入你的密码和你的钥匙串将会解锁,并且你会看到一个数据的只读视图。
所以,那会有什么问题呢?好吧,告诉你们,这意味着你的元数据是没有经过加密的。我在Dropbox进行同步研究的时候发现了这个问题(我是用Dropbox来托管我的钥匙串)。这个有问题的文件是:1Password.agilekeychain/data/default/contents.js。我是一个充满好奇心的人,所以我打开了那个文件想看看那里面到底有什么。当我打开后,我看到了我在1password的每一个项目的姓名还有地址。每一个!!!纯文本格式。
对于那些,你或许回想,“所以又会怎么样呢?“也许你对那些东西没有什么兴趣,但是,你必须要考虑一些其他的。也许,我签署了somespecificpornsite.com,这不是我想要宣传和倡导的。然而,我确实是已经那么做了。任何一个人,只要知道链接到我的钥匙串的网页的主要日志,都可以改变链接,并且得到这个文件。他们可以通过查找我有登录或者访问什么可疑网站,我有什么软件许可证,银行卡和我所持有的帐户,我所有的任何安全注意事项,还有,任何其他我决定在那里存储的东西。
其次需要关注的问题,并且更大的担忧是,登录位置与条目标题存储在一起。换句话说,如果我在https://example.com/login登录,然后登录名和密码将会和钥匙串一起存储。在99%的情况下,这不是一个问题。这是那百分之一中的一个值得关注的案例。开发商并不是完美的。我们做出不好的决定,有时也会做出危险的决定。我最近签署了一个英国的一家大型的ISP(网络服务提供),由于其系统的漏洞,我不得不重置我的密码。我收到了电子邮箱发送的一封带有重置链接的电子邮件。我点击链接,输入一个新的密码,然后点击提交。这时发生了两件事情。第一个是,我的密码重置了。第二是,1Password提示保存了我的凭据。自从我使用自动生成的密码,我喜欢保持我的密码安全,我点击保存。现在我的新密码是储存在我的钥匙串中的。如果我的ISP犯了一个错误,尽管是电子邮件链接,会发生什么呢?也许是他们犯了错误,这是十分常见的…….所以我返回我的电子邮件,并且再一次点击密码重置链接。果然,我得到一个提示的窗口,我可以重置我的密码。他们没有检查,看看我是否已经使用了链接。现在,那个链接存储在我的1Password的元数据中,可以公开访问的。任何人都可以去和复制粘贴这个链接到他们的浏览器中,他们有充分的权限访问我的帐户。大概我不需要再继续解释下去,这到底是不是一个巨大的问题?
但这个问题变得更糟了。我决定看看,看看这个问题到底有多糟糕。多亏了人们在他们的网页上有链接可以轻松的访问他们的钥匙串,谷歌已经可以索引这些。一个简单的搜索带来的结果。通过查看这些搜索到的,很容易就可以辨认出钥匙串的所有者是什么身份,以及他住在哪里。我还可以知道他的工作是什么。我甚至知道他的妻子和他孩子的名字。如果我是邪恶的,这很容易让人相信我已经破坏了他们的帐户,并有机会获得他们的所有凭据。更不用提的是,他们显示的在线位置可能会使他们的个人人身安全处于危险的境地。
那我做了些什么呢?这么说吧,我立刻想去告诉AgileBits,让他们意识到这个数据泄露的严重问题。当我收到一个来自他们公司的其中一个工程师的回应时,我得到了几个关于他们的钥匙串的细节的链接,并且,可以肯定的是,他们已经知道了这个问题,但它就是这么设计的。(意思就是,他们的工程师知道有这个严重的问题,但设计就是这样,所以公司并不在意这个漏洞。)
当我们建立钥匙扣时,我们就会意识到,很有可能会看到当它是加密的时候,一个用户已经在不同的网站登录;虽然,如果攻击者获得访问它的权限,这可能会涉及到一些隐私的问题,你的密码是永远不会暴露或者分享的,因为他们被加密成你的主机密码,他们不会以任何方式出现在钥匙串中。
通过搜索那些有员工的声明的论坛,我发现它被设计成这样是因为其性能的原因。其逻辑是,如果元数据与常规数据进行加密,那么,当用户打开他们的钥匙串时,如果他们想寻找一个入口,所有的入口都需要进行解密来发现用户想要寻找的。并且,这是正确的。我所不理解的,并且我也询问了AgileBits的是,为什么不仅仅加密了在某种方式上使用主机密码的元数据文件,然后,为什么它们只有一个单一的文件来解密?再次让我不解的是,他们的理由竟然是性能?!
当我们几年前第一次开发出AgileKeychain 的时候, 1Password有着较少的处理能力与功能,并且,高速运转解密钥匙串去飞做一些简单的事情,作为登录搜索,给我们的用户带来巨大的性能损失。因为这个给我们的用户提供了一个糟糕的用户体验,所以我们决定不需要额外的解密步骤来处理这一过程。
所以我们现在在做什么?
在2012 年的12月,AgileBits将钥匙串的格式从 Agile Keychain改成了OPVault。那么这种新的格式是怎样的呢?首先,第一个好处是,你不能再用1PasswordAnywhere这种格式了。由于数据存储为JSON,我不明白是为什么,但也许AgileBits决定让你的钥匙串可在互联网访问不是个很好的主意。元数据格式明显比Agile格式好,但它有一个严重的问题,如果你在OS X上创建了一个OPVault,你必须输入一个密码提示。这个密码提示仍然保存在一个纯文本中(见下面的例子)。当然,你仍然可以看到存储项目的类型,并且,当它们更新和创建的时候,这很容易通过监控钥匙串进行确定,所以这是无关紧要的。除此之外,1PasswordAnywhere不能创建默认的OPVault。它仍然坚持没有对安全风险没有信息的Agile Keychain。事实上,能够令人信服的1Password的OXS操作系统甚至允许你对于需要命令行使用时使用opvault格式:可查看链接 https://discussions.agilebits.com/discussion/39875/getting-your-data-into-the-opvault-format(让你的数据用opvault格式)
让我来总结一下:不要使用Agile Keychain 格式。它泄露了你的数据。如果你正在使用它,把它立刻改成opvault格式。
到现在为止,我使用1Password有好几年了。在那个时候,我已经看到了由于安全漏洞密码管理人员的增多和减少。1Password网站坚持反对这种冲击,我支持它这种决定。在这之后,我的信心动摇了。然而,我会继续使用1Password。当然,这些元数据仍然有问题。现在我将会切换到1Password格式,然后会失去1PasswordAnywhere的功能。是的,他们没有宣传公告使用老的vault格式的缺点,这使他们很难默认去使用一个新的。然而,他们并没有否认这点。他们在某种程度上清楚地记录了他们的钥匙串的格式,到任何人都可以去写,可以去解密的程度。当我注册的时候并没有读到这个文件。我承认本不应该这样,但这是他们的事情。AgileBist在元数据安全方面很失败,但我不担心,因为我的密码仍然是安全的。
(注意:本文的钥匙串(英文:Keychain)是苹果公司Mac OS中的密码管理系统。它在Mac OS 8.6中被导入,并且包括在了所有后续的Mac OS版本中,包括Mac OS X。一个钥匙串可以包含多种类型的数据:密码(包括网站,FTP服务器,SSH帐户,网络共享,无线网络,群组软件,加密磁盘镜像等),私钥,电子证书和加密笔记等。)