[程序员] 一个用于前端 wasm 的自创密码学算法,欢迎破解~
具体功能:在线网页测量用户的 CPU 主频,并挑战排行榜。 (查看演示) 要实现这个功能,最简单的办法就是用 js/wasm 跑一段消耗 CPU 周期比较稳定的程序,测量起始和结束的时间差,然后上报到服务端。 但这有个严重的问题:时间是在前端测量的,用户可以伪造。即便对程序加密混淆,现在也不难破解。所以必须用一些密码学机制,从原理上堵住这个漏洞。例如使用 VDF 函数进行计算,这样客户端必须老老实实执行每一步才能得出正确的结果。 但这还有另一个问题:这个算法是跑在网页里的,因此必须能被 JIT 充分优化,接近甚至达到原生程序的性能才行,否则作弊者可以用原生程序代替网页版。要符合这个条件,稍复杂一点的算法可能就不满足了。例如有些 VDF 函数基于大数运算,在原生程序里可充分利用 CPU 专用指令,比 wasm 版本快几倍。 因此这个算法必须足够简单,尽可能规避各种损耗。目前这个版本非常简单,只有纯粹的寄存器运算,在网页里和本地 C 程序几乎一样快;同时为了确保强度,模仿密码学中的 ARX (Add–Rotate–Xor) 运算,并且把加法换成了乘法,因为乘法的扩散效果更好,并且硬件实现也
Read original sourceSource record
Research analysis
Source record
Source account: 具体功能:在线网页测量用户的 CPU 主频,并挑战排行榜。 (查看演示) 要实现这个功能,最简单的办法就是用 js/wasm 跑一段消耗 CPU 周期比较稳定的程序,测量起始和结束的时间差,然后上报到服务端。 但这有个严重的问题:时间是在前端测量的,用户可以伪造。即便对程序加密混淆,现在也不难破解。所以必须用一些密码学机制,从原理上堵住这个漏洞。例如使用 VDF 函数进行计算,这样客户端必须老老实实执行每一步才能得出正确的结果。 但这还有另一个问题:这个算法是跑在网页里的,因此必须能被 JIT 充分优化,接近甚至达到原生程序的性能才行,否则作弊者可以用原生程序代替网页版。要符合这个条件,稍复杂一点的算法可能就不满足了。例如有些 VDF 函数基于大数运算,在原生程序里可充分利用 CPU 专用指令,比 wasm 版本快几倍。 因此这个算法必须足够简单,尽可能规避各种损耗。目前这个版本非常简单,只有纯粹的寄存器运算,在网页里和本地 C 程序几乎一样快;同时为了确保强度,模仿密码学中的 ARX (Add–Rotate–Xor) 运算,并且把加法换成了乘法,因为乘法的扩散效果更好,并且硬件实现也
Available context
No comparable records or structured measurements are attached.
Research status
This record has not been assigned a sufficiently supported main content category. No commercial or performance conclusion is generated.
Missing evidence
The main event, affected audience and supporting primary source need review.
Next step
Read the original and identify the decision it supports before choosing an analysis framework.