Keybase加密网络服务初步体验

关于 Keybase

体验之前需要先了解 Keybase 到底是啥,维基百科上对 Keybase 的定义是基于 PGP 技术的社交网络平台,可以将用户的身份映射到公钥,反之亦然。最常见的用法就是 Keybase 做为公共的 PGP key server。Keybase 可以对用户的 Twitter、GitHub、Reddit 等社交网络账户提供身份验证功能。

做为开源项目,Keybase 提供的服务已经远不止这些了,除了在社交网络身份验证之外增加了域名、网站管理员以及比特币和 Zcash 加密货币地址的验证功能,目前还提供了不少扩展功能:

  • 端对端加密聊天通讯;
  • 类似 Slack 的加密团队聊天和协作;
  • KBFS 加密文件存储服务,支持公共文件和私有文件,公共文件支持静态文件托管服务;
  • 集成 Stellar(XLM)钱包(恒星币)功能,支持创建和导入 Stellar 账户,可以通过 Keybase 发送 XLM 给其它用户;
  • 加密 Git 代码仓库托管服务,用户可以创建自己的私有仓库。

PGP 加密

还是从最基本的 PGP 加密说起,在 Keybase 官网注册账户并安装客户端之后,用户可以把自己的 PGP 公钥上传到 Keybase。Linux 下我一般使用系统自带的 gpg(GnuPG)来管理密钥,gpg 的知识网上有很多这里就不做详细介绍了,Keybase 做为公共 PGP key server 还是比较好用的。

例如,我的 Keybase 用户名是 nocwat,欢迎大家添加好友,我已经把自己的 PGP 公钥上传到 Keybase 了,如果你需要在 Linux 系统里导入我的公钥就很简单:

~$ curl https://keybase.io/nocwat/pgp_keys.asc | gpg --import

如果你已经安装了 Keybase 客户端,也可以这样导入:

~$ keybase pgp pull nocwat

导入公钥之后,就可以用 gpg 再做加密、解密、签名、验证之类的操作了。

当然 Keybase 客户端也是直接支持 PGP 的这些操作了,例如:

~$ keybase encrypt -i input -o output user

注意

Keybase 可能觉得用户直接使用 PGP 的门槛太高太复杂,又自己搞了一套新的认证机制,可以参考这里:

Keybase’s New Key Model

新的认证机制使用 Keybase 设备密钥(device key)和 paper key(非常重要,可以更方便地认证 Keybase 设备),至于新的密钥系统则是基于 NaCl 新开发出来的 SaltPack,具体可以看看 Keybase Crypto Documents

对于 Keybase 这套新的认证机制,我不太好评价其优劣点。Keybase 用户的设备列表是所有用户都可见的,例如我的 Keybase devices,这里包含了所有已认证的设备和 paper key。

Keybase graph 里甚至还能看到 PGP key、device key、paper key 及其它已认证项目的对应关系图。从 graph 图里就能看到目前我还是最信赖自己的 PGP 密钥的。

提示

Keybase 也提供 PGP 私钥托管保存功能,Keybase 声称 PGP 私钥必须通过用户的 passphrase 才能解密,解密是通过浏览器客户端本地完成,服务器并不会保存 passphrase。这个托管功能并不是强制的,上传与否要看你是否足够信任 Keybase 了。

另外 Keybase 网页版也有一个 PGP Encrypt 页面提供 PGP 加解密等功能:

Keybase PGP Encrypt

PGP 私钥托管之后确实会方便不少,如果你的 PGP 私钥跟我一样没有上传到 Keybase 上托管,那这个页面只能使用 Encrypt 加密发送消息和 Verify 功能,Decrypt 和 Sign 功能必须通过 PGP 或 Keybase 客户端来完成。

加密聊天通讯

Keybase 端对端的加密聊天功能需要安装客户端才能使用,与其它聊天软件不同,即使其他人只有 Twitter、GitHub 等社交网络账户还没有注册 Keybase,你也可以通过 Keybase 发送消息给他们(直接指定社交网络账户名,而不需要知道 Keybase 账户名),待他们通过 Keybase 认证这些账户之后就能收到之前的消息。

你甚至可以直接通过 Keybase 发送消息给 PGP 公钥所有者,如果对方的 Keybase 账户添加验证了此 PGP 公钥就能收到消息。

Keybase 聊天的消息目前是基于 device key 和 paper key 进行加密的,而不是 PGP 密钥,Keybase 给出的解释是无需单独管理 PGP 密钥更有利于非技术人员使用。

Keybase 命令行 keybase chat 也可以进行简单的聊天,而且聊天功能还支持 JSON API 接口,可以很方便地实现聊天机器人之类的功能。

另外 Keybase 团队聊天同样也是端对端加密的,具体可以看看 Teams Crypto 的介绍。由于 Keybase 代码是开源的,因此总体看起来 Keybase 似乎是一个比 Telegram 安全性更高的即时通讯软件。

KBFS 文件存储

KBFS(Keybase 文件系统)的介绍可以参考 Introducing the Keybase filesystem,用户存入的所有文件都会自动签名加密。与聊天功能类似,所有 KBFS 数据都是基于 device key 和 paper key 进行加密的,而不是 PGP 密钥,因此 paper key 特别需要注意备份不能丢失。

KBFS 需要安装 Keybase 客户端才可以使用,Linux 下是基于 FUSE 实现的,Windows 则是基于常见的 Dokan 用户态文件系统了:

Keybase Windows Dokan Library

Keybase 客户端的 Files 里可以直接看到 private、public 和 team 三个顶层目录,分别对应用户私有、用户公共和团队文件:

KBFS 文件系统

我的私有文件在 Linux 上的访问路径是类似这样:/keybase/private/nocwat,Windows 上则是:k:\private\nocwat,公共目录则是:/keybase/public/nocwat

你也可以创建一个只有几个特定用户能访问的私有目录,类似这样:

/keybase/private/nocwat,xxx,yyy

对于公共目录,Keybase 还提供了 Keybase.pub 网站方便其它用户访问使用,例如我的公共目录地址就是:https://keybase.pub/nocwat/

Keybase.pub 还提供了静态文件托管网站功能,例如你可以直接访问下面的地址查看我放到公共目录的 Wiki 知识库:https://nocwat.keybase.pub/wiki/。其实这个地址就相当于访问我的 /keybase/public/nocwat/wiki 公共目录。

目前 Keybase 给每个用户提供了 250 GB 的 KBFS 存储空间,目前 KBFS 用户量还不是很多可能存在不稳定的问题,最好注意备份数据。

KBFS 文件系统可以直接看到空间使用情况:

KBFS 空间使用

Stellar 钱包

Stellar 是基于 Ripple 修改而来的支付网络系统,用户使用 Lumen(XLM)作为基础货币,可以通过 XLM 转账任意一种货币(可以是各国法定货币或者其它加密货币),其交易确认速度也非常快,有关恒星币的详细内容还请自行了解哦。

Stellar Lumens 加密货币(恒星币)的钱包功能同样必须安装客户端才能使用,目前所有 Keybase 用户都可以使用:

Keybase Stellar 钱包

Keybase 将聊天功能和钱包功能进行整合,你可以直接通过 Keybase 用户名而不是很长的 Stellar 钱包地址进行转账操作,当然也可以通过 Keybase 客户端转账给其它未使用 Keybase 的 Stellar 钱包地址。

目前 Keybase 正在搞 Stellar 空投活动,一共会发送 20 亿个 Lumens,只要 Keybase 账户的条件合格就可以每个月领到 Lumens,详情请参考 The Big Stellar Space Drop 页面的介绍。

Git 代码仓库

不得不说 Keybase 新推出的 Git 私有仓库托管服务才是我使用的原因,你可以通过 Keybase 客户端建立自己的私有仓库,也可以为团队建立代码仓库。Keybase 为每个用户和团队提供了 100 GB 的仓库存储空间,实际已经足够用了。Git 代码仓库同样是端对端加密的,只有自己或团队的密钥才能解密。

Keybase 的仓库托管服务是基于 Git 的 remote helpers 功能来实现的,因此仓库地址和常见的 GitHub 不太一样。例如下面是我建立的一个名为 ssicd 的私有代码仓库:

Keybase Git 代码仓库

使用 Keybase Git 仓库的机器上必须安装 Keybase 客户端(通过 git-remote-keybase 程序来实现),我就可以通过命令行来 clone 仓库:

~$ git clone keybase://private/nocwat/ssicd.git

接下来的使用方法就和其它 Git 仓库没什么区别了,只是 push 等操作时需要使 Keybase 客户端保持运行状态。

另外还有一个小窍门就是 Keybase Git 代码仓库中的文件是可以直接通过 KBFS 进行访问的,这样无需 clone 整个仓库就能下载其中的某个文件,例如上面我的私有仓库目录路径就是:

/keybase/private/nocwat/.kbfs_autogit/ssicd

路径中的 .kbfs_autogit 是表示 Git 仓库的特殊目录名,不过需要注意直接列举 /keybase/private/{user} 并不能看到这个目录,需要在目录路径中特别指定。

你甚至可以通过 KBFS 直接访问仓库的某个分支,路径形式如下:

/keybase/private/nocwat/.kbfs_autogit/ssicd/.kbfs_autogit_branch_develop

路径中的 .kbfs_autogit_branch_ 后面跟 Git 分支名称即可。

你如果想直接访问具体某个 commit 的数据,也可以指定 KBFS 路径:

/keybase/private/nocwat/.kbfs_autogit/ssicd/.kbfs_autogit_commit_XXXXXX

路径中的 .kbfs_autogit_commit_ 后面跟 commit 的完整 hash 值。

总结

Keybase 做为一个开源项目,基于 PGP 技术做了很多身份验证之外的扩展和改进,增加了很多加密相关的服务,例如端对端加密的聊天、协作、存储、钱包、Git 仓库等功能确实降低了用户使用门槛。我这段时间用下来还是比较方便的,不过国内某些网络下 Keybase 可能访问速度很慢或者干脆被墙了。

不过 Keybase 设计了新的认证机制而不是直接使用成熟的 PGP 可能会引起一些争议,另外可能由于集成了太多功能导致 Keybase 客户端稍显臃肿,现在 Windows 客户端安装包体积就已经有 180 多 MB 了。其实我倒希望 Keybase 能发布一个体积更小的纯命令行版本,或者能可选安装图形程序(我可能也只需要图形界面的聊天功能)。

目前 Keybase 我使用最多的场景就是 PGP key server、KBFS 文件存储和私有 Git 代码仓库功能了,由于基本没有添加好友,端对端加密聊天功能基本没有用到。

最后我写这篇文章时 Stellar(XLM)价格为 $0.06(0.000006 BTC)还非常低廉,哈哈,欢迎大家通过 Keybase 用户名 nocwat 或者 Stellar 钱包地址 给我打币。





*