在浏览器中是否可能使用用户的显卡(例如使用WebGL或Flash)计算SHA256哈希值?

11

是否有可能在浏览器中使用用户的显卡(例如使用WebGL或Flash)计算sha256哈希值?

恐怕这就是我要问的全部内容了,但如果需要更多阐述,请不要犹豫在评论中告诉我。

谢谢。


8
你想利用你的网站访客为你生成比特币吗?^^ - sod
@sod,我个人并不关心,但是我很想知道这是否会成为我们未来可能看到的事情。 - Tom
有关成功实现的任何消息吗?这是否真的可能而不会失去太多性能? - Dpp
我认为这个想法可以用来创建一个新的区块链,只需使用浏览器标签即可加入。节点计数可以提供安全性。我不知道。 - toraman
3个回答

7
这应该是可能的。通过使用片段着色器实现SHA,您应该能够使用readPixels读取结果:

读取像素[5.13.12]:当前帧缓冲区中的像素可以读取到ArrayBufferView对象中。

void readPixels(int x, int y, long width, long height, enum format, enum type, Object pixels)

格式:RGBA

类型:UNSIGNED_BYTE

来自Kronos WebGL参考卡(PDF)
如果想获得额外的学分,请在离屏帧缓冲区中完成所有操作,如此描述

听起来很有前途。不过,我想知道如何将一个sha256字符串保存为像素的形式?或者我没有完全理解你的意思? - Tom
是的,在一个1xN像素帧缓冲区中存储计算结果,然后只需读取值即可。 - laslowh
请查看learningwebgl.com上这些非凡的教程。特别是,如果您查看http://learningwebgl.com/blog/?p=28上的第1课。关键在于片段着色器(寻找“shader-fs”)。任何写入gl_FragColor的内容都可以随后使用readPixels()读取。 - laslowh

1
看起来这是可以实现的(虽然在这种情况下不是SHA256)。以下是一个使用WebGL2在客户端计算哈希值的JavaScript库示例,用于Curl哈希算法: https://github.com/iotaledger/curl.lib.js/ 在这种情况下,它被用于为IOTA交易进行工作量证明(https://www.iota.org/get-started/what-is-iota)。这基本上意味着将随机输入强制进入同一哈希函数,直到结果匹配某个输出。因此,使用WebGL获得的哈希速度非常重要。我已经使用它,而且它有效!

0
下一个版本的Flash播放器(11)将支持真正的硬件加速图形,从而暴露了在图形卡上运行像素着色器的可能性。它们至少在理论上可以用于通用计算。
Thibault Imbert的博客上有一些示例。

有趣的是,尽管WebGL也允许硬件加速图形,但我想知道这两者是否可以用于通用计算? - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接