golang中密钥长度为15360的RSA密钥对生成太慢需要做什么来解决这个问题?

问题描述

我尝试在创建go时使用15360密钥长度的RSA密钥对。

在Windows中,它会在约2分钟内生成密钥对。但是从VM那里,它监听了超过10分钟的时间,无法生成密钥对,并以套接字挂断结束。

privateKey,err := generatePrivateKey(15360)
if err != nil {
    log.Fatal(err.Error())
}

与Java实现相同,它在5次机会中在VM 3中生成密钥对的时间约为10分钟。

我可以通过什么方式改进它,以避免此类套接字挂起失败?

解决方法

我刚刚在RSA或{更快} ECC中使用nilsmagnus's gist在Go 1.14.6(Windows 10,无VM,4核)中测试了密钥的生成

我确实看到15360位RSA密钥(强度相当于256位对称密钥)需要10分钟以上的时间

2020/08/13 07:55:30 2048/224 (rsa-bitsize/ec-bitsize):    1245302200ns    1481396600ns
2020/08/13 07:55:34 3072/256 (rsa-bitsize/ec-bitsize):    2797005900ns      70036800ns
2020/08/13 07:56:41 7680/384 (rsa-bitsize/ec-bitsize):   33954637400ns   11623485000ns
2020/08/13 08:07:56 15360/521 (rsa-bitsize/ec-bitsize): 236410356300ns   17162054200ns

generation time 1.14

使用Go 1.15(昨天发布):

2020/08/13 08:11:40 2048/224 (rsa-bitsize/ec-bitsize):    1064054900ns   1486366000ns
2020/08/13 08:11:43 3072/256 (rsa-bitsize/ec-bitsize):    2799028300ns     70949100ns
2020/08/13 08:12:34 7680/384 (rsa-bitsize/ec-bitsize):   35293246300ns   9160064600ns
2020/08/13 08:24:10 15360/521 (rsa-bitsize/ec-bitsize): 236385736600ns  25844676400ns

没有明显的改善。

GO 1.15 times

因此,对于这种密钥长度,使用ECC密钥代替RSA会更快。