私钥和签名
DeGate协议需要用到两种签名方式
ECDSA(椭圆曲线数字签名算法)是DSA(数字签名算法)的椭圆曲线实现。椭圆曲线密码术能够以较小的密钥提供与RSA相对相同的安全级别。了解更多>
EdDSA(爱德华兹曲线数字签名算法)是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。签名创建在EdDSA中是确定性的,其安全性是基于某些离散对数问题的难处理性,因此它比DSA和ECDSA更安全,后者要求每个签名都具有高质量的随机性。了解更多>
资产私钥
资产私钥是用户通过以太坊钱包私钥签名生成的EdDSA私钥,用于发起DeGate内各种操作请求。用户登录DeGate账户时需要先解锁账户,即派生出资产私钥,临时存放在本地浏览器的session中。
ECDSA签名需要用户在钱包确认,例如下图MetaMask网页插件。
ECDSA签名类型
DeGate协议支持3种ECDSA的签名和验签方式
开放式签名(ETH_Sign)
结构化签名(EIP-712):https://eips.ethereum.org/EIPS/eip-712
智能合约支持(EIP-1271):https://eips.ethereum.org/EIPS/eip-1271
用户请求与签名
节点同时验证ECDSA签名和EdDSA签名,电路仅验证EdDSA签名,合约仅验证ECDSA签名
操作请求 | 用户发起的签名类型 | 验签方 |
---|---|---|
开通账户 | ECDSA | 节点 -> 合约 |
重置资产私钥 | ECDSA | 节点 -> 合约 |
解锁账户 | ECDSA | 节点 |
提现 | ECDSA+EdDSA | 节点 -> 电路 -> 合约 |
转账 | ECDSA+EdDSA | 节点 -> 电路 |
创建订单 | EdDSA | 节点 |
创建网格策略 | EdDSA | 节点 |
订单成交 | 下单时的EdDSA签名 | 电路 |
注册交易对 | ECDSA+EdDSA | 节点 -> 电路 |
ECDSA+EdDSA | 节点 -> 电路 | |
取消订单 | EdDSA | 节点 |
链上取消订单 | ECDSA+EdDSA | 节点 -> 电路 |
链上取消网格策略 | ECDSA+EdDSA | 节点 -> 电路 |
领取挖矿奖励 | ECDSA+EdDSA | 节点 -> 电路 |
注1️:付费入账支持通过钱包支付与DeGate账户支付,此处表示后者情况
签名有效期
提交请求的ECDSA和EdDSA签名中都加入了有效期(ValidUntil)字段,验签时,首先判断签名是否在有效期内,才会继续执行。
生成和更新资产私钥
开通账户时要完成两次ECDSA签名,第一次签名后生成资产私钥,签名内容包含了DeGate智能合约地址与KeyNonce。KeyNonce初始为1,之后每次重置账户都会加1,由DeGate节点链下存储。
第二次签名会提交AccountUpdate
请求,用来关联钱包地址、AccountID、资产私钥对应的公钥,这些数据会通过零知识证明,同时更新到默克尔树,最后提交到智能合约进行验证。
重置资产私钥的过程与开通账户一样,区别在于每次KeyNonce+1。
私钥安全
DeGate协议和degate.com不会访问也无法访问用户的以太坊钱包私钥。
资产私钥临时保存在本地浏览器SessionStorage,关闭浏览器标签时会自动清除。SessionStorage不支持跨域名和跨Session访问,所以是安全的。
DeGate实施了前端安全隔离方案,将前端网站拆分成「前端普通代码」和「前端核心代码」。前端核心代码用于和以太坊钱包互动,调用资产私钥进行签名,并与前端普通代码通信。而前端普通代码只负责站点功能,无法直接访问私钥。未来计划将前端核心代码部署到去中心化的平台服务之上,使其不可更改,进一步提升私钥安全性。
请保护好你的私钥
如果用户的资产私钥遭到泄露,虽然攻击者无法直接提现和转账,但可以在DeGate交易所上用非常低的价格出售用户的资产,并作为交易对手方来获利。
如果你认为资产私钥已经泄露,请立即使用「重置资产私钥」功能,这样已泄露的私钥就会失效。
Last updated