---
title: 安全投票签名
---

## 安全投票签名

此设计描述了其他投票签名行为，它将使该过程更加安全。

当前，Solana实现了一项投票签名服务，该服务会评估每个投票，以确保它不违反罚没的条件。 取决于硬件平台功能，该服务可能稍微不同。 特别是，它可以与安全区域 \(例如SGX\) 结合使用。 Enclave 可以生成非对称密钥，为用户\(不受信任的\) 代码公开API以签名投票交易，同时将投票签名私钥保留在其受保护的内存中。

以下各节概述了此体系结构的工作方式：

### 消息流

1. 节点在启动时初始化enclave

   - 快速生成非对称密钥，并将公钥返回给

     节点

   - 密钥对是短暂的。 节点启动时会生成一个新的密钥对。 一个

     新的密钥对也可能会在运行时

     根据待确定的密钥对进行生成标准。

   - Enclave 将其证明报告返回给节点

2. 节点执行enclave 的证明\(例如使用Intel的IAS API\)

   - 节点确保Secure Enclave在TPM上运行

     并且是由受信方签名

3. 节点的质押者授予临时密钥许可以使用其质押。

   这一过程有待确定。

4. 节点的不受信任的非安全区软件调用受信任的安全区软件

   使用其界面来签名交易和其他数据。

   - 在投票表决的情况下，节点需要验证PoH。 PoH验证

     是签名不可或缺的一部分。 Enclave 会

     在签名投票之前提供一些可验证的数据来进行检查。

   - 确定在不受信任的空间中生成可验证数据的过程

### PoH 验证

1. 当节点对条目`X`投票时，存在一个锁定期`N`，因为

   它无法在其历史记录中不包含`X`的分叉上投票。

2. 每次节点对`X`的导数投票时，让它为`X+y`，则

   锁定`X`的周期增加了`F`因子\(即持续时间节点无法对

   不包含`X`增加的分叉进行投票\)。

   - `X+y`的锁定期仍为`N`，直到节点再次投票为止。

3. 锁定期的增加上限为\(例如，系数`F`最大为

   32\)。

4. 签名区域不得签名违反该政策的投票。 这个方法

   意味着

   - 快速初始化为`N`、`F`和`因子上限`。
   - Enclave存储 `因子上限` 节点上的条目 ID 数量

     先前投票

   - 的签名请求包含新投票的条目ID
   - Enclave验证新投票的条目ID是否在正确的分叉上

     \(遵循上述规则 \#1 和 \#2 \)

### 祖先验证

这是另一种验证投票分叉的方法，尽管这种方法不太确定。 1. 验证节点在集群中维护一个活动节点集 2. 观察上一个投票周期活动集中的投票 3. 存储每个节点投票的祖先/上一次滴答 4. 发送新的投票请求进行投票签名服务

- 它包括来自活动集中节点的先前投票及其

  对应的祖先

  1. 签名人检查先前的投票是否包含来自验证节点的投票，

     并且投票祖先与大多数节点匹配

- 如果检查成功，它将签名新的投票
- 如果检查不成功，则断言\(引发某种报错\)

前提是验证节点最多可以被伪装一次，对不正确的数据进行投票。 如果有人劫持了验证节点并提交了对虚假数据的投票请求，那么该投票将不会包含在PoH中(因为它将被集群拒绝)。 验证节点下一次发送签名请求的签名时，签名服务将检测到验证节点的最后一票丢失了(作为

## 见上文第5点的一部分\)。

### 分叉确定

由于速度太快无法处理PoH，因此无法直接知道已提交验证节点投票的分叉历史。 每个enclave都应使用当前的公开密钥的_活跃集_来启动。 验证节点应提交其当前投票以及在其先前投票中观察到的活动集\(包括自身\) 的投票。 这样，enclave可以在验证节点上次投票的同时进行投票，从而对分叉进行投票。 验证节点最初提交的投票是不可能的，因为它没有‘上一个’插槽供参考。 为了解决这个问题，应该暂时冻结投票，直到第二次投票提交为止，在初始投票的高度，其中包含活动集中的投票及其自身的投票。

### Enclave 配置

质押的客户端应该是可配置的，以防止对不活跃的分叉进行投票。 该机制应该使用客户端的已知活动集`N_active`以及阈值投票`N_vote`和阈值深度`N_depth`来确定是否继续对提交的分叉进行投票。 此配置应采用这样的一种规则，以便客户端仅在`N_depth`观察到超过`N_vote`的情况下才对分叉进行投票。 实际上，这代表客户端确认它已经观察到一定深度的提交分叉的经济最终性，如果该分叉最终没有被使用，则额外的投票将需要锁定一段不必要的时间。

### 难点

1. 第一代可验证数据在不受信任的空间中

   用于PoH验证区块。

2. 需要将质押临时授权密钥的基础设施。
