An RSA challenge which are always my favourite in CTFs. This one was a combination of a few simple tricks. Below is my solution.
4096 - Crypto - 364 Points
This challenge reads:
I heard 4096 bit RSA is secure, so I encrypted the flag with it.
(174 solves)
With the challenge we get this file:
4096.tar.xz
This file contains the Python source code where the encryption was done:
from Crypto.Util.number import getPrime, bytes_to_long
from private import flag
def prod(lst):
ret = 1
for num in lst:
ret *= num
return ret
m = bytes_to_long(flag)
primes = [getPrime(32) for _ in range(128)]
n = prod(primes)
e = 65537
print(n)
print(pow(m, e, n))
And output.txt
:
50630448182626893495464810670525602771527685838257974610483435332349728792396826591558947027657819590790590829841808151825744184405725893984330719835572507419517069974612006826542638447886105625739026433810851259760829112944769101557865474935245672310638931107468523492780934936765177674292815155262435831801499197874311121773797041186075024766460977392150443756520782067581277504082923534736776769428755807994035936082391356053079235986552374148782993815118221184577434597115748782910244569004818550079464590913826457003648367784164127206743005342001738754989548942975587267990706541155643222851974488533666334645686774107285018775831028090338485586011974337654011592698463713316522811656340001557779270632991105803230612916547576906583473846558419296181503108603192226769399675726201078322763163049259981181392937623116600712403297821389573627700886912737873588300406211047759637045071918185425658854059386338495534747471846997768166929630988406668430381834420429162324755162023168406793544828390933856260762963763336528787421503582319435368755435181752783296341241853932276334886271511786779019664786845658323166852266264286516275919963650402345264649287569303300048733672208950281055894539145902913252578285197293
15640629897212089539145769625632189125456455778939633021487666539864477884226491831177051620671080345905237001384943044362508550274499601386018436774667054082051013986880044122234840762034425906802733285008515019104201964058459074727958015931524254616901569333808897189148422139163755426336008738228206905929505993240834181441728434782721945966055987934053102520300610949003828413057299830995512963516437591775582556040505553674525293788223483574494286570201177694289787659662521910225641898762643794474678297891552856073420478752076393386273627970575228665003851968484998550564390747988844710818619836079384152470450659391941581654509659766292902961171668168368723759124230712832393447719252348647172524453163783833358048230752476923663730556409340711188698221222770394308685941050292404627088273158846156984693358388590950279445736394513497524120008211955634017212917792675498853686681402944487402749561864649175474956913910853930952329280207751998559039169086898605565528308806524495500398924972480453453358088625940892246551961178561037313833306804342494449584581485895266308393917067830433039476096285467849735814999851855709235986958845331235439845410800486470278105793922000390078444089105955677711315740050638
The Weakness
Key to the weakness of this encryption is how the primes are generated, there’s a list comprehension where we select 128, 32bit primes. RSA with 2 primes is standard but RSA is possible with a modulus made of any number of prime numbers:
primes = [getPrime(32) for _ in range(128)]
These numbers are very small so all we need to do is factor n
for 128 small primes. I added a module to goRsaTool to handle this:
package manysmallprimes
import (
"context"
"fmt"
"log"
"time"
"github.com/jbarham/primegen"
"github.com/sourcekris/goRsaTool/keys"
"github.com/sourcekris/goRsaTool/ln"
fmp "github.com/sourcekris/goflint"
)
// timeout puts a limit on how long we should attempt to find the factors.
var timeout = time.Minute * 3
// name is the name of this attack.
const name = "manysmallprimes"
// Global primegen.
var (
p = primegen.New()
primeList []*fmp.Fmpz
)
func smallq(ch chan bool, n, pc *fmp.Fmpz) {
modp := new(fmp.Fmpz)
for {
pc.SetUint64(p.Next())
if modp.Mod(n, pc).Equals(ln.BigZero) {
ch <- true
return
}
}
}
// reset will reset the global state each Attack run.
func reset() {
p = primegen.New()
primeList = nil
}
// Attack iterates small primes until we timeout and test them as factors of N.
func Attack(ts []*keys.RSA) error {
reset()
t := ts[0]
if t.Key.D != nil {
return nil
}
ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, timeout)
defer cancel()
ch := make(chan bool)
if t.Verbose {
log.Printf("%s attempt beginning with timeout %v", name, timeout)
}
for {
pc := new(fmp.Fmpz)
go smallq(ch, t.Key.N, pc)
select {
case <-ch:
primeList = append(primeList, new(fmp.Fmpz).Set(pc))
if t.Verbose {
log.Printf("found prime %v (%d / %d)", pc, len(primeList), t.NumPrimes)
}
if len(primeList) == t.NumPrimes {
if t.Verbose {
log.Printf("found these primes %v", primeList)
}
if err := t.PackMultiPrime(primeList); err != nil {
return err
}
return nil
}
case <-ctx.Done():
return fmt.Errorf("%s failed - didnt find %d factors - found %d - last prime tried %v", name, t.NumPrimes, len(primeList), pc)
}
}
}
This solves for the flag in a very short time:
$ go run rsatool.go -key task/key.txt -verb
ose -numprimes 128 -attack manysmallprimes
rsatool: rsatool.go:88: starting up...
2021/08/23 21:56:38 manysmallprimes attempt beginning with timeout 3m0s
2021/08/23 21:56:54 found prime 2148630611 (1 / 128)
2021/08/23 21:56:54 found prime 2157385673 (2 / 128)
2021/08/23 21:56:55 found prime 2216411683 (3 / 128)
2021/08/23 21:56:55 found prime 2223202649 (4 / 128)
2021/08/23 21:56:55 found prime 2230630973 (5 / 128)
2021/08/23 21:56:55 found prime 2240170147 (6 / 128)
2021/08/23 21:56:55 found prime 2278427881 (7 / 128)
2021/08/23 21:56:55 found prime 2293226687 (8 / 128)
2021/08/23 21:56:55 found prime 2322142411 (9 / 128)
2021/08/23 21:56:56 found prime 2365186141 (10 / 128)
2021/08/23 21:56:56 found prime 2371079143 (11 / 128)
2021/08/23 21:56:56 found prime 2388797093 (12 / 128)
2021/08/23 21:56:57 found prime 2424270803 (13 / 128)
2021/08/23 21:56:57 found prime 2436598001 (14 / 128)
2021/08/23 21:56:57 found prime 2444333767 (15 / 128)
2021/08/23 21:56:57 found prime 2459187103 (16 / 128)
2021/08/23 21:56:57 found prime 2491570349 (17 / 128)
2021/08/23 21:56:57 found prime 2510750149 (18 / 128)
2021/08/23 21:56:57 found prime 2525697263 (19 / 128)
2021/08/23 21:56:58 found prime 2572542211 (20 / 128)
2021/08/23 21:56:58 found prime 2575495753 (21 / 128)
2021/08/23 21:56:58 found prime 2602521199 (22 / 128)
2021/08/23 21:56:58 found prime 2636069911 (23 / 128)
2021/08/23 21:56:58 found prime 2647129697 (24 / 128)
2021/08/23 21:56:58 found prime 2657405087 (25 / 128)
2021/08/23 21:56:58 found prime 2661720221 (26 / 128)
2021/08/23 21:56:58 found prime 2672301743 (27 / 128)
2021/08/23 21:56:58 found prime 2682518317 (28 / 128)
2021/08/23 21:56:58 found prime 2695978183 (29 / 128)
2021/08/23 21:56:58 found prime 2703629041 (30 / 128)
2021/08/23 21:56:59 found prime 2707095227 (31 / 128)
2021/08/23 21:56:59 found prime 2710524571 (32 / 128)
2021/08/23 21:56:59 found prime 2719924183 (33 / 128)
2021/08/23 21:56:59 found prime 2724658201 (34 / 128)
2021/08/23 21:56:59 found prime 2733527227 (35 / 128)
2021/08/23 21:56:59 found prime 2746638019 (36 / 128)
2021/08/23 21:56:59 found prime 2752963847 (37 / 128)
2021/08/23 21:56:59 found prime 2753147143 (38 / 128)
2021/08/23 21:56:59 found prime 2772696307 (39 / 128)
2021/08/23 21:56:59 found prime 2824169389 (40 / 128)
2021/08/23 21:56:59 found prime 2841115943 (41 / 128)
2021/08/23 21:57:00 found prime 2854321391 (42 / 128)
2021/08/23 21:57:00 found prime 2858807113 (43 / 128)
2021/08/23 21:57:00 found prime 2932152359 (44 / 128)
2021/08/23 21:57:00 found prime 2944722127 (45 / 128)
2021/08/23 21:57:00 found prime 2944751701 (46 / 128)
2021/08/23 21:57:00 found prime 2949007619 (47 / 128)
2021/08/23 21:57:00 found prime 2959325459 (48 / 128)
2021/08/23 21:57:00 found prime 2963383867 (49 / 128)
2021/08/23 21:57:01 found prime 3012495907 (50 / 128)
2021/08/23 21:57:01 found prime 3013564231 (51 / 128)
2021/08/23 21:57:01 found prime 3035438359 (52 / 128)
2021/08/23 21:57:01 found prime 3056689019 (53 / 128)
2021/08/23 21:57:01 found prime 3057815377 (54 / 128)
2021/08/23 21:57:01 found prime 3083881387 (55 / 128)
2021/08/23 21:57:02 found prime 3130133681 (56 / 128)
2021/08/23 21:57:02 found prime 3174322859 (57 / 128)
2021/08/23 21:57:02 found prime 3177943303 (58 / 128)
2021/08/23 21:57:02 found prime 3180301633 (59 / 128)
2021/08/23 21:57:02 found prime 3200434847 (60 / 128)
2021/08/23 21:57:02 found prime 3228764447 (61 / 128)
2021/08/23 21:57:02 found prime 3238771411 (62 / 128)
2021/08/23 21:57:03 found prime 3278196319 (63 / 128)
2021/08/23 21:57:03 found prime 3279018511 (64 / 128)
2021/08/23 21:57:03 found prime 3285444073 (65 / 128)
2021/08/23 21:57:03 found prime 3291377941 (66 / 128)
2021/08/23 21:57:03 found prime 3303691121 (67 / 128)
2021/08/23 21:57:03 found prime 3319529377 (68 / 128)
2021/08/23 21:57:03 found prime 3335574511 (69 / 128)
2021/08/23 21:57:03 found prime 3346647649 (70 / 128)
2021/08/23 21:57:03 found prime 3359249393 (71 / 128)
2021/08/23 21:57:03 found prime 3380851417 (72 / 128)
2021/08/23 21:57:03 found prime 3398567593 (73 / 128)
2021/08/23 21:57:03 found prime 3411506629 (74 / 128)
2021/08/23 21:57:04 found prime 3417563069 (75 / 128)
2021/08/23 21:57:04 found prime 3453863503 (76 / 128)
2021/08/23 21:57:04 found prime 3464370241 (77 / 128)
2021/08/23 21:57:04 found prime 3487902133 (78 / 128)
2021/08/23 21:57:04 found prime 3488338697 (79 / 128)
2021/08/23 21:57:04 found prime 3522596999 (80 / 128)
2021/08/23 21:57:04 found prime 3539958743 (81 / 128)
2021/08/23 21:57:05 found prime 3589083991 (82 / 128)
2021/08/23 21:57:05 found prime 3623581037 (83 / 128)
2021/08/23 21:57:05 found prime 3625437121 (84 / 128)
2021/08/23 21:57:05 found prime 3638373857 (85 / 128)
2021/08/23 21:57:05 found prime 3646337561 (86 / 128)
2021/08/23 21:57:05 found prime 3648309311 (87 / 128)
2021/08/23 21:57:05 found prime 3684423151 (88 / 128)
2021/08/23 21:57:05 found prime 3686523713 (89 / 128)
2021/08/23 21:57:06 found prime 3716991893 (90 / 128)
2021/08/23 21:57:06 found prime 3721186793 (91 / 128)
2021/08/23 21:57:06 found prime 3760232953 (92 / 128)
2021/08/23 21:57:06 found prime 3789253133 (93 / 128)
2021/08/23 21:57:06 found prime 3789746923 (94 / 128)
2021/08/23 21:57:06 found prime 3811207403 (95 / 128)
2021/08/23 21:57:06 found prime 3833706949 (96 / 128)
2021/08/23 21:57:06 found prime 3833824031 (97 / 128)
2021/08/23 21:57:07 found prime 3854175641 (98 / 128)
2021/08/23 21:57:07 found prime 3860554891 (99 / 128)
2021/08/23 21:57:07 found prime 3861767519 (100 / 128)
2021/08/23 21:57:07 found prime 3865448239 (101 / 128)
2021/08/23 21:57:07 found prime 3923208001 (102 / 128)
2021/08/23 21:57:07 found prime 3941016503 (103 / 128)
2021/08/23 21:57:07 found prime 3943871257 (104 / 128)
2021/08/23 21:57:07 found prime 3959814431 (105 / 128)
2021/08/23 21:57:07 found prime 3961738709 (106 / 128)
2021/08/23 21:57:07 found prime 3978832967 (107 / 128)
2021/08/23 21:57:07 found prime 3986329331 (108 / 128)
2021/08/23 21:57:07 found prime 3991834969 (109 / 128)
2021/08/23 21:57:07 found prime 3994425601 (110 / 128)
2021/08/23 21:57:08 found prime 4006267823 (111 / 128)
2021/08/23 21:57:08 found prime 4045323871 (112 / 128)
2021/08/23 21:57:08 found prime 4056085883 (113 / 128)
2021/08/23 21:57:08 found prime 4073647147 (114 / 128)
2021/08/23 21:57:08 found prime 4091945483 (115 / 128)
2021/08/23 21:57:08 found prime 4098491081 (116 / 128)
2021/08/23 21:57:08 found prime 4135004413 (117 / 128)
2021/08/23 21:57:08 found prime 4140261491 (118 / 128)
2021/08/23 21:57:09 found prime 4141964923 (119 / 128)
2021/08/23 21:57:09 found prime 4152726959 (120 / 128)
2021/08/23 21:57:09 found prime 4198942673 (121 / 128)
2021/08/23 21:57:09 found prime 4205028467 (122 / 128)
2021/08/23 21:57:09 found prime 4218138251 (123 / 128)
2021/08/23 21:57:09 found prime 4227099257 (124 / 128)
2021/08/23 21:57:09 found prime 4235456317 (125 / 128)
2021/08/23 21:57:09 found prime 4252196909 (126 / 128)
2021/08/23 21:57:09 found prime 4270521797 (127 / 128)
2021/08/23 21:57:09 found prime 4276173893 (128 / 128)
2021/08/23 21:57:09 found these primes [2148630611 2157385673 2216411683 2223202649 2230630973 2240170147 2278427881 2293226687 2322142411 2365186141 2371079143 2388797093 2424270803 2436598001 2444333767 2459187103 2491570349 2510750149 2525697263 2572542211 2575495753 2602521199 2636069911 2647129697 2657405087 2661720221 2672301743 2682518317 2695978183 2703629041 2707095227 2710524571 2719924183 2724658201 2733527227 2746638019 2752963847 2753147143 2772696307 2824169389 2841115943 2854321391 2858807113 2932152359 2944722127 2944751701 2949007619 2959325459 2963383867 3012495907 3013564231 3035438359 3056689019 3057815377 3083881387 3130133681 3174322859 3177943303 3180301633 3200434847 3228764447 3238771411 3278196319 3279018511 3285444073 3291377941 3303691121 3319529377 3335574511 3346647649 3359249393 3380851417 3398567593 3411506629 3417563069 3453863503 3464370241 3487902133 3488338697 3522596999 3539958743 3589083991 3623581037 3625437121 3638373857 3646337561 3648309311 3684423151 3686523713 3716991893 3721186793 3760232953 3789253133 3789746923 3811207403 3833706949 3833824031 3854175641 3860554891 3861767519 3865448239 3923208001 3941016503 3943871257 3959814431 3961738709 3978832967 3986329331 3991834969 3994425601 4006267823 4045323871 4056085883 4073647147 4091945483 4098491081 4135004413 4140261491 4141964923 4152726959 4198942673 4205028467 4218138251 4227099257 4235456317 4252196909 4270521797 4276173893]
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
Recovered plaintext:
corctf{to0_m4ny_pr1m3s55_63aeea37a6b3b22f}