在“链上城”里,每个居民都领到两件宝贝:一枚只有自己能按下的私人印章(私钥),和一张贴在门口、人人可看的印章备案卡(公钥)。你写交易时用私人印章盖下去,别人拿着备案卡一比对,就知道这封信确实出自你手。整个过程不需要你把印章交给对方,也不需要某个中心帮你保管密码。这就是公钥密码学的直觉:私钥签名,公钥验签。区块链上的账户、转账、投票、锁仓,靠的都是这套机制。这篇文章会先讲身份与签名,再走进椭圆曲线的数学迷宫,看看传统 ECDSA 如何用“随机墨量”完成签名,新一代 Ed25519 又是怎样让签名更快、更安全。最后落到多签、预言机和 Layer2 等真实工程场景。你会发现,私钥就是所有权,而一个随机数失误,可能会让整座宝藏失守。
理解公钥密码学,你才能看懂钱包、交易所和智能合约的权限设计;在真正涉及资产安全的技术选型中,这是不可绕过的底层能力。
目录
可视化演示
展示区块链公钥密码学三大核心:签名验签流程(私钥SK+消息MSG→签名SGN 64B / 公钥PK+消息+签名→验证OK/NG不可伪造不可抵赖)、ECDSA vs Ed25519对比(ECDSA P-256 1x速度 vs Ed25519 3x速度+抗侧信道+确定性签名现代首选)、链上身份授权(SK→PK→Keccak256哈希→地址0x→账户 / TX交易SK签名→PK验签→上链),三模式切换理解区块链密码学全流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+C1+'
身份与签名:一私一公
在链上城,每个账户都是一扇贴着备案卡的门。门的钥匙不是传统的“一把钥匙开一把锁”,而是一枚私人印章:你握有私钥,可以在交易文书上盖章;别人拿着你的公钥备案卡,可以核对章的真伪。奇妙的是,备案卡不能倒推出印章的形状,所以公钥可以贴得满街都是,私钥却必须永远藏好。这套关系构成了区块链账户体系的起点:身份靠密码学证明,而不是靠用户名和密码。
这种“签名用私钥、验签用公钥”的方式,在密码学中叫作非对称密码学。传统密码学加密和解密用同一把钥匙,像一把钥匙开一把锁;非对称体系则把钥匙拆成两半:私钥负责签名,公钥负责验证。在区块链上,节点不需要知道你是谁,只需要用公钥检查“这笔交易是否由对应私钥持有者亲手盖章”,就能确认交易合法。
一个合法的数字签名,要满足“只有私钥持有者能产生,所有持有公钥的人都能验证”。如果任何人能用一个公钥验证某条消息的签名,那么这条消息就带有强烈的人证属性:签名者不能抵赖,攻击者不能伪造。
所以,在链上世界里,“证明你是你”不再需要交出身份证,只需要用私钥对交易盖一次章。私钥一旦丢失,就等于失去了唯一的签名能力;私钥一旦泄露,攻击者就可以冒充你花掉所有资产。这也是为什么老玩家总说:不懂密钥管理,就别碰大额资产。
- 私钥签名签名者把私钥 \(d\) 和消息 \(m\) 一起送入签名算法,得到签名 \(\sigma\)。
- 公钥验签验证者拿到公钥 \(Q\)、消息 \(m\) 和签名 \(\sigma\),输出真或假。
- 成立的等价条件验签通过,当且仅当签名确实由匹配 \(Q\) 的私钥 \(d\) 生成。
椭圆曲线基础:单行道迷宫
如果只把“单向门”停留在比喻层面,还不足以支撑密码学。真正工程中使用的,是一条神奇的数学曲线——椭圆曲线。它并不是一个椭圆,而是一个满足特定方程的点的集合。把这条曲线想象成一座巨大的单行道迷宫:从入口沿着固定的路径走到某个出口,非常轻松;但从出口倒推入口,却难如大海捞针。
区块链常用的 secp256k1 曲线,定义在“有限域”上。意思是,曲线上的坐标不是连续的实数,而是 \(0\) 到 \(p-1\) 之间的整数,所有加减乘除都按模 \(p\) 取余。这样一来,原本光滑的曲线变成了一堆离散点,攻击工具也失效了大半。曲线的形状由参数 \(a\)、\(b\) 决定,所有参与者使用同一组公开参数,才能保证签名可互验。
这条曲线真正核心的数学难题叫椭圆曲线离散对数难题:已知一个整数 \(d\) 和基点 \(G\),可以快速算出 \(d \times G = Q\);但反过来,已知 \(Q\) 和 \(G\),想推算 \(d\),在目前的计算能力下几乎不可能。这个“正向容易、反向极难”的性质,就是公钥可以被公开的底气。
这就像一座设计精妙的迷宫:每个点都清清楚楚印在地图上,但出口到入口之间没有捷径。攻击者只能把整座迷宫翻个底朝天,而这座迷宫的规模大到人类所有计算机算到宇宙尽头也算不完。单向性,是公钥敢公开在链上的第一块基石。
- 有限域 p曲线上的点坐标全部落在 \(0\) 到 \(p-1\) 之间,运算会取模。
- 曲线参数 a、b\(a\)、\(b\) 决定曲线的具体形状,同一生态必须使用同一组公开参数。
- 等式本体满足 \(y^2 = x^3 + ax + b \pmod{p}\) 的离散点,就是椭圆曲线点群。
密钥生成:掷骰子与派生公钥
在链上城,没有人能替你“注册”身份,你的身份诞生于一次掷硬币。私钥本质上是一个随机大整数,相当于你随机抛 256 次硬币,把正反结果拼成一个二进制数。这个数必须在曲线的阶 \(n\) 范围内,且不能为 0。随机性必须来自密码学安全随机数生成器,而不是 Math.random() 这类可预测的伪随机源。
有了私钥 \(d\),公钥并不是另找一把锁,而是用同一个单向迷宫算出来:公钥 \(Q = d \times G\)。这个式子看起来像普通乘法,其实是把基点 \(G\) 自己“加”自己 \(d\) 次。由于椭圆曲线的点加运算可以做到很快,你会感觉电脑一眨眼就完成了;但要从 \(Q\) 倒推出 \(d\),就撞上了离散对数难题。
为了让地址更短、更方便展示,区块链通常还会把公钥再经过哈希和校验编码,生成一串人类可读的地址。因此,地址只是公钥的“指纹”,不是公钥本身;而公钥又是私钥的“单向影子”。整个链条是:随机数 → 私钥 → 公钥 → 地址。
如果把私钥比作一枚印章,公钥就是印章在墙上留下的公开拓片,地址则是拓片的缩略图。你可以在街上贴满拓片,但没人能根据拓片复刻出印章内部的纹理。随机性好,私钥才无法被猜中;单向性硬,公钥才不怕暴露。
- 私钥 d从区间 \([1, n-1]\) 中均匀随机选择的大整数,是账户所有权的唯一凭证。
- 基点 G曲线上预先公开的生成元,所有人都从同一起点开始计算。
- 标量乘法\(d \times G\) 表示把 \(G\) 重复做点加 \(d\) 次,等价于沿着迷宫走 \(d\) 步。
ECDSA机制:盖章的配方
ECDSA(椭圆曲线数字签名算法)是区块链世界最常见的“盖章配方”,以太坊和比特币的早期账户体系都依赖它。想象你要写一封交易信,先把它压缩成一串固定长度的“消息摘要”,再取出你的私人印章,蘸一次随机调配的“墨量”,用力盖下去。这个“墨量”就是临时随机数 \(k\)。
流程是这样的:首先用哈希函数把交易消息压缩成整数 \(z\);然后生成一个临时随机数 \(k\),计算点 \(R = k \times G\),取 \(R\) 的横坐标作为签名第一部分 \(r\);最后用私钥 \(d\) 配合 \(z\)、\(r\)、\(k\) 计算签名第二部分 \(s\)。最终签名就是 \((r, s)\),像一张盖了章的凭证。
验证方拿到 \((r, s)\) 后,并不需要私钥,而是利用公钥 \(Q\) 重新组装出一个点,检查它的横坐标是否等于 \(r\)。如果消息被篡改,哪怕只改了一个字节,验签也会立刻失败。攻击者没有私钥,几乎不可能构造出能通过验签的 \((r, s)\)。
这个公式有一个非常致命的雷区:如果两次签名使用了同一个“墨量” \(k\),攻击者就能通过两个签名反推出私钥。盖章配方本身没问题,但墨量绝不能重复。 这种对随机数的高要求,正是下一代算法 Ed25519 想要解决的问题。
- 消息摘要 z用哈希函数把任意长度消息压缩成与曲线阶 \(n\) 相关的整数。
- 随机点与 r临时随机数 \(k\) 乘基点 \(G\) 得到点 \(R\),取横坐标得到 \(r\)。
- 核心签名方程用 \(k\) 的模逆元乘以 \(z + r d\),得到 \(s\)。
EdDSA签名:新一代防伪印章
Ed25519 是 EdDSA 算法在 Curve25519 曲线上的一种实现,可以看作新一代全自动防伪印章。它不再要求你每次手动调配随机墨量,而是用密码学哈希从消息和私钥中“榨”出确定性的随机数 \(r\)。同一份消息,无论盖多少次章,墨迹完全相同;不同消息,墨迹又完全不同。这从根本上消灭了“随机数重复”这颗定时炸弹。
在 Ed25519 中,私钥 \(a\) 通过 SHA-512 扩展成两段:一段用于推导公钥 \(A = aB\),另一段用来结合消息生成确定性随机数 \(r\)。签名第一步计算 \(R = rB\),第二步计算 \(S = r + H(R, A, M) \cdot a\),最终签名 \((R, S)\) 只有 64 字节。相比 ECDSA,它的曲线参数更优,验签更快,数学设计也更简洁。
同时,Ed25519 非常重视防御“侧信道攻击”。传统实现中,如果乘法时间或功耗泄露了密钥信息,攻击者可以像小偷透过窗户观察你盖章的力度一样,一点点猜出印章纹理。Ed25519 的常数时间实现,让每一次计算都像机器人盖章,力度和速度完全一致,不给你任何观察窗口。
如果把 ECDSA 比作需要细心调墨的手工印章,Ed25519 就是一台内置墨盒的自动印章:它不需要用户保证随机数质量,也不容易留下时间侧信道痕迹。现代的 Solana 等公链正是看中这一点,把 Ed25519 作为账户签名的主力算法。
- 确定性随机数 r由私钥的哈希扩展段和消息 \(M\) 一起哈希得到,而不是依赖外部随机源。
- 第一分量 R\(r\) 乘以基点 \(B\),得到签名前半部分。
- 第二分量 S把消息哈希、公钥 \(A\)、私钥 \(a\) 组合进方程,生成后半部分。
安全与挑战:墨量不能重复
在链上城里,最可怕的不是算法被公开,而是“随机墨量”被偷偷记下。对于 ECDSA 来说,临时随机数 \(k\) 是签名方程里的隐藏变量;如果两个签名用了同一个 \(k\),攻击者只要拿到两条签名和对应的消息摘要,就能像解二元一次方程一样,把私钥解出来。这不是理论恐吓,历史上 PlayStation 3 的签名系统就是因为固定 \(k\) 被黑客整个攻破。
假设两次签名使用了相同的 \(k\),那么它们的 \(r\) 相同,只有 \(s\) 因消息摘要不同而不同。两个方程相减,\(k\) 会直接暴露;知道 \(k\) 之后,私钥 \(d\) 也就成了案板上的鱼。真实世界中的一些区块链盗币事件,正是因为随机数生成器损坏或实现复用 \(k\),导致大量私钥被逆向出来。
除了随机数漏洞,攻击者还会盯着侧信道、木马钱包甚至物理入侵。量子计算虽然对椭圆曲线构成长期威胁,但目前还远未到实用阶段。真正决定资产安全的,往往是密钥管理:私钥是否离线保存、是否做了多签分片、是否使用硬件钱包。链上没有客服,没有“找回密码”,一把钥匙对应一座金库,钥匙的整个生命周期就是你的安全防线。
- 两式相减两次签名的 \(s_1\)、\(s_2\) 中,唯一不同是消息摘要 \(z_1\)、\(z_2\)。
- 反解 k模 \(n\) 下做除法,即可恢复临时随机数。
- 再求私钥把 \(k\) 代回任一签名方程,私钥 \(d\) 随之暴露。
区块链落地:从签名到生态
公钥密码学最终要落到真实的区块链产品中。在典型的账户模型下,每笔交易都携带签名,节点用公钥验签通过后,才允许修改链上状态。为了缩短地址长度,公钥会先被哈希成“指纹”,再经过校验编码展示给用户。你看到的一串钱包地址,本质上是公钥的浓缩身份卡。
但单个私钥只有一把钥匙,一旦丢失或被盗,资产就全没了。于是工程上出现了多签授权:一个账户绑定多把公钥,规定需要其中 M 把对应私钥共同签名,才能发起转账或修改关键参数。这就像金库不再由行长一人掌印,而是需要三位董事同时盖章才能打开,单点风险被显著摊薄。
再往外看,区块链的“链上确定性”和“链下灵活性”之间,需要桥梁。预言机用私钥对链下采集的价格或事件签名,链上合约验签后安全写入;Layer2 则把成千上万笔交易在链下聚合,由一个签名批次提交到主网,既降低手续费又保持可验证性。
从私钥签名到公钥验签,从多签金库到预言机、Layer2 桥接,公钥密码学像一根看不见的钢筋,贯穿了区块链的账户、交易和跨链协作。理解它,你才真正看懂了链上世界“谁说了算”的底层逻辑。
- 公钥哈希先用 SHA-256 压缩公钥,再用 RIPEMD-160 缩短,得到约 20 字节的摘要。
- 校验编码加上版本字节和 4 字节校验和,用 Base58 编码避免混淆字符。
AI 应用场景
场景一:Web3 钱包登录与交易签名
阶段:身份认证与授权阶段
解决的问题:传统网站用账号密码登录,容易被钓鱼、撞库,且密码一旦泄露,整个身份就归攻击者所有。区块链钱包用“私钥签名,公钥验签”替代密码,后端不需要存储任何用户秘密。
具体案例:用户点击 DApp 的“连接钱包”按钮,钱包客户端让用户用私钥对一段随机登录消息签名;后端拿到签名和用户公钥,执行 ECDSA/Ed25519 验签,确认身份后发放会话凭证。用户每次转账时,钱包再用私钥签名交易,节点验签后入账。
场景二:交易所大额提币多签审批
阶段:资产安全风控阶段
解决的问题:冷钱包或托管钱包如果只有一把私钥,内部作恶或外部盗取都会造成灾难性损失。多签机制要求多把私钥共同签名,才能放行大额提币。
具体案例:某交易所将热钱包的提币权限分散到 5 个离线私钥分片中,任何一笔超过阈值的提现请求,都需要至少 3 个分片完成签名。每个分片由不同负责人保管,审批流和签名记录全部上链,形成可审计的授权链路。
场景三:预言机与 Layer2 桥接验签
阶段:链下数据与扩容消息的验证阶段
解决的问题:区块链无法主动访问链下数据,也难在高吞吐场景下链上逐笔处理。预言机和 Layer2 需要用签名把链下事实“钉”到链上,保证链下数据的可信传递。
具体案例:去中心化预言机用 Ed25519 对资产价格和随机数结果签名,链上合约验签后更新价格预言;Layer2 运营方把大量用户交易聚合成一个 Merkle 根和聚合签名,提交到主网,由主网合约验签后完成批量状态更新。
Python 演示
from hashlib import sha256 # secp256k1 参数P = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2FN = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)A = 0B = 7 def inv(x, m): return pow(x, -1, m) # 有限域里的“除法” def add(p1, p2): if p1 is None: return p2 if p2 is None: return p1 x1, y1 = p1 x2, y2 = p2 if x1 == x2 and (y1 + y2) % P == 0: return None if p1 == p2: lam = (3 * x1 * x1 + A) * inv(2 * y1, P) % P else: lam = (y2 - y1) * inv(x2 - x1, P) % P x3 = (lam * lam - x1 - x2) % P y3 = (lam * (x1 - x3) - y1) % P return (x3, y3) def mul(k, point): res = None while k: if k & 1: res = add(res, point) point = add(point, point) k >>= 1 return res def hash_int(m): return int.from_bytes(sha256(m).digest(), 'big') % N def sign(m, d): z = hash_int(m) # 仅供教学演示:不要把演示 nonce 用于真实环境 k = int.from_bytes(sha256(m + b'nonce').digest(), 'big') % N or 1 x1, _ = mul(k, G) r = x1 % N s = inv(k, N) * (z + r * d) % N return (r, s) def verify(m, q, sig): r, s = sig if not (1 <= r < N and 1 <= s < N): return False z = hash_int(m) w = inv(s, N) u1 = z * w % N u2 = r * w % N x, _ = add(mul(u1, G), mul(u2, q)) return x % N == r if __name__ == '__main__': d = 0xE6C157D396F51A6F4D38B1C6D0C0E8F6F3D9B8C8A6F1B0E4C1A3B5D7F9A2C0D1 q = mul(d, G) m = b'Alice sends 5 ETH to Bob' sig = sign(m, d) print('signature:', sig) print('verify:', verify(m, q, sig)) print('tampered:', verify(m + b'!', q, sig))
def inv(x, m): return pow(x, -1, m)实现有限域中的“除法”,椭圆曲线公式里的斜率必须用它计算。lam = (3 * x1 * x1 + A) * inv(2 * y1, P) % P点在曲线上自己与自己相加时的斜率,对应“加倍”运算。def mul(k, point):用二进制展开实现标量乘法,把“加 k 次”优化成双重循环。s = inv(k, N) * (z + r * d) % N正是正文中的 ECDSA 核心签名方程。x, _ = add(mul(u1, G), mul(u2, q))验签时用公钥重新组合点,检查横坐标是否等于 r。print('tampered:', verify(m + b'!', q, sig))消息哪怕多一个字节,验签也会立刻失败。
常见误区
误区“钱包地址不是一把公钥吗?那大家看到地址不就等于拿到公钥了?” 我经常以为地址和公钥是同一个东西,直接拿地址去验证签名。
正解地址通常由公钥经过 SHA-256、RIPEMD-160 哈希和 Base58Check 编码生成,只是公钥的“指纹”。你可以根据公钥算出地址,但很难从地址还原公钥。验签时,链上通常先从交易中提取公钥,再核对地址,而不是把地址当作公钥本身。
为何常见:用户界面只展示地址,很少直接展示公钥,导致大家把“账户标识”和“验证密钥”混为一谈。
误区“手机 App 都能找回密码,区块链钱包应该也有‘重置私钥’的入口吧?” 我以为联系客服就能恢复账户。
正解区块链没有中心管理员,私钥就是所有权的唯一凭证。私钥丢失意味着任何人都无法代替你签名,账户资产将永久冻结;私钥泄露则意味着任何人都能冒充你转走资产。助记词本质上也是私钥的一种备份,同样需要离线妥善保管。
为何常见:我们习惯了 Web2 的“忘记密码→手机验证码→重置”流程,忽略了去中心化世界里“没有客服”的残酷规则。
误区“Ed25519 签名更短、速度更快,那所有区块链都应该马上从 ECDSA 换到 Ed25519 才对。”
正解Ed25519 在很多维度上确实更优,比如确定性随机数、抗侧信道、64 字节短签名。但选型还要看生态兼容性:以太坊等 EVM 链的账户体系、地址生成和大量合约都深度绑定 ECDSA secp256k1,硬切换会产生巨大的迁移成本和兼容风险。新链选 Ed25519 是合理的,老链升级则需要权衡。
为何常见:人们容易用“新算法比旧算法好”的简单线性思维,忽略真实系统中的技术债和网络效应。
误区“私钥和公钥才是关键,临时随机数 k 只是个内部变量,重复用一次应该没关系吧?”
正解k 极其关键。两次签名若复用同一个 k,攻击者通过两个签名方程相减就能恢复 k,进而解出私钥。PlayStation 3 的签名系统正是因此被彻底攻破。Ed25519 最大的改进之一,就是用哈希派生确定性 r,彻底消灭这类随机数灾难。
为何常见:k 不会出现在最终签名中,普通开发者看不到它,因此低估了它对安全的决定性作用。
误区“看到新闻说量子计算快速发展,就觉得 ECDSA 和 Ed25519 明天就会被破解,所有链上资产瞬间归零。”
正解量子计算确实对椭圆曲线离散对数构成长期威胁,但目前实用化量子计算机还远不能攻破 256 位椭圆曲线。密码学界已经在研究抗量子签名(如哈希签名、格密码),区块链社区也会在未来逐步迁移。这不是明天就会发生的灾难,但需要提前规划密钥管理。
为何常见:媒体常把实验室突破夸大为“马上改变世界”,让非专业读者误以为技术落地和理论突破只有一步之遥。
面试题
Q1. 公钥密码学中,私钥的核心作用是什么?
- A.对外公开并广播给所有人
- B.对消息进行数字签名← 正确答案
- C.代替地址显示在交易中
- D.用来加密整条区块链
答案:B。私钥是链上身份的唯一凭证,核心作用是签名;公钥负责验签。选项 A 是公钥的特性,C、D 都不属于私钥的职责。就像印章只能由主人按下去,备案卡才能给别人看。
Q2. 在椭圆曲线公钥密码中,已知 Q 和 G,最难反推的是哪个量?
- A.已知 d 和 G 计算 Q
- B.已知 Q 和 G 反推 d← 正确答案
- C.已知 Q 求 G 并验证
- D.已知 d 和 Q 求曲线方程
答案:B。椭圆曲线离散对数难题说的就是:从 Q=dG 正向计算容易,反向由 Q 和 G 求 d 几乎不可能。A 是正向运算所以容易,C、D 不是签名系统面临的核心难题,这正是“单行道迷宫”的含义。
Q3. ECDSA 验签时,验证方最核心的输入是什么?
- A.私钥、消息和随机数 k
- B.公钥、消息和签名← 正确答案
- C.助记词、地址和余额
- D.区块高度、Gas 和手续费
答案:B。验签的目标是“用公钥确认消息与签名匹配”,所以输入是公钥、消息和签名。私钥和随机数 k 只参与签名生成,绝不传给验证方;助记词、Gas 更与验签无关。
Q4. Ed25519 相比传统 ECDSA 的一个重要改进是什么?
- A.用 RSA 替代椭圆曲线
- B.随机数改为确定性生成← 正确答案
- C.私钥长度增加到 512 位
- D.不再需要对消息做哈希
答案:B。Ed25519 用 SHA-512 从私钥和消息中派生确定性随机数 r,避免 ECDSA 因随机数 k 复用导致的私钥泄露。它并未改用 RSA,也不是靠加长私钥解决安全问题,更不会跳过消息哈希。
Q5. ECDSA 签名中两次使用相同随机数 k,会导致什么后果?
- A.签名更短且更易验证
- B.泄露私钥并允许伪造签名← 正确答案
- C.签名失效并回滚交易
- D.公钥被随机重新生成
答案:B。相同的 k 会产生相同的 r,两个签名方程相减会暴露 k,进而解出私钥 d。攻击者拿到 d 后就能伪造任意签名。这不是性能问题,而是灾难性安全问题,PlayStation 3 被破解就是这个原因。
Q6. 区块链账户地址与公钥的关系是什么?
- A.地址就是公钥的完整值
- B.地址是公钥哈希后的指纹← 正确答案
- C.地址由随机节点临时分配
- D.地址由交易手续费派生
答案:B。典型流程是公钥先做 SHA-256 和 RIPEMD-160,再 Base58Check 编码,所以地址只是公钥的哈希指纹。公钥本身更长且不直接展示,地址更不是节点临时分配或由手续费决定的。
Q7. 在“私钥签名、公钥验签”中,为什么先对消息做哈希再签名?
- A.让签名变长,便于存储
- B.降低消息大小并统一签名输入← 正确答案
- C.让公钥可以反推出私钥
- D.防止公钥被公开传播
答案:B。区块链交易消息可能很长,直接签名慢且不统一。先用哈希压缩成固定长度的摘要 z,再对 z 做椭圆曲线签名,既提高效率,又能防止消息篡改。哈希不会让公钥反推私钥,更不是为了防公钥公开。
Q8. 关于 ECDSA 的临时随机数 k,下列说法正确的有哪些?
- A.k 每次签名都应重新生成← 正确答案
- B.k 可以复用但会影响性能
- C.k 泄露会危及私钥安全← 正确答案
- D.Ed25519 将 k 改为确定性派生← 正确答案
答案:ACD。k 必须每次重新生成,复用 k 会直接泄露私钥,因此 B 说法错误。k 一旦泄露,攻击者可结合签名方程解出私钥。Ed25519 用哈希派生确定性随机数,正是为了根除随机数复用风险。
Q9. 公钥密码学落地区块链时,常见的账户风险管理手段有哪些?
- A.多签授权分散单点风险← 正确答案
- B.助记词备份与硬件钱包← 正确答案
- C.私钥定期明文上传到论坛
- D.冷热钱包分离与权限分级← 正确答案
答案:ABD。多签、助记词离线备份、硬件钱包、冷热分离都是保护私钥的常见实践。把私钥明文上传到任何联网第三方都是高危行为,C 必须排除。密钥安全就是资产安全。
Q10. 关于 Ed25519 与 ECDSA,下列哪些说法是正确的?
- A.Ed25519 签名更短且验签更快← 正确答案
- B.ECDSA 在以太坊生态兼容性更强← 正确答案
- C.Ed25519 无法用于任何区块链
- D.Ed25519 对侧信道攻击防御更好← 正确答案
答案:ABD。Ed25519 签名只有 64 字节,验签性能更优,常数时间实现也更能抵御侧信道攻击;但它并非不能用于区块链,Solana 等公链就是用它作为账户签名算法。以太坊生态则因为历史和兼容性深度绑定 ECDSA,所以 B 正确,C 错误。