从开发者角度的分析PressOne的第一篇

本文主要内容是对目前(截止至2019年3月)PressOne账号系统潜在问题的一些个人看法,是比较长远的问题,而不是短期急需解决的事情。由于PressOne长期的开发路线图并没有公开,不确定开发团队对文中问题的具体态度,不排除已经在路线图中。“露露盗号门”让我意识到公众号也属于黑产集团的目标之一,PressOne面对相似问题可能并不是那么遥远。

使用建议

放在前面怕太长不看,主要是避免丢号和盗号风险

  1. 要有一个页面来列举自己常用的press.one账号地址,其中至少要有一个用手机登录的小号
  2. press.one用户简介应该注明自己主要发布内容的平台,最好有链接
  3. 不要把press.one作为内容发布的唯一平台/渠道,首要考虑增加身份认证里面那些账号的订阅数,而不是PressOne账号的订阅数
  4. 签名的内容应该填写原发布平台和链接

账号系统分析

注册登录

目前PressOne的账号和比特币钱包是使用相同的模式,注册的时候直接在网页生成一个根密钥对,这个密钥的地址就是用户的PressOne地址。使用keystore文件登录时,服务器只是根据公钥来确定用户持有了私钥,并不保存私钥。优点是官方手上没有私钥,所以不能替代用户去签名和转账;另一方面也有很严重的缺点,如果用户丢失了keystore文件,或者忘记它的密码,官方无法提供找回密码的服务。

安全隐患

目前提供的3种登录方式,对应服务器保存的信息如下:

登录方式 保存公钥和地址 保存加密的keystore文件 保存keystore文件密码
keystore文件登录
邮箱+密码
手机

其中邮箱+密码登录和传统网络服务一样,存在社工撞库和数据库被拖库泄漏的风险。而手机登录,相当于把私钥上交到服务器,数据泄漏的后果更严重,官方内部也有操作账号去作恶的机会。

而看上去最安全的keystore文件登录方式,也没法和比特币钱包等同。因为目前只能通过press.one网站的注册页面去创建密钥对,不能自己本地创建密钥对然后再上传。而press.one密钥创建几乎是瞬间的,说明页面没花费很大的功夫去增加种子的随机性。密钥对的随机性不强,加上生成方式单一,很难使用加强比特币钱包安全性的那些方案去保护PressOne的密钥对。不过PRS token并不需要大量存储在PressOne账号上,转账到Mixin无手续费,或许目前的方案是足够的。

一旦账号被盗,并不能像其他服务那样靠修改密码解决问题,因为盗号者获取到的是密钥对本身,更新服务器上的keystore文件密码不能阻止盗号者登录。和比特币钱包一样,只要被盗就相当于作废。

密钥对模式的问题

对于大多数普通用户来说,可能之前完全没接触过类似模式的服务,一般来说完全去中心化的服务才会用。我除了比特币之外,用过的软件只有Bitmessage和ZeroNet是这样的。即便把群体限定在接触过比特币之类的加密货币的人里面,现在购买和交易也不一定需要自己保管密钥。我在Mixin上买币就完全没接触到密钥,想导入导出密钥都做不到,和2013年购买比特币的时候完全不一样。

所以丢号将来会是很普遍的现象,PressOne的目标用户群体并不只是加密货币投资者和程序员,密钥对模式完全不适合面向绝大多数普通用户。 丢号是普通用户面临的最大风险,和比特币不一样,损失的不止是账号里面的币,还有账号的订阅者,后续的打赏/合同收入。 要通知别人因为丢号已经更换PressOne账号也不是容易的事情,如果比特币私钥泄露/丢失,换比特币地址就是改一下简介说明,批量替换一下文章尾部的打赏链接,而PressOne具备类似微信公众号的内容发布平台的功能,会给作者和读者很大的迷惑性。如果订阅者只关注PressOne,而没去关注身份认证里面的账号,可能就觉得丢号的人无限期停更,不会发现新账号地址。

官方的责任和可能的解决方案

PressOne本身的模式就很特殊,它虽然采用了区块链技术,然而并不是去中心化的。和比特币、Bitmessage、ZeroNet这些开源项目不同,先推出的是网站 https://press.one 然后再逐步提供API提供给第三方Dapp使用。 官方的Dapp https://press.one 是不可替代的主接入点,以目前开放的API来说,第三方Dapp不具备在功能方面完全替代官方Dapp的可能。twitter和新浪微博的官方和第三方客户端大概就是这样的关系。

在我看来,官方团队可能是因为项目压力,为了短时间内提升用户体验,把一些本来应该让第三方去解决的事情自己抢着先做完,而没太考虑长期的风险。被攻击泄露数据之类的事情,如果是官方团队的问题,会影响用户对PressOne整个项目的看法,对有金融属性的区块链项目很不利。

邮箱和手机登录,应该都是为了手机app端登录需要而做出来的功能,其中手机登录已经和加密货币交易所/web钱包的性质相似,直接持有密钥就是把账户模式重新中心化,是为了迎合普通用户对易用性的要求牺牲掉安全性。这让第三方去做会更合适,官方可以给第三方机构做认证,把一定数量PRS作为押金和奖励,既能满足一般用户对易用性的要求,出事也不是官方背锅。

除了让第三方代持用户私钥,让用户不必自己保管keystore文件和密码之外。还有一个可能就是第三方作为中介,用户不必自己注册和使用PressOne账号,完全通过中介来执行所需的操作。前者的实现完全不需要API支持,但是需要官方监管和认证;后者能做到什么程度,取决于API开放多少接口。

以目前开放的API,用户授权第三方Dapp之后产生的密钥对,和用户的根密钥对在创建签名和合同方面具备同等权限。在一定程度上可以缓解丢号的影响,但是财务方面的操作似乎还不能饶过用户根密钥。

总结

  • keystore文件登录不适合绝大多数普通用户,容易丢失,被盗也无法补救
  • 现有的邮箱和手机号登录设计,让官方团队对用户账号安全存在直接责任,可能不是好事
  • 第三方可以把密钥对验证登录变成传统的中心化模式,但会存在风险和功能的局限性,官方可以考虑对第三方进行认证监管和开放更多API

回到开头的使用建议,1-3都是考虑账号丢失之后减少失联的风险,提前告知读者去哪里找新内容,4是为了账号被盗之后让其他人有区分签名是不是本人发布的依据