我知道图形卡由于具有许多内置处理器而可以更快地解决SHA-256之类的算法,但是有没有算法在图形卡上比在现代消费类CPU(Amd / intel)上花费的时间更长?

评论

如果CPU具有AES加速器,则可能为AES。与随机数生成器相同,但是更多的是熵问题。

实际上,几乎在并行性无济于事的任何问题上; GPU上的单个进程比CPU慢得多;因此,如果拥有多个GPU不能加快速度,那么CPU自然会更快...

参见scicomp.stackexchange.com/questions/943/…

人们普遍认为,由于基于GPU的设备的内存限制,内存密集型算法是解决GPU难题的方法。阅读有关scrypt的信息:en.wikipedia.org/wiki/Scrypt

@poncho对此进行扩展:即使理论上可以同时执行许多并行部分,GPU仍难以控制流。由于它们的工作方式,它们将必须线性化每个不同分支的执行,这可能导致所有执行的总线性化(好像只有一个线程)。因此,如果您有一个包含多个分支的算法,并且两种结果的可能性大致相同...它并不像上面听起来的那么糟糕,因为该体系结构已经开发但会导致速度显着降低。

#1 楼

这种特定情况是密码哈希功能分析的核心部分。的确,对于哈希密码,我们需要一个函数,该函数以可调的方式变慢;
使得最经济的硬件可用于评估许多实例。功能是预期的防御者将使用的硬件,即“普通PC”。

“成本”在这里表示实际金钱。对于攻击者而言,他将需要10、100或1000个使用任何硬件的设备都没有关系;只需要总费用。可以说,对于现代硬件,尤其是GPU,用于处理密码的大部分预算将用于电力,而不是用于购买硬件。因此,在通用CPU和各种GPU上,就函数的计算消耗的能量来定义函数的成本是有意义的。

bcrypt密码哈希函数确实确实是这样的功能,在GPU上进行计算要比在CPU上进行计算更加昂贵(从能源角度而言)。使得它成为bcrypt的特征是它围绕内部4 kB数据数组进行组织,该数组以不适合快捷方式的方式连续读取和修改,并且位于伪随机地址。 GPU的装备不完善;如果您尝试在GPU上实现bcrypt,则会遇到相当大的数据访问争用,并且大多数GPU内核将随时处于停滞状态(这样停滞的内核仍会消耗功率)。

密码哈希竞赛旨在定义实现更大目标的新功能,即不仅要使CPU友好性要强于GPU友好性,还要在面对使用FPGA或定制ASIC的攻击者时“保持优势”。大多数候选人使用的主要工具还是RAM,但更多。基本假设是,现代PC(服务器,台式机...)包含经过彻底优化的内存总线,无法通过定制硬件以较低的成本运行。目前尚不清楚该假设的适用范围。

其中一个PHC候选人名为Makwa(由我设计)没有使用RAM,而是使用了模块化算术。预计这与FPGA和ASIC不能很好地兼容,但是对于GPU来说似乎表现良好:根据我的分析,对于2048位模数,CPU和GPU的成本似乎大致相等,并且具有更大的模数优势

总而言之,bcrypt和Makwa似乎都是您问题的有效答案,而且它们通过完全不同的方式来做到这一点。

评论


$ \ begingroup $
另一方面,FPGA可能具有数百个独立的4k存储器。
$ \ endgroup $
–user253751
17-10-2在23:31

$ \ begingroup $
是的,这就是为什么大多数PHC候选人都包括使用更多RAM(兆字节,如果不是千兆字节)的选项的原因。 4 kB缓冲区适合GPU,而不适合FPGA。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
17-10-3在12:58

#2 楼

即使加密算法的一小部分可以并行化,例如10%,并且受益于GPU的这一部分算法的加速是20倍,那么GPU版本将比CPU版本快10%。

请注意,在GPU上实现良好的实现将充分利用两个方面的优势(CPU + GPU)。 >开始搜索的一个好地方是难于存储的实现。
最受欢迎的是scrypt。
与其他功能(例如PBKDF2或PBKDF2或PBKDF2或PBKDF2或PBKDF2或PBKDF2或PBKDF2或PBKDF2相比),它的设计安全性更高。 bcrypt。
密码哈希竞赛(PHC)的获胜者是Argon2。

PBKDF2有一个弱点(迭代次数),它使用专用集成电路或图形进行蛮力攻击加工单位相对便宜。 bcrypt密钥派生功能需要较大数量的RAM(但仍不能单独调整,即在给定的CPU时间上是固定的),并且对这种攻击的要求略强。

建议使用Scrypt或Argon2i(相对于其他所有版本而言更好)。 ASIC或FPGA。在2015年7月,它
被宣布为“密码哈希竞赛”的获胜者。


Didnt持续了很长时间才看到良好的实现。
这里是Argon2的GPU POC。

性能✓

CUDA实现可以达到约40-60 GiB / s(除以时间成本*内存成本) *在NVIDIA Tesla K20X上每秒散列1024 B)。作为比较,一个快速的Intel Xeon处理器只能达到大约10 GiB / s。

因此,我认为,如果使用常识对求解器实现进行编程,则没有一种算法可以在GPU上运行得更慢。

评论


$ \ begingroup $
Argon2的那些GPU编号实际上并不令人沮丧。即使此处的问题被表述为“ GPU上的算法比CPU上的算法慢”,但像Argon2这样的具有存储功能的函数的要点是限制了专门对手的优势。如果GPU计算Argon2的速度仅是CPU的4-6倍,那还算不错,特别是考虑到该GPU的价格为3500美元。
$ \ endgroup $
–路易斯·卡西利亚斯(Luis Casillas)
17-10-3在22:14

$ \ begingroup $
我认为GTX1080具有几乎相同的性能并且价格合理
$ \ endgroup $
– Panos Kal。
17-10-4在2:32

#3 楼

例如,以太坊采用的一种常见方法是使用难以存储的算法。如果算法绝对需要内存,那么这将限制可以并行高效运行的内核数量。

评论


$ \ begingroup $
阅读FAQ并不完全支持这一点。以太网挖矿确实需要大量RAM,但其目的似乎是通过使ASIC和FPGA效率低下来保护小型矿工。他们声称GPU可以很好地工作,并且内存要求仅够低以使其实用。
$ \ endgroup $
–詹姆斯·霍利斯(James Hollis)
17-10-3在20:48

#4 楼

GPU的时钟速率比CPU慢,但是有更多的线程受大型线程组执行相同代码的限制。

因此,应该在CPU上运行更快的算法具有线性数据相关性,因此GPU只能运行一个线程(所有其他线程都执行NOP),并且只能在向量中使用一个通道-然后较低的时钟频率生效。

您还可以进一步对GPU进行悲观通过使算术运算数据具有依赖性来提高性能。然后,GPU编译器将尝试为所有操作生成推测执行,然后执行SELECT指令以仅使用获胜分支的结果。

评论


$ \ begingroup $
您的“引入线性数据依赖性”方法将如何工作?强制暴力密码散列的工作原理是让每个核心散列不同的密码。通过这种方法的本质,无论使用哪种哈希函数,内核之间都没有数据依赖性。
$ \ endgroup $
–梦想家
17-10-2在12:31

$ \ begingroup $
@Dreamer这个问题仍然很普遍。尽管提到了哈希,但答案仍然无济于事。以(AES-)CBC为例,它与数据有关。如果比较最快的实现,那么该算法几乎肯定会在CPU上更快。 AES-CBC不能为单个消息并行。
$ \ endgroup $
–马腾·博德威斯♦
17-10-2在17:20

$ \ begingroup $
当然,这将是AES-CBC加密,对此深表歉意,但是必须区分解密与解密。
$ \ endgroup $
–马腾·博德威斯♦
17-10-3在11:56