Encryption 使用CUDA的GPU上的高级加密标准

Encryption 使用CUDA的GPU上的高级加密标准,encryption,cuda,gpgpu,Encryption,Cuda,Gpgpu,我是一名CUDA开发人员,我正在帮助本科生在GPU上实现AES。 他们对密码学不太了解,这也是我第一次研究它。如果有人能回答,我有几个问题 我们如何实现AES,我的意思是,在GPU上加密和显示加速的最佳数据应该是什么?我们应该加密一些CD吗?还是信用卡号码等敏感数据?简而言之,我们的数据源应该是什么 什么样的AES操作模式适合GPU 学生们被问及输入比特流的速率,有人能解释一下吗?因为按照我的想法,它应该取决于数据大小。并且可以根据数据大小在GPU和CPU之间进行比较 提前谢谢。我对GPU不太熟

我是一名CUDA开发人员,我正在帮助本科生在GPU上实现AES。 他们对密码学不太了解,这也是我第一次研究它。如果有人能回答,我有几个问题

  • 我们如何实现AES,我的意思是,在GPU上加密和显示加速的最佳数据应该是什么?我们应该加密一些CD吗?还是信用卡号码等敏感数据?简而言之,我们的数据源应该是什么

  • 什么样的AES操作模式适合GPU

  • 学生们被问及输入比特流的速率,有人能解释一下吗?因为按照我的想法,它应该取决于数据大小。并且可以根据数据大小在GPU和CPU之间进行比较


  • 提前谢谢。

    我对GPU不太熟悉,所以无法回答问题2。但是,对于其他两个:

    第1点。AES不在乎你加密什么,它只是比特。只需找到一个大文件,这样就可以显示统计上显著的加速。通过加密几个字节,您将无法证明实现的(可能)加速。当然,这是“功能”速度,取决于实现的速度,实际上可能会受到RAM或磁盘传输速度的限制。因此,您不妨计算一下动态生成的数据加密所需的时间(比如计数器),从而确保不需要从磁盘/RAM读取数据

    第3点。AES是一种分组密码,输入大小固定为128位(16字节),您无法进行任何更改。输入数据速率将完全取决于您处理数据的速度

  • 你不在乎:通常,一些大的东西,比如iso或600MB的随机数是好的

  • GPU使用并行化,所以您最好坚持ECB。否则,算法就无法并行化

  • 速率与数据大小无关:它的大小/处理时间。在cuda的情况下,您必须考虑传输到设备/进程/传输回(内存拷贝在处理方面远远不是很小)=>除非您能够大量并行化,否则您将失去时间而不是赢得


  • AES使用的是16字节的数据块,但通常情况下,当对较大的内容进行加密时,可以使用链接,也可以不使用链接。当使用GPU时,您希望并行化,从而同时抓取许多块,这是您在PC上无法做到的。要做到这一点,最简单的方法是坚持使用ECB(每个16字节独立地进行抓取,没有链接),谢谢您的反馈,所以我可以使用例如电影或DVD(大的一个)吗并对其进行加密和解密以便于演示。这足够好吗?ECB是一种完全不安全的模式,它会泄露大量关于你的密文的信息,因此永远不应该使用。一般来说,当您只需要保密时,CBC模式应该足够好。然而,CBC不能并行化。检查GCM模式,它可以并行化,提供身份验证和机密性。@Bilal:不,如果使用DVD,可能99%的加密时间将用于读取DVD。据我所知,您希望测量您实现的“真实”速度,因此您可以动态生成加密数据(例如SSE寄存器中的128位计数器,尽管可能有更好的选项,但您将数据传输到GPU的速度越快越好)。顺便说一句,以下是ECB不好的原因:。感谢您的反馈,CTR在这台机器上不能正常工作吗?所以你的意思是我们不应该关心利率,对吗?我的意思是,我们应该关注的是:数据大小和加密数据所需的时间。当然,正如您所说的,如果数据足够大,延迟将被压倒。CTR也可以工作。任何允许并行化的东西。我通常坚持欧洲央行或CBC,因此从不考虑其他模式。维基百科在这方面会有所帮助。您只需要注意,某些模式只能进行并行解密。CB不好,任何人都不应该使用它,因此证明您在ECB的实现是快速的并没有真正的帮助。还有其他安全且可并行化的模式,这也为您提供了消息身份验证。更多信息请参见我的答案。+1,2/3的答案是好的,不值得投反对票。