SSB驱动器–基于Secure Scuttlebutt的分散式文件系统

2021-01-19 12:58:25

这是SecureScuttlebutt分散文件系统的概念证明(请参阅SSB)。它包括用Python编写的SSB对等协议的部分但可互操作的实现。

使用SBB Drive,您可以根据需要创建任意数量的文件系统(& 34; drives"),与您的朋友共享和组织文件,而无需中央存储库或服务器。在离线时处理文件时,一旦重新加入网格,SSB驱动器文件系统将自动与世界其他地方合并。名称冲突由" Observed Removes Sets"处理。 (或集)来自CRDT。

UUID标识要使用的驱动器。使用-l列出所有可用的驱动器。 -peer选项选择特定的SSB pub(对等节点);默认行为是通过端口8008连接到本地运行的SSBprogram(例如,patchwork或sbot)。

代码状态:这是一个概念证明,并且不是经过精心设计的Python包,它也缺少测试例程。不要在您的日志上运行此编码:很难(而且通常是不可能)纠正损坏的哈希链,尤其是当它已泄漏到全局SSB系统中时。请阅读“"使用SSB驱动器进行实验”部分。安全的本地工作方式-您已被警告。

最好的方法是解压缩此Git存储库,并在安装依赖项后从ssbdrv目录运行(请参阅requirements.txt)。将来,当ssbdrv的内部接口稳定时,将提供完整的Python程序包,可能还会将SSB对等组件作为独立程序包排除在外。我们承认必须更完整地导入pferreir的pyssb软件包:为了方便起见,其中包含了经过修改的pyssb代码,使该ssbdrv回购自成一体。

文件状态:请参阅资料来源Luke。此外,在此Git仓库中有一份有关SSB缠结的文档草案,请参见“ Tangle数据结构及其在SSB Drive中的使用”。

SSB驱动器的行为类似于传统的FTP客户端,除了您不必连接到服务器。以下演示显示了此PoC的基于终端的用户界面。

爱丽丝:帮助//列出可用命令爱丽丝:ls -l //显示目录contentBob:ls -l // Bob看到相同的contentBob:put b.txt // Bob上载文件Alice:ls -l //爱丽丝在她的目录中找到它:cat b.txt //并查看它爱丽丝:放x.txt first.txt //爱丽丝竞赛上传firstBob:放y.txt first.txt //鲍勃竞赛上传firstBob:ls -l //惊喜:没有竞赛条件,但有两个filesBob:树//仅另一个viewBob:ls -li // UNIX -i选项:show inode(在我们的情况下为cypherlink)// //这两个文件不同,可以分别删除

如果不使用UUID参数,则应用程序首先扫描您的SSB日志,并使用最新的&root条目。它可以作为工作驱动器-请注意,该驱动器可能是由朋友创建的。如果您知道要使用的驱动器(例如,如果您创建了多个驱动器和/或希望确保在特定驱动器上工作),则应将该驱动器的UUID作为参数传递。

您可以使用-n选项请求创建新驱动器,并使用-l列出所有可用的驱动器。

由于SSB基于仅追加日志,因此只要对该驱动器进行了任何日志或副本复制,对驱动器的所有更改都将保留。如果您的一个朋友从共享驱动器中删除了文件,则该文件仍然存在并可以恢复:SSB驱动器已&times-ready-ready"从所有信息都可用的意义上说,此PoC尚未实现浏览驱动器历史记录的方法(以及恢复旧条目的方法)。

$ ./ssb-drive.py [选项] [UUID]其中选项为:-h,--help显示此帮助消息并退出-del删除给定的驱动器-列出所有活动的驱动器-new创建新的驱动器-peer IP :PORT:ID远程ip:port:id(默认为localhost:8008:default_id -port PORT本地端口(即成为服务器)-tty在行模式下运行(而不是全屏终端)-user USERNAME用户名(默认为〜/ .ssb用户或〜/ .ssb / user.USERNAME)-udel取消删除给定的驱动器UUID ssb-drive的uuid(默认为最小的驱动器)

为了使用SSB驱动器协议执行本地实验,请尽可能与本地SSB用户(而不是您自己的ID)一起运行。为此,对于每个用户USERNAME,我们使用以下格式保留一个子目录:

并使用标准SSB数据进行填充。 SSB Drive软件提供了一种创建新用户的简便方法,如下所示:

#本地演示步骤1 $ ./ssb/local/config.py -listdefault用户:@ AiBJDta + 4boyh2USNGwIagH / wKjeruTcDX2Aj1r / haM = .ed25519本地用户:$ ./ssb/local/config.py -new Alice **新用户Alice ** (@ C8pPydEHuGxCjFUYBLmBOGTIPkYQeZ3FnKvQTvT0MDk = .ed25519)$ ./ssb/local/config.py -new Bob **新用户Bob(@ ihS4TZa55eMjjWOC5oN + oF9GTvc23GQJyed0ta + 4boyh2USNGwIagH / wKjeruTcDX2Aj1r / haM = .ed25519本地用户:@ C8pPydEHuGxCjFUYBLmBOGTIPkYQeZ3FnKvQTvT0MDk = .ed25519 Alice @ ihS4TZa55eMjjWOCGT9C0B1C

由于对等方仅在彼此遵循彼此的情况下才检索彼此的日志,因此我们必须为两者都填充friends.json文件,请参见下面的操作。一旦建立,我们将(i)在Alice的那一侧创建一个驱动器,(ii)让Bob与Alice的内容同步,并且(iii)也启动Bob的SSB Drive客户端:

#本地演示步骤2 $ ./ssb/local/config.py -friends Alice Bob **朋友记录已更新$ ./ssb-drive.py -user Alice -new **已创建新驱动器,uuid = 9dfc8124-6a6b-5730 -9c04-5eed67ac770e#在一个终端窗口中启动Alice的客户端:$ ./ssb-drive.py -user Alice -port 7007 ...#在另一个终端窗口中,让Bob同步:$ ./ssb- drive.py-用户Bob -sync -peer localhost:7007:ID_OF_ALICE ...#并启动他的SSB Drive客户端:$ ./ssb-drive.py -user Bob -peer localhost:7007:ID_OF_ALICE

通过选择-tty选项,也可以在线路模式下运行SSB Drive应用程序。但是请注意,此模式尚不支持对等连接,即您将在给定用户的日志上工作,就像脱机一样:

$ ./ssb-drive.py-用户Alice -ttySecure Scuttlebutt驱动器客户端(v2018-08-21)。类型?寻求帮助。以未加密模式运行drv = 9dfc8124-6a6b-5730-9c04-5eed67ac770e(2018-08-22 21:44:21)cwd = / ssb_drv> help记录在案的命令(类型为help< topic>):====================================== = cat cd exit获得帮助ls mkdir放入pwd rm rmdir统计信息同步treesb_drv> '-dir1 / |-README.md'-dir2 / ssb_drv>出口