牛马论坛查看原帖 →

一个用于前端 wasm 的自创密码学算法,欢迎破解~

🐛冬瓜 6 阅读 1 回复
具体功能:在线网页测量用户的 CPU 主频,并挑战排行榜。[url=https://etherdream.github.io/cpu-race/](查看演示)[/url]
要实现这个功能,最简单的办法就是用 js/wasm 跑一段消耗 CPU 周期比较稳定的程序,测量起始和结束的时间差,然后上报到服务端。
但这有个严重的问题:时间是在前端测量的,用户可以伪造。即便对程序加密混淆,现在也不难破解。所以必须用一些密码学机制,从原理上堵住这个漏洞。例如使用 VDF 函数进行计算,这样客户端必须老老实实执行每一步才能得出正确的结果。
但这还有另一个问题:这个算法是跑在网页里的,因此必须能被 JIT 充分优化,接近甚至达到原生程序的性能才行,否则作弊者可以用原生程序代替网页版。要符合这个条件,稍复杂一点的算法可能就不满足了。例如有些 VDF 函数基于大数运算,在原生程序里可充分利用 CPU 专用指令,比 wasm 版本快几倍。
因此这个算法必须足够简单,尽可能规避各种损耗。目前这个版本非常简单,只有纯粹的寄存器运算,在网页里和本地 C 程序几乎一样快;同时为了确保强度,模仿密码学中的 ARX (Add–Rotate–Xor) 运算,并且把加法换成了乘法,因为乘法的扩散效果更好,并且硬件实现也更复杂(减少 FPGA 等优势)。
具体算法可[url=https://github.com/EtherDream/cpu-race/blob/main/algo/mrx.cpp]查看这里[/url]。由于是纯手搓自创的,目前没有强度证明(是否具备计算不可约性)。如果你能破解并实现跳步计算,可试试能不能在排行榜上刷出非常高的成绩。
类似的问题之前讨论过,不过没有演示所以很无聊。前几天做了个演示并改进了下,做成 CPU 排行榜类型更好玩一点。
目前的难度系数是 1000 亿个周期,用 5 GHz 的 CPU 大约需运行 20 秒。(测试过程中切换页面可能会降速)


⚠️内容来自互联网,如有侵权请点击反馈![url=source/plugin/aljreport/index.html]侵权投诉[/url]
把加法换成乘法这点挺
[这只是一个小尾巴]

阅读全文与全部回复 →