参与者
Nym Mix Nodes 由三部分构成:validators, gateways, 和 mix nodes。
max node 在网络中被统一叫作mixnet。mixnet 基于 Loopix 匿名系统进行设计。
Loopix 协议具备以下特点:
|
除了 Loopix 所具备的功能外,mixnet 还拓展了新功能:
可靠传输
可拓展性
sybil 工具防护
公平路由
服务质量测量
等
Validators
Validators 具备以下功能:
维护 Nym 区块链。Nym 区块链被用作分发网络信息的安全通道。分发的信息包括了:活动的节点和它们的公钥、网络配置参数、周期性随机的 beacons、参与者的 stake。nympool 的资金、从 nympool 中分发的资金信息。
分发凭证。分发的凭证有两种:
带宽凭证(Bandwidth credential):分发给用户的带宽凭证出示给网管以证明其流量允许在 mixnet 中流通。
服务凭证(Service credential):用来编码某些信息,这些信息用来表明对某个服务的使用权。
Service Providers。
信息流
[图 1] 表示了 Nym 数据的流动。黑色线条代表数据流,红色线条代表代币流。
将资金存储到 nympool 中以获取凭证。用户可以以某种方式(例如充值等)获取 NYM 代币。用户首先将代币充值到 nympool 中。比如用户将他们资金的一部分转为带宽凭证,其余部分转为服务凭证。然后 validators 以区中心化的形式为这些凭证添加 partial 签名。用户收集到一定数量的 partial 签名后就可以生成一个有效的凭证。
使用带宽凭证获取网关的访问权限。用户选择一个网管,然后证明使用带宽凭证证明他们具备对 Nym mixnet 的使用权。网管检查带宽凭证的有效性。
与网关建立临时 Nym。网关检查用户发送的带宽凭据在 Nym 区块链中是否被标记为已消费。然后,网关向验证者提交一份承诺书,承诺在区块链中公布凭证中编码的序列号。该承诺将带宽凭证标记为已使用,以防止其在未来重复消费。它还允许网关证明其路由的流量份额,从而获得相应的奖励。用户和网关建立一个共享秘密和一个 nym(即一个临时化名),与数据限额和有效期相关联。用户和网关之间交换的数据使用共享密钥加密,网关使用该假名跟踪用户消耗的流量。此外,用户还可将 nym 用作临时 mailbox 地址,在此接收网关缓存的下游数据。
通过 mixnet 路由流量。在带宽凭证消耗或过期之前,用户可以通过网关将流量发送到 Nym mixnet。mixnet 以匿名的形式路由用户的消息。每一步都使输入与输出不可链接。这就隐藏了哪个用户正在访问哪项服务或进行哪项交易,如 [图 1] 中的白色和阴影背景区域所示。maxnet 最后的一个节点将信息发送到接受者的网关,然后最后的接受者从网关中拉取信息。接受者可能是 service provideer、validator 或其它用户。
使用服务凭证证明对服务的使用权。
将收到的凭证标记为已使用。收到服务凭证的 provider 需要向区块链提交一个带有序列号的 commitment。commitment 是公开的以防止重复消费的问题。同事也允许 provider 根据凭证获得奖励。
通过 nympoll 分发奖励。
mixnet 网络级隐私
Nym 使用 [Sphinx] 包格式来加密和匿名路由数据。发送方以与路由反序的方式对 payload 进行加密。具体而言,消息根据接受者进行加密,其次根据倒数第二条进行加密,依次进行,最后为第一跳加密。最后消息还会通过为网关加密,然后网关将解密的数据包转发到 mixnet 中。
和洋葱网络对比 相比洋葱网络而言,mixnet 具备以下特征:
|
mixnet 还具备以下特征:
连续时间混合和指数延迟:mixnet 每个节点收到数据包后都会对其进行延迟,然后再进行转发。延迟的时间是预先写在 Sphinx 数据包中的,因此发送端可以配置延迟的容忍程度。
通过掩护流量实现不可观测性。
基于 SURB(Single Use Reply Blocks) 的可靠传输:
Nym 利用了连续混合网络提供的可预测的端到端延迟和 Sphinx 的 SURB 功能。SURB 是预先计算好的 Sphinx 包头,包含了以参与者为终点的混合网络路由。发送发可以生成一个或多个 SURB,并将其包含到发送给对方的 Sphinx 消息中。接收方可以根据 SURB 回复 ACK。
SURB 只能使用一次(为了防止重放攻击)。SURB 报头由发送方进行加密,因此回复方无法推断出中间结点信息。收件人必须知道回复路径的第一个混合节点的身份(通过收件人自己的网关)。SURB 包含了下面的信息:
Sphinx 报文的加密报文头。
应该向其发送信息的第一层混合节点的地址。
用于加密回复 payload 的密钥。