来试试【有问必答】这个活动,顺便打瓶酱油。问题可能不是很合适,另外加上了一些我的理解,顺便说我也不懂这方面。所以只是重在参与吧。
暴破就是暴力破解的简称,主要用于破解密码,简单的说,就是用排列组合的方式,列出所有密码的可能性,并一一加以试验。从理论上说,这是破解密码的万全之策,但实际上由于位数多了以后计算量过于庞大,使之可行性大打折扣。
我的问题是,是不是所有加密的暴破都可以用CUDA加速?能否达到一个比较理想的加速比?如果可以,那么密码如何生成?(是在CPU端、还是GPU端,还是怎么分配)
题外:
这几天看zip格式,发现zip解压其实挺适合并行的,因为压缩包中的每个文件都是独立的,也就是说如果要解压其中一个文件的话,只需从二进制文件中读取这个文件并解压就可以了,不用管其它压缩文件。理论上,每个文件也可以用不同算法压缩。可惜,数据传输并不是CUDA的长项,否则用来加速压缩解压倒是个好的应用。
关于暴破的问题,我觉得理论上的加速比应该和CUDA硬件的sp相近,不过在我自己写的蒙特卡洛程序打破我的猜想之后也不敢肯定了。简单的说算法应该是每一个kernel函数算的都是整个算法然后比对(比如说md5,都是计算出md5,然后和目标比对。)目标只有一个,所以没什么好说的,作为常量传入即可。但是测试的密码如何生成和传递,我想这可能是一个重要的问题。如果比较固定的话,比如某个block只管7位的,或者只管7位前半的。那么灵活性怎么办?不能让应用的人也每次改程序吧?如果是从CPU传递的话,即使是用pinned mem,是否也会是瓶颈所在?另外,任务如何分配?不断的读取数组的某个固定元素吗?那么怎么判断是否已计算呢?
随便问问,没什么技术含量,不愿意回答就算了,还是那句话,主要是重在参与。