name: mvx_constant_time description: 验证加密实现中的恒定时间操作。
MultiversX 恒定时间分析
本技能帮助您验证加密秘密是否以恒定时间处理,以防止定时攻击。
1. 何时使用
- 自定义加密:如果合约手动实现椭圆曲线数学、ZK验证或签名(不使用API)。
- 比较:检查秘密(例如,比较用户提供的哈希与存储的哈希)。
2. 应避免的模式(可变时间)
- 早期退出:
if byte[i] != other[i] { return false }。这会泄漏第一个差异的索引。 - 短路操作:对秘密使用
&&或||。
3. MultiversX 解决方案
- 托管类型:使用API提供的
ManagedBuffer比较(通常在虚拟机中实现为恒定时间)。 - Subtle crate:对于手动
u8切片比较,使用subtle::ConstantTimeEq。
4. 验证
- 测量:在链上测量困难,因为Gas计量。Gas通常会粗略泄漏执行轨迹。
- 规则:依赖虚拟机的加密函数(
self.crypto().verify_signature(...)),而不是在WASM中实现。