# OpenBlock 上线交易签名记录功能

By [OpenBlock Operation ](https://paragraph.com/@openblock-operation) · 2023-08-31

---

以太坊数字签名
-------

**数字签名**（又称公钥数字签名）是只有信息的发送者才能生成的他人无法伪造的一段字符串，这段字符串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名，但是使用了公钥加密领域的技术来实现的，用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算，一个用于签名，另一个用于验证。数字签名是非对称加密技术与数字摘要技术的应用。

以太坊使用的数字签名算法为双椭圆曲线数字签名算法（ECDSA），基于双椭圆曲线“私钥-公钥”对的数字签名算法。它主要起到了三个作用：

身份认证：证明签名方是私钥的持有人

不可否认：发送方不能否认发送过这个消息

完整性：确保消息（交易信息）在传输过程中无法被修改

在使用钱包时，一切的交互，不管是普通转账，还是操作 DApp，钱包都会弹出确认界面。当你点击“确认”后，实际上在钱包里已经完成了一次签名。

目前主流签名方式分为两类，链上签名和链下签名：

链上签名：签名结果直接上链，如转账、Approve USDT 给了某个地址、Mint、Claim 等

链下签名：签名结果不上链，该签名类型常被用于用户身份认证或偏中心化交易撮合，如主流 NFT 市场

恶意签名类型
------

### 恶意链上签名（交易上链并需要支付Gas fee）

#### Approve 钓鱼攻击

请不要点击任何非官方、来自第三方、钓鱼网站的链接，请不要点击Approve签名或授权。若不慎被钓鱼网站钓走钱包签名，为安全起见，请检查并取消异常授权，同时将钱包资产转移至没有安全风险的 OpenBlock 账户内。

### 恶意链下签名（不上链广播无需支付Gas fee）

目前主流链下交易签名攻击类型分别为 Eth\_Sign 和 Permit 签名（EIP-712签名）

_安全提示：签署链下签名无需支付 Gas fee、签名不上链不广播，同时在区块浏览器/交易记录中无法查询_

#### Eth\_sign 签名

**Eth\_sign** 是一个非常危险的签名操作，因为它是对交易的签名。eth\_sign 可以被用来签署任何类型的消息，包括交易和智能合约的指令，所以恶意的第三方可能会诱导你签署一条你并不完全理解的消息，导致你的资产被转移到他们的账户。更糟糕的是，他们可能会给你一条看似无害的消息让你签名，但实际上，这条消息可能是一条操作指令，一旦你签名，你的资产，包括原生资产 ETH，就会被转移到黑客的账户地址。如果在交互网站或者DApp时发现弹出该类签名，请千万不要随意签名。

目前 OpenBlock 已针对 Eth\_sign 签名进行针对性风险提示：

![Eth_Sign 签名风险提示](https://storage.googleapis.com/papyrus_images/0ffecaf596513cbf3d72108c4e451a36aa51017f1ab365d26527b20cfdbaffa6.png)

Eth\_Sign 签名风险提示

除此之外，还有一种钓鱼攻击方式：在你拒绝上述的 Eth\_sign 签名后，它会在你的钱包内自动显示另一个签名框，趁你不注意诱导你继续签名。而签名内容使用了 **SetApprovalForAll** 方法，同时 Approved asset 的目标显示为 All of your NFT，也就是说，一旦你签名，骗子可以轻松盗走你所有的 NFT 资产。

#### Permit 签名（EIP-712签名）

**Permit** 同样是一个非常风险极高的签名操作。用户不用事先授权，就能通过附加一个授权签名（permit）与应用合约交互。具体来说，我们都知道在 ERC20 币种的交易中，A 可以调用 approve 函数来对 B 进行授权，即将 A 指定的代币授权给另一个账户操作，并且必须是这个账户的 owner 才可以调用 approve 函数。而 permit 函数的作用是，A 提前在链下对授权对象进行签名，得到的签名告知给 B，B 就可以拿着这个签名去调用 permit 来实现 A 的授权操作（获得 allowance 使用 transferFrom 来进行转账），A 在不发送交易的情况下就能对指定代币进行转账，并且无论是不是这个账户的 owner 都可以执行 permit 进行授权操作。

OpenBlock 签名记录功能
----------------

基于 MPC 安全方案，OpenBlock MPC 单元将自动记录账户创建后的每一笔链上 & 链下交易签名，并将签名信息展示在数据看板“签名”页面。

目前 OpenBlock 签名功能已支持显示签名类型、是否上链广播、详细签名信息等内容，便于用户自行辨别账号是否有安全风险敞口。

功能展示如下：

链上签名信息

![签名信息内容构成](https://storage.googleapis.com/papyrus_images/5b402f910a674e77cd086d03f52ecceb1d971b6a667667004bed8b61d64065d9.png)

签名信息内容构成

![链上签名记录](https://storage.googleapis.com/papyrus_images/a59142e5fc6676bfe25191184cc95b41923770d40b37c75e754917ce377c92dc.png)

链上签名记录

链下签名信息（链下信息无“✔️已确认”和“❌正在确认”提示框）：

![链下签名记录](https://storage.googleapis.com/papyrus_images/a6b834b0b46c288e55d06ff693ec4a74159f1dd8f2da08b98c7533abb2f2346b.jpg)

链下签名记录

目前OpenBlock签名记录功能仅作记录所有账号创建后发生的链上及链下签名信息，目前链下签名信息无法撤回或修改，链上签名可以在交易 Pending 期通过设置高 Gas fee 抢先完成交易替换先前的交易签名。若账号已暴露在安全风险敞口下，请尽快使用 OpenBlock 内置授权功能取消已授权代币或尽快将资产转移至无安全风险的新 OpenBlock 账户中。

![在代币授权页面可以点击“取消授权”按钮取消有风险敞口代币的授权](https://storage.googleapis.com/papyrus_images/5177f28d2a619c051d013544062257a3e91532a867b2236967073342dbfe96aa.png)

在代币授权页面可以点击“取消授权”按钮取消有风险敞口代币的授权

_安全提示：OpenBlock 安全团队在此提醒：_

1.  _请对所有要求使用 Eth\_Sign 和 Permit 签名的请求保持警惕，尤其是来源不明或者不可信的请求。若对请求的真实性或目的存在疑虑，千万不要轻易签名。_
    
2.  _请确保处理的消息或交易请求来自于可信赖的途径，如官方网站、官方社交媒体或已验证的通讯渠道。切勿信任来源不明的链接、邮件或私人信息。_

---

*Originally published on [OpenBlock Operation ](https://paragraph.com/@openblock-operation/openblock-7)*
