在智能合约中,一次性密码验证是一种常用的辅助授权技术。智慧合约所有者可以为用户地址和对应的用户密码生成身份验证散列,并将其存储在智慧合约中。针对这一攻击,攻击者在智能合约中创建了一个密码验证程序,并向用户提供了多个用于验证功能的测试账户。然而,该测试集只包含所有小写EIP-55校验和的有意提取账户。智能合约中,资金转帐功能在其前面是一个密码验证功能,它调用地址转换功能,该功能将交易发送方的地址转换为全小写字符串(如上图中的strAddrHash)。有了测试账户,智能合约就可以正常工作了。经过测试后,用户通过连接其公开地址(从钱包中复制)和秘密密码来创建产品认证散列。不能通过公共区块链的开放网络测试该生产帐户,以免泄露密码。令人意外的是,由于地址大小写不一致,密码验证失败,所以尝试提现失败。上面的例子说明了A3攻击。
AuthHash常量变量存储与ASIACCS2021密码相关联的Gu6cak256引言,用户地址为0!700856796524501438!7197497!14!黑客向用户提供了几个测试帐号的私钥,这些帐号公共地址的EIP-55校验和是小写的。那些测试帐户的运行与预期一致。然而,当用户使用真实地址开始交易时,密码验证就会失败,因为authHash会将校验和地址合并成大小写字母,而strAddrHash则会使用所有小写校验和的同一地址生成哈希。确认失败将导致用户无法出售Token。这一攻击表明,某些账户比其他账户更易受攻击,能够有效地克服M4的误解。
同形异义词是视觉认知欺骗的产物。在智能合约中,同形异义字攻击是通过在文本编辑器(不含十六进制查看器)中显示不能显示的相同或非常相似的符号来实现的。为了了解十六进制查看器在审计过程中的使用频率,该研究调查了7家智能合约审计公司的安全专家。研究结果表明,七分之一的公司通常使用十六进制查看器,其中两个有时会使用,而其余的公司从来没有使用,也很少使用。这两个单词或字母被定义为一对同形异义对,它们包含外观相同但符号不同的符号。“Homograph”类利用了这样一个事实:Solidity禁止在函数名和变量名中使用Unicode符号,但它允许使用决定分支和合约间调用的字符串文本中的Unicode符号。这一节介绍了三种同形异义字攻击:A4,A5,A6。