很多技术信息来自于英文页面,我英文不好,可能有错漏的地方。

wKiom1YjhiPQ7OwJAAAJ5Ehuvh4933.jpg

    Tahoe-LAFS是一个分布式的文件存储系统。它的特点是无法对内容进行审查,即使是存储服务提供方;极高的安全性,用长不定字符串链接替文件访问权限验证,基本不可能被在线破解;匿名,无注册及身份验证,只靠第一次运行时分配的随机码区分不同用户。

    简单说下它的文件存储流程。我通过客户端上传一个文件。文件经过加密被切分成数个片段,上传到数个存储服务器。每个服务器只保存文件的一部分,不保存完整的文件。并且忽略掉文件名,用一串加密过的字符代替。上传完毕,Tahoe-LAFS系统返回一串字符串,以后就用这串字符串访问上传的文件。

    对于存储服务器来说,它手里只有你文件的一部分,并且是经过加密的,并且连原始文件名都没有。它无法知道是谁的文件,什么内容的文件。如果有谁说它存储了侵权文件,要求存储服务提供方删除和加强监管。服务方会表示:我无法做到。我这里没有完整文件,没有文件名,文件是加密过的,我甚至连读取文件内容检查其中的关键字都做不到,如何监管和审查?
它的特点也使它得到“打破梭镜门”项目网站https://prism-break.org/zh-CN/ 的推荐。

    它除了使用互联网网络,还可以使用i2p网络(有专门的i2p版本)。使用i2p网络后使它除了拥有阻止审查的能力,还拥有了匿踪的能力。对于匿名用户来说是一个很有用的云存储系统。当然在中国i2p速度慢,通过i2p网络tahoe-lafs也会很慢。大约每秒几百字节到一、二十KB。

    下面讲述一下软件的运行。
    可以从这里下载https://tahoe-lafs.org/source/tahoe-lafs/releases/

    Tahoe-LAFS使用python编写。目前(1.10版)只支持python 2.7及以下版本。有windows、linux、os x等系统版本,甚至有openwrt等嵌入式系统版本。安装完毕,需要修改配置文件填入必要的参数。通过配置即可以只做客户端,也可以做存储节点。如果你做存储节点,如果你只是普通家用网络,跟其它存储服务节点相比你就是水桶上最短的那块木板,会拖累存储速度。这种连累别人的好事还是不要做比较好。
    安装以后会监听本地3456端口,可以通过在浏览器地址栏输入http://127.0.0.1:3456/来访问。目前还不支持ipv6网络。

wKiom1YjhszDH2FYAAUKMi5DgLw854.jpg

打开后会看到显示“Connected to 0 of x introducers”表示连接到了几个“介绍”服务器。introducer“介绍”服务器,只提供存储服务器地址信息,不提供文件存储服务。这些介绍服务器地址是先前安装后,手动添加进配置文件里的。等待一段时间,连接上介绍服务器后就会显示当前获取到多少存储服务器(需要手动刷新浏览器才会显示最新数据),以及可以连接上哪些存储服务器。

    软件自带了一个example urls页面文件,里面有一些tahoe文件夹示例。可以打开看看。

wKiom1Yjhwngn_P4AAWY62lUnzQ551.jpg    现在你可以在http://127.0.0.1:3456/页面直接上传文件或者新建文件夹。文件和文件夹有几种类型。Immutable,不可修改型;SDMF,小分布可修改型;MDMF,中等分布可修改型。不可修改型,就是上传后就不能再更新。其它两种则是可以更新。SDMF可能更适合小于1MB的文件。

    注意,你可以新建一个文件夹,再在下面上传文件,这时你的文件夹中可以显示文件名。如果你不在文件夹下上传文件,而是直接在http://127.0.0.1:3456/上传文件,会发现上传后返回的文件链接字符串中没有包含原始文件名。如果你再通过这个链接下载下来文件,会发现会变成一个一串字符串为文件名,“.txt”为后缀的文件。你要手动改名才能还原。因为tahoe-lafs系统不会使用原始文件名作为存储文件名称。在文件夹下可以显示文件名是因为:文件夹在tahoe-lafs中也是存储为一个文件,它的文件内容就是文件链接和你自定的显示文件名。而这个根文件夹的链接也是一长串字符串,而没有手动设置的文件夹名称(下级文件夹可以有名称)。
    如果你不在文件夹下上传文件,上传完毕后会返回你一个uri文件链接字符串,保存这个链接。如果丢失就会永久失去这个文件,tahoe-lafs是没有文件搜索和浏览功能的。

wKiom1YjiJ_QczMUAAQzt1oMpxM567.jpg

    如果你新建一个文件夹,记下浏览器上显示的地址。或者点“more info on this directory”记下“Directory writecap”链接字符串。在文件夹下的文件和文件夹右边有个“More Info”的链接,点击可以查看文件或文件夹的可写链接、只读链接,可以上传更新。当然如果你上传的是不可修改类型文件则没有可写链接和上传更新。

wKioL1YjiR-wkzV0AASYe3kyJXw860.jpg


    现在来讲下tahoe-lafs文件链接和权限的知识。如果你上传一个可修改型文件或文件夹,则这个文件或文件夹自动会产生多个链接,一般有File writecap,可写链接;File readcap,只读链接;File verifycap,验证链接。如同字面意思,可写链接,使用这个链接可以更新文件或修改文件夹。只读链接,则只能查看、下载,不能改。你上传文件后想共享给别人,如果想让别人只能看就发只读链接给别人,想让他修改就发修改链接给别人。注意,一个文件同时只能有一个人修改,不能并行修改,否则会造成文件丢失等严重错误。打开可写链接可以查看到只读链接和验证链接;打开只读链接则只能查看验证链接不能查看到可写链接。
    在文件夹下可以只修改文件名而不改变文件链接,或者相反,反正链接中没关联文件名。如果你是文件的创建者,在文件上传更新后(当然得是可修改型文件)文件链接不会改变。tahoe-lafs如何知道你是创建者呢?在你本地.tahoe文件夹(windows7下默认在C:\Users\用户名\.tahoe)下的private文件夹下有个convergence文件,里面有一串字符串。是在安装后第一次运行时产生的。tahoe-lafs通过这个字符串和你的文件内容混合运算产生出文件链接。通过验证你的convergence码和文件链接就可以知道你是不是创建者。

    注意!tahoe-lafs是没有账户名、密码的。那我的文件岂不是可以随意被人下载?那倒不会。tahoe-lafs是没有文件搜索和浏览引擎的,连文件名都没有,如何搜索?除非你把链接发给别人,否则别人是没法访问你的文件的。实际上,文件链接那一长串字符串代替了账户、密码系统。这是一个很有趣的访问权限架构。如果有账户、密码验证,那么,不是由服务器验证就是由客户端验证。由服务器验证的话,如果服务器被***,账户、密码就会被别人拿走了,而且你还不知道,继续用这套账户、密码。如果由客户端验证,那我自己是能通过验证,如果我要共享给别人呢?我还得把密码发给别人或者公开,那跟我把链接发布出来不是一样吗?别人还得再输入一遍密码,还不如直接访问链接更简便。
    账户、密码和长字符串链接哪个暴力破解难度高呢?你的账户名和密码加起来一共多少位?一般也就16位左右吧。这个tahoe-lafs文件链接有7、8十位,由小写字母和数字组成。暴力破解花费的时间比前者多得多。如果是服务器验证,密码数据库被下载,被破解只是时间问题,而tahoe-lafs没有密码数据库,只能在线破解。在线破解时间要取决于服务器响应速度和网速,这在当前基本上就是不可能。而且就算破解者运气好,破解了一个链接,如果不是文件夹根链接那也只能得到很少或者单个文件。如果你没在文件夹中设置正确的原始文件名或者根本就没建文件夹,他下载的文件会以.txt为后缀,他很难弄清这是个什么用途的文件。还有关键的一点,没有账户名和文件夹名称和文件名,破解者无法针对某人或某类文件进行破解。就算你被某个破解者下载了文件,他也未必会对你重视的文件感兴趣,多半就丢弃了。除非你把信用卡号和背面数字等信息放进去了。
    所以,只要你不把重要文件链接泄漏给别人,否则这比设置一个强力密码安全得多。还有,虽然浏览器地址看起来默认是用的http协议,但这只是连接到本地客户端而已,客户端连接到服务器是加密的,不用担心泄漏文件链接。

    现在说下文件删除的问题。tahoe-lafs是没有手动删除文件功能的。这又很奇葩吧?!虽然没有用户手动即时删除功能,但它有垃圾回收机制。用户存储的所有文件(包括文件夹)需要定期lease-renewal更新租约,如果在一个月内不更新租约就会被tahoe-lafs系统丢弃。所以要小心,不要以为上传上去只要自己不删就可以永久保存。更新租约不需要付费什么的,只需要每个月通过浏览器在文件或文件夹的more info页面下勾选“Add/renew lease on all shares?:”点check就行了。这垃圾回收机制有利于减轻tahoe-lafs存储节点的负担,让存储节点保持更好的状态。如果我现在就要删除文件呢?那就把需要删除的文件上传更新为一个空文件,但是链接还是要一个月后才消失。


    tahoe-lafs除了用web浏览器界面操作以外,还可以用命令行以及api来操作。你可以在你的app中用api来使用tahoe-lafs。




ps: 本想发在论坛的,结果发现没有合适的分类,所以才发在博客。