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

RSA key-pair generation in golang with 15360 key length is too slow. What need to be done to resolve this?

我尝试在 go 中创建密钥长度为 15360 的 RSA 密钥对。

在 windows 中,它会在大约 2 分钟内生成密钥对。但是从 VM 中它正在侦听超过 10 分钟并且无法生成密钥对并以套接字挂断结束。

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

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

在 go 中我可以通过哪些方式改进这一点,以避免此类套接字挂起失败?

我刚刚测试了 Go 1.14.6 中密钥的生成(Windows 10,没有 VM,4 核),在 RSA or (much faster) ECC, using nilsmagnus's gist

我确实看到 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

使用 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

无明显改善。

因此对于这种密钥长度,使用 ECC 密钥而不是 RSA 会快得多。