An Efficient All-to-All GCD Algorithm for Low Entropy RSA Key Factorization
Elijah Pelofske
TL;DR
The paper addresses the vulnerability of RSA moduli arising from low-entropy prime generation by enabling shared primes to be detected via batch GCD. It introduces the Binary Tree Batch GCD algorithm, which builds a product tree to aggregate gcd results into a single product $B$ of all non-trivial shared factors, then recovers the individual shared primes by gcd-ing $B$ with each modulus $N_i$. Compared to the prior remainder-tree batch GCD method, the proposed approach achieves similar asymptotic scaling but demonstrates a practical speedup of about $6\times$ in timing experiments on 1024- and 2048-bit moduli. This work enhances the efficiency of security assessments for RSA deployments and could extend to other cryptosystems that rely on large primes, enabling faster detection of weak, low-entropy keys.
Abstract
RSA is an incredibly successful and useful asymmetric encryption algorithm. One of the types of implementation flaws in RSA is low entropy of the key generation, specifically the prime number creation stage. This can occur due to flawed usage of random prime number generator libraries, or on computers where there is a lack of a source of external entropy. These implementation flaws result in some RSA keys sharing prime factors, which means that the full factorization of the public modulus can be recovered incredibly efficiently by performing a computation GCD between the two public key moduli that share the prime factor. However, since one does not know which of the composite moduli share a prime factor a-priori, to determine if any such shared prime factors exist, an all-to-all GCD attack (also known as a batch GCD attack, or a bulk GCD attack) can be performed on the available public keys so as to recover any shared prime factors. This study describes a novel all-to-all batch GCD algorithm, which will be referred to as the binary tree batch GCD algorithm, that is more efficient than the current best batch GCD algorithm (the remainder tree batch GCD algorithm). A comparison against the best existing batch GCD method (which is a product tree followed by a remainder tree computation) is given using a dataset of random RSA moduli that are constructed such that some of the moduli share prime factors. This proposed binary tree batch GCD algorithm has better runtime than the existing remainder tree batch GCD algorithm, although asymptotically it has nearly identical scaling and its complexity is dependent on how many shared prime factors exist in the set of RSA keys. In practice, the implementation of the proposed binary tree batch GCD algorithm has a roughly 6x speedup compared to the standard remainder tree batch GCD approach.
