Alternative title: Nearly SNFS-Speed Signature Forgery Sans Factoring N (NSNFSSSFSFN)
This repository contains a paper (eprint 2026/XXXX) and code implementing a variant of the number field sieve (NFS) algorithm. It shows that an attacker can use temporary access to a raw, unpadded RSA signing/decryption oracle to gain the permanent ability to forge signatures / decrypt ciphertexts. In other words, the attacker can steal what is effectively the secret key (in that it can be used to sign/decrypt offline), but without actually factoring the public key, and using much less computation than factoring the public key would have taken. This demonstrates that factoring-based estimates for RSA security may be too optimistic and should be revised, but likely does not pose an immediate operational threat to most deployed RSA in the real world.
The algorithm is not polynomial-time. It's not even close. It's "subexponential-time" which is the same class as the best factoring algorithms. However it manages to be a faster subexponential-time: "special" number field sieve rather than "general" number field sieve. Factoring a 1024-bit modulus is predicted to take 500,000-1,000,000 core-years. Running this algorithm on a 1024-bit modulus took us 1,380 core-years.
The algorithm is not new. It was invented in 2007 by Joux, Naccache, and Thomé. However this is the first public implementation and large-scale run. Most of the code is not new; it builds on CADO-NFS.
The algorithm only works if a raw signing oracle is available. Most RSA usage in practice (that is, RSA signatures using PKCS#1v1.5 or RSA-PSS padding) do not expose such an oracle, and thus this attack does not pose a practical risk. Examples of RSA use that do expose such a signing oracle would include blind RSA signatures (e.g. Privacy Pass) or HSM APIs.
SNFS time mean? 119761307924183143227323805033445425142683607945593313835302891299066516303843000359184032065280614739228104709307215190162897575231548821264285875476222037118119400262673724895150267064851629266552653543645482302630040586124860255443008330625425740446416414144702538281275665910057429738414800482721215922451. What should I do? 4 commits
Alternative title: Nearly SNFS-Speed Signature Forgery Sans Factoring N (NSNFSSSFSFN)
This repository contains a paper (eprint 2026/XXXX) and code implementing a variant of the number field sieve (NFS) algorithm. It shows that an attacker can use temporary access to a raw, unpadded RSA signing/decryption oracle to gain the permanent ability to forge signatures / decrypt ciphertexts. In other words, the attacker can steal what is effectively the secret key (in that it can be used to sign/decrypt offline), but without actually factoring the public key, and using much less computation than factoring the public key would have taken. This demonstrates that factoring-based estimates for RSA security may be too optimistic and should be revised, but likely does not pose an immediate operational threat to most deployed RSA in the real world.
The algorithm is not polynomial-time. It's not even close. It's "subexponential-time" which is the same class as the best factoring algorithms. However it manages to be a faster subexponential-time: "special" number field sieve rather than "general" number field sieve. Factoring a 1024-bit modulus is predicted to take 500,000-1,000,000 core-years. Running this algorithm on a 1024-bit modulus took us 1,380 core-years.
The algorithm is not new. It was invented in 2007 by Joux, Naccache, and Thomé. However this is the first public implementation and large-scale run. Most of the code is not new; it builds on CADO-NFS.
The algorithm only works if a raw signing oracle is available. Most RSA usage in practice (that is, RSA signatures using PKCS#1v1.5 or RSA-PSS padding) do not expose such an oracle, and thus this attack does not pose a practical risk. Examples of RSA use that do expose such a signing oracle would include blind RSA signatures (e.g. Privacy Pass) or HSM APIs.
SNFS time mean? 119761307924183143227323805033445425142683607945593313835302891299066516303843000359184032065280614739228104709307215190162897575231548821264285875476222037118119400262673724895150267064851629266552653543645482302630040586124860255443008330625425740446416414144702538281275665910057429738414800482721215922451. What should I do? 4 commits