• 请不要在回答技术问题时复制粘贴 AI 生成的内容
iqoo
V2EX  ›  程序员

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

  •  
  •   iqoo · 13h 9m ago · 651 views

    具体功能:在线网页测量用户的 CPU 主频,并挑战排行榜。(查看演示)

    要实现这个功能,最简单的办法就是用 js/wasm 跑一段消耗 CPU 周期比较稳定的程序,测量起始和结束的时间差,然后上报到服务端。

    但这有个严重的问题:时间是在前端测量的,用户可以伪造。即便对程序加密混淆,现在也不难破解。所以必须用一些密码学机制,从原理上堵住这个漏洞。例如使用 VDF 函数进行计算,这样客户端必须老老实实执行每一步才能得出正确的结果。

    但这还有另一个问题:这个算法是跑在网页里的,因此必须能被 JIT 充分优化,接近甚至达到原生程序的性能才行,否则作弊者可以用原生程序代替网页版。要符合这个条件,稍复杂一点的算法可能就不满足了。例如有些 VDF 函数基于大数运算,在原生程序里可充分利用 CPU 专用指令,比 wasm 版本快几倍。

    因此这个算法必须足够简单,尽可能规避各种损耗。目前这个版本非常简单,只有纯粹的寄存器运算,在网页里和本地 C 程序几乎一样快;同时为了确保强度,模仿密码学中的 ARX (Add–Rotate–Xor) 运算,并且把加法换成了乘法,因为乘法的扩散效果更好,并且硬件实现也更复杂(减少 FPGA 等优势)。

    具体算法可查看这里。由于是纯手搓自创的,目前没有强度证明(是否具备计算不可约性)。如果你能破解并实现跳步计算,可试试能不能在排行榜上刷出非常高的成绩。

    类似的问题之前讨论过,不过没有演示所以很无聊。前几天做了个演示并改进了下,做成 CPU 排行榜类型更好玩一点。

    目前的难度系数是 1000 亿个周期,用 5 GHz 的 CPU 大约需运行 20 秒。(测试过程中切换页面可能会降速)

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1457 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 19:12 · PVG 03:12 · LAX 11:12 · JFK 14:12
    ♥ Do have faith in what you're doing.