Pages

Wednesday, 20 February 2013

关于Dropbox的Photos文件夹的安全性

本文是要分析一下Dropbox的Photos文件夹的权限和安全性。我们知道一个Photos文件夹的公开共享链接是大约这样子的:http://www.dropbox.com/gallery/9628444/2/_wallpaper/_other?h=8a53e8。 其中[9628444]是用户ID,[2]是文件夹的深度,[_wallpaper]是一级文件夹名,[_other]是二级文件夹名。 [h=8a53e8]是一个校验码,用于保证只有知道这个地址的人才有权限访问这个文件夹。其中的这个[h]很可能是指[hex],表示是16进制的意 思。

本文分析一下在已经公开了某一个文件夹链接的前提下,其他文件夹的安全性。本文将从纯技术角度进行分析,类似“如果这么担心安全性的话,就不要往Dropbox上放啊”这样的话,不用说我也知道。

一般情况下,没有链接地址,其他文件夹依然是不可访问的,其中校验码起了很大的作用。

用 一个6位的十六进制数进行权限控制,看起来应该很安全,不太可能有人误打误撞进了你的相册。暴力穷举破解也似乎不可行。假设有人知道了你的用户ID和文件 夹名称(在本文上述前提下,其他人会知道你的用户ID,和文件夹的命名规则,可以很容易猜测出其他文件夹的名称,或者穷举文件夹名称),那么想要穷举这个 校验码,需要最大尝试166次(16,777,216次)。实际上由于最高位不可能是0,那么最大就需要尝试165*15次(15,728,640次)。而Dropbox会在连续尝试失败若干次之后暂时封锁来自该IP的访问,所以暴力破解不太可行。

那么我们来看看这个校验码的生成有没有什么规律。按最安全的方案的话,Dropbox应该在每个文件夹创建时随机生成一个校验码。通过以下实验可以发现,校验码不是随机生成的。

假 设校验码是随机生成,那么我们在Photos下面创建一个名为[test]的文件夹,如果分别在客户端和web端创建,校验码应该会不一样。我们将 Dropbox客户端的代理服务器设置为一个不存在的代理,令Dropbox处于离线状态,这样可以保证Dropbox客户端程序在生成校验码时不与服务 器交互。然后在本地和web端分别创建[test]文件夹并获得共享链接,发现两个链接的校验码是一样的。这足以说明,校验码不是随机生成的。

而这两个分别生成的校验码一样,是不是因为校验码是和路径有关的呢。我们把[test]改名为[test1],发现校验码变了,说明校验码是和路径有关的。

那 么校验码和用户ID有没有关系呢。用不同的用户登录Dropbox同样创建[test]文件夹并获得链接,发现校验码不一样,所以校验码是和用户ID有关 的。设计上也应该是这样,否则我只要自己也创建一个一样路径的文件夹,就能得到其他所有人的这个文件夹的校验码了。特别是在每个人都有[Photos]这 个根文件夹的情况下,这点尤其重要。这个根文件夹虽然看似不提供共享链接,但是有用于通知图片更新的feed地址,可以用来反推共享链接。而且这个 feed地址或者共享链接一旦泄漏,那你的所有相册就相当于完全公开了。因为有某文件夹访问权的人,也有它的子文件夹的访问权。

既 然校验码不是随机生成,那么次级安全的生成方案,就是令校验码和用户密码之类的挂钩了。经测试,校验码和用户登录名以及密码均无关。那么按我的想象,只有 两种可能性了。1,为每个用户分别随机生成一个永久的密钥,令校验码和这个密钥有关。2,所有用户使用同一个密钥。安全性上肯定是第一种要高,以 Dropbox的技术实力来看,我们应该相信他们是采用了第一种方案。如果用的是第二种方案的话,那么一旦将来这个唯一的密钥以及加密方法泄露出去,事情 就大条了。而且考虑到Dropbox的某些技术人员肯定会知道这个密钥,为了限制技术人员的访问权,Dropbox决策层也应该会采用第一种方案。虽然有 数据库查看权限的技术人员也能查到单个用户的密钥(这个密钥由于和用户密码无关,肯定不是加密存储的),但我们应该也没必要担心这一点,毕竟我们的文件都 存在人家的服务器上,他们要想访问,那还不是轻而易举。顺便一提,我的个人观点,不管其他文件夹的文件是否使用了AES-256加密存储(他们宣称的,但 这个加密据我猜测,应该不是使用用户密码进行加密的。从可以通过文件的MD5指纹或者SHA-1指纹进行文件去冗余存储处理,也可以看出文件不是使用类似 上述的用户密钥进行加密的。而是使用一个公共密钥进行加密的。但是,没有使用用户密码作为密钥进行的加密,对用户来说都是相当于没有加密。当然使用用户密 码作为密钥加密,安全性是最高,但是实用性不够。因为如果那样做的话,只要用户一修改密码,那所有的文件都需要拿出来重新进行加密。关于Dropbox的 加密方法,我这边还会继续关注,有这方面消息的人请务必留言讨论一下。),但[Public]和[Photos]这两个文件夹的文件肯定没有加密存储,因 为没有加密的必要。考虑到效率,也不应该加密。只要保证这些文件是不可浏览的(not browsable)和不可搜索的(not searchable),就可以认为文件是安全的了。不知道他们的权限管理和Google比怎么样,不要出现像之前Google工程师查看用户私人数据这 样的事情才好。

写了这么多,结论就是文件目前是安全的,链接没有公开的相册,别人是怎么也看不了的。想看看有没有人有更深入的分析,所以稍微写一些,也就是抛一块烂砖,看能引出块玉来不。


2011/03/19补:
逛了一圈dropbox的官方论坛,发现dropbox的确是用一个公共密钥来加密所有文件。参考http://forums.dropbox.com/topic.php?id=25288&replies=7#post-159350
既然文件都是用一个公共密钥加密,那么前面提到的共享链接的校验码肯定也是用一个公共密钥了。至于这两个密钥是不是同一个,似乎就不那么重要了。泄漏了任何一个,对dropbox而言都将是毁灭性的打击。
实在不放心人家的安全性的人,建议用dropbox + TrueCrypt 的组合方案。这个方案下dropbox的一大特性--差分同步--是否还有效就不知道了。具体请自行google。
另外还有一个据说是真正的本地加密(可设个人加密密钥)、云端存储的产品,在idrivesync.com。我没实际验证,有兴趣的可以去看看。


2011/03/22补:
国内有不少出售或转让dropbox账号的,我要给大家一个警告,由于文中所述原因,转让dropbox账号是很危险的行为。因为即使更换了账号对应的E-mail地址和密码,原始Photos文件夹的分享链接和验证码是不会变的。 前账号所有者保存下这个链接(如果他知道的话),然后将账号转让出去,下一个所有者的Photos文件夹及其子文件夹的所有图片将可以一览无遗。我建议, 不要将这个链接保存在任何地方,不要用任何在线或离线的RSS阅读器订阅自己的Photos文件夹更新,最好是自己永远不要去获取这个链接。连你都不知道 了,别人就更加无法知道了。不过大家放心,如果你的账号就是从别人手中转让过来的也不用太担心,因为在我写这段文字之前,我想全国没(几个)人知道这件 事。
一切打算利用该“feature”进行非法、非道德用途的人,请停止这个想法。因此产生各类法律或者非法律的问题,本人一概不负任何责任。若因本文影响到你的淘宝上的生意,请自己承担后果.
----------------------------------

使用dropbox管理wallpaper


 如果你和我一样下载了很多漂亮的壁纸图片的话,一定也很在意图片文件的备份问题和占用硬盘空间问题。我介绍一下我的做法,大家看看觉得这样o不ok。
    壁纸的用途,就是要显示到windows(其他操作系统没用过,不熟悉)桌面上,令工作学习之余看看放松心情。而平时一般不会去打开壁纸文件夹一张一张去 看的。如今云计算乃是大势所趋,所以如果能把壁纸都存在云端,然后使用支持从云端读取图片的自动切换壁纸的软件进行自动壁纸切换的话,那么既可以空出部分 硬盘空间(本地尽量不存储个人数据,为将来的完全云计算做准备),也不必担心万一电脑被盗数据丢失,另外还可以做到令壁纸自动更换免去手动更换的麻烦。这 么一想,好处那是太多了。所以我花了不少时间在寻找这样的一个解决方案。最近,总算找到了近乎完美的方案。这个方案要用到2到3款工具软件/服务,先一一 简单介绍一下。各软件的使用技巧不在本文讨论范围。
1,用于保存壁纸的在线图片存储服务,dropbox
大名鼎鼎的跨平台文件同步软件,并且提供云端的存储空间。这里不多介绍,可以去 同步控 搜索相关文章进一步了解。当然这一类的软件/服务还有很多,如何选择一款好的软件/服务,特别是云计算服务的话,那么服 务的稳定性是一个很重要的因素。当今要论云计算,Google、Microsoft、Amazon乃是3大广为人知的云计算巨头,服务的稳定性那是没得 说。不比其他的小公司,说不定哪天就倒闭了。当然除去这三家,其他颇具规模的云计算服务也不少,但如果这三家中有提供类似服务的话,我会优先考虑这三家的 服务。而实际上今天要说的这个解决方案,这三家都有可用的服务。Google的是PicasaWeb,微软有Skydrive,而dropbox虽然不是 Amazon家的产品,但是用的是Amazon的云计算平台,而且最近这家公司发展势头似乎不错,再加上其他的一些优秀的功能,完全可以和Google、 微软的服务一较高下。加上其他的一些产品,这里列一个表格来比较一下流行的几款软件/服务的差异。
服务名 运营商 免费在线存储容量 在线查看图片 支持RSS订阅图片更新 描述
PicasaWeb Google 1G 非常优秀的在线相册,只是免费空间有点小
Skydrive Microsoft 25G 在线相册的管理不方便
dropbox dropbox 2G或更多 完全符合我的要求。通过邀请注册,存储空间可以最大达到18G以上。而且有时候会做活动赠送存储空间。
SugarSync SugarSync 5G或更多 在线文件夹的组织、管理方式不太方便
其他还有Facebook、Flickr、photozou等可以选择,不一一介绍。
2,自动切换壁纸的windows程序,John’s Background Switcher
    用过不少自动切换壁纸的软件,最终发现还是这个最强大。支持图片来自本地计算机、PicasaWeb、Facebook、Flickr、RSS源、 Google图片搜索结果等等,可以设置定时切换、随机切换,可以设置壁纸的显示方式(平铺、居中等一共9种模式,这一点其他很多软件都有缺陷),设置的 选项也非常丰富,总之可以满足我的对于设置壁纸的一切需求。不过有两点不太好的地方,第1,软件的运行需要计算机安装有.net Framework。第2,用于访问网络的代理服务器功能,软件仅支持HTTP代理,不支持SOCKS代理。第1点问题也不大,因为从Windows Vista开始已经内置了.net Framework。还在用XP的赶紧升级吧。第2点据说和第1点有关,我专门去官方论坛问过作者能不能让软件支持SOCKS代理,作者说.net不支持 SOCKS代理,他也没办法。但是作为一个.net程序员,我对此表示怀疑,大约搜了一下似乎并没有那么回事,.net应该是支持SOCKS代理的。具体 还需要进一步调查。
3,代理软件
    在中国大陆,以上许多服务都不能用。如果想用dropbox、PicasaWeb、Flickr、Facebook,则需要另备代理软件。这个自行解决,本文不作推荐。

    有了以上的软件,就可以开始我们愉快的云壁纸生活了。以下分步说明。
1,将壁纸放入dropbox的根文件夹Photos
*支持子文件夹、多文件夹
*如果你的没有Photos这个文件夹,则应该在web管理页面添加这个文件夹,注意首字母需要大写。具体看 这里
2, 在dropbox的web管理页面,点击壁纸所在文件夹右边的箭头并选择以Gallery方式打开这个相册的在线浏览模式。如果你的浏览器有自动检测 feed功能,那么会检测到这个页面有这个相册的RSS更新feed。复制下这个feed地址。如果没有检测到,那么查看这个页面的源文件,搜索 “rss”也能找到。还没找到的话,只好用一些非常规的办法了。在本地硬盘中定位到壁纸文件夹,右击这个文件夹,会有一个dropbox关联菜单。选择里 面的“Copy Gallery Public Link”可以得到这个相册的共享地址。把地址中的“gallery”替换成“photos_rss”,就是这个相册的feed地址了。
    我在Photos下面建了一个文件夹“_wallpaper”,又在里面建了一个子文件夹“_other”,得到这个相册的feed地址是这样的:http://www.dropbox.com/photos_rss/9628444/2//_wallpaper/_other?h=8a53e8
*这个地址也可以用https开头的地址,但有些代理可能不支持https协议
*注意feed地址有一处有两个斜杠“/”。而使用非常规方法得到的feed地址同一处只有一个斜杠,如果一个斜杠无效的话,试试改成两个斜杠。
3,如果有多个文件夹需要配置,重复上一步。
4,将这些feed地址作为RSS photo feed加入John’s Background Switcher中,设定好间隔时间,就可以了。
5,壁纸全部上传完毕之后,可以在dropbox中设置为不同步壁纸文件夹。设置之后dropbox会删除本地的壁纸文件夹,节省了本地硬盘空间。以后想再往这个文件夹添加文件时,可以先添加到其他文件夹,然后在web管理界面将这些文件移动到壁纸文件夹中。

后记:1,关于选择一款好的软件,网上有人说的好:一款优秀的软件在于,你在使用它,但是你感觉不到它的存在。像dropbox、John’s Background Switcher都属于这一类.