深夜来发个小折腾,玩家声望数据库

2021-08-25 02:05:31 +08:00
 phoenixlzx

起源是一些 Minecraft 服务器主之间的讨论,共享行为恶劣的玩家 ID 以早做预防。类似话题讨论多了之后便有了一个类似 “云 ban” 的系统,即共享 banlist 。但是这些设计通常有些弱点:

于是就引出了这个小项目:Minecraft Player Reputation Database “Minecraft 玩家声望数据库”。

它的基本原理非常简单,即

  1. 通过他人无法篡改的方式来提供数据交换。
  2. 使用数值来量化“声望”。

于是就有了两种实现思路:

由于时间略紧想快就只做了中心化的方案(因为可以 CRUD 直接出样品)。

任何人都可以向中心服务器提交签名的声望数据,作为服务器管理员则可以只获取信任签名的数据并在本地基于信任度对声望数据做加权处理,最后得出一份本地的声望数据,即可根据这份数据做进一步的操作。

项目主页(包括服务端实现和一些客户端实现): https://openmprdb.org

类似的思路可以推广到任何基于 ID 的平台,不仅仅是 Minecraft 。由于平时没什么时间所以各种设计实现都还比较粗糙,欢迎各路大神吐槽批评哈哈)

2727 次点击
所在节点    分享创造
8 条回复
halfcrazy
2021-08-25 02:13:54 +08:00
以前收游戏用过一个 steam 的 https://steamrepcn.com/
boboliu
2021-08-25 04:48:59 +08:00
用 PGP 好处还是很大的,信任网络的机制足够灵活

现在比较困难的部分反而可能是对于部分 mc 服主的学习成本,有几个想法:
- 创建 keypair 和签名的部分可能可以用 keybase 来简化?但是 keybase 似乎不会把它的 keyserver 直接暴露,可能需要其他的东西,比如这个 https://github.com/anapsix/keybase-keyserver-proxy
- 为了对 pubkey 方便访问,卷菊苣可以考虑自己整个 keyserver
- 有了 keyserver 之后,接口就没必要发完整的 pubkey 而是 id 就可以了
- 有了上面两条之后,信任网络( key 的 sign )就可以灵活更新了
- 此时可以构建一个相对直白的 index 和 graph,提供比较权威 key 的 sign key 动向啊什么的,或者在已知某 key 时获取该 key 及其信任 key 签名的列表
totoro625
2021-08-25 08:28:28 +08:00
① mc 盗版用户偏多,服务器绝大部分没有开正版验证,导致用户注册新账户非常容易
② 正版账户改 ID 也很简单

解决办法:
① 正版验证
② 邀请制注册或限量邀请码
③ 注册用户内审机制,对于新注册的用户跟踪一段时间
④ 类似于 keybase 要求认证身份,用微博、贴吧、qq 、微信等方式认证身份
2i2Re2PLMaDnghL
2021-08-25 10:10:07 +08:00
话说 PGP 的 Keyserver 采用了一种半中心化机制
所有的 keyserver 间进行仅新增的同步,所有数据不可修改删除,密钥无效化必须通过新增一条密钥删除记录实现。
基于这种想法呢?
zjyl1994
2021-08-25 11:24:42 +08:00
好耶,是卷老师(喵窝鸽子路过
phoenixlzx
2021-08-25 14:07:33 +08:00
@boboliu 没有必要 keybase,中心服务器存储的公钥只是用来验证公钥本身有效性的,不然签名没法验证哇(

@totoro625 你可能需要了解一下正版是有 UUID 这个东西的,跟你用什么游戏 ID 没有关系。至于盗版...谁关心?

@2i2Re2PLMaDnghL 虽然这里没有设计 keyserver,但是删除从规则上禁止的话怎么保证中心服务器没有**有意图**地删除某些数据?
2i2Re2PLMaDnghL
2021-08-25 14:50:35 +08:00
@phoenixlzx PGP 本来就考虑到作恶者存在,所有 keyserver 进行完全仅新增同步,除非某一个 keyserver 程序上进行持续屏蔽,影响也仅限于此服务器。不是单一中心服务器,而是多个中心服务器相互同步,单一服务器作恶只会影响只使用这个服务器的用户。
我的意思是,像 PGP 体系那样采用『去中心化的服务端间结构』和『多中心化的服务端-客户端结构』的混合半中心化结构。
更有效地,可以将「某个服务器提供的所有声望数据」作为打包和签名的粒度,这样不太会产生包庇玩家的行为。
phoenixlzx
2021-08-25 15:58:31 +08:00
@2i2Re2PLMaDnghL 我觉得这个放在客户端上实现也可以,目前的客户端设计基本都是可以支持多个“中心服务器”的。

不过中心服务器之间互相验证数据也可以算是互相监督,提升中立公平和透明的方案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797820

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX