Season 1/워게임
[Cryptohack] RSA (Manyprime, Salty)
작성자 - ikbak_2
Manyprime
문제
1개의 주요 인자를 사용하는 것은 분명 좋지 않은 생각이었기 때문에 대신 30개 이상을 사용해 보겠습니다. 💡인수 분해에 시간이 오래 걸리는 경우 인수 분해 알고리즘을 읽어보고 이 시나리오에 최적화된 알고리즘을 사용하는지 확인합니다. |
풀이
더보기
일단 n의 값들이 여러 소수가 있는것을 확인할 수 있다.
개인키 구하는 방법은
일단 n에서 나온 소수들을 p라고 하면
개인키는 (p1 -1)*(p2-1)*(p3-1).......(pn-1)이기에
이를 이용하여 평문값을 구하게 된다면
from Crypto.Util.number import long_to_bytes
n = 580642391898843192929563856870897799650883152718761762932292482252152591279871421569162037190419036435041797739880389529593674485555792234900969402019055601781662044515999210032698275981631376651117318677368742867687180140048715627160641771118040372573575479330830092989800730105573700557717146251860588802509310534792310748898504394966263819959963273509119791037525504422606634640173277598774814099540555569257179715908642917355365791447508751401889724095964924513196281345665480688029639999472649549163147599540142367575413885729653166517595719991872223011969856259344396899748662101941230745601719730556631637
e = 65537
ct = 320721490534624434149993723527322977960556510750628354856260732098109692581338409999983376131354918370047625150454728718467998870322344980985635149656977787964380651868131740312053755501594999166365821315043312308622388016666802478485476059625888033017198083472976011719998333985531756978678758897472845358167730221506573817798467100023754709109274265835201757369829744113233607359526441007577850111228850004361838028842815813724076511058179239339760639518034583306154826603816927757236549096339501503316601078891287408682099750164720032975016814187899399273719181407940397071512493967454225665490162619270814464
p= [9282105380008121879, 9303850685953812323, 9389357739583927789, 10336650220878499841, 10638241655447339831, 11282698189561966721, 11328768673634243077, 11403460639036243901, 11473665579512371723, 11492065299277279799, 11530534813954192171, 11665347949879312361, 12132158321859677597, 12834461276877415051, 12955403765595949597, 12973972336777979701, 13099895578757581201, 13572286589428162097, 14100640260554622013, 14178869592193599187, 14278240802299816541, 14523070016044624039, 14963354250199553339, 15364597561881860737, 15669758663523555763, 15824122791679574573, 15998365463074268941, 16656402470578844539, 16898740504023346457, 17138336856793050757, 17174065872156629921, 17281246625998849649]
pri = 1
for i in p:
pri*=(i-1)
key=pow(e, -1, pri)
pt=pow(ct,key,n)
decrypted = long_to_bytes(pt)
print(decrypted)
플래그 값은 crypto{700_m4ny_5m4ll_f4c70r5}이다.
Salty
문제
가장 작은 지수가 가장 빠를 것입니다. 그렇죠? |
풀이
더보기
from Crypto.Util.number import getPrime, inverse, bytes_to_long, long_to_bytes
e = 1
d = -1
while d == -1:
p = getPrime(512)
q = getPrime(512)
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
n = p * q
flag = b"XXXXXXXXXXXXXXXXXXXXXXX"
pt = bytes_to_long(flag)
ct = pow(pt, e, n)
print(f"n = {n}")
print(f"e = {e}")
print(f"ct = {ct}")
pt = pow(ct, d, n)
decrypted = long_to_bytes(pt)
assert decrypted == flag
일단 n의 값이 소수이다.
그리고 공개키인 e의 값이 1이다.
해당 사이트에서 참고로 보면
공개키가 1이었을때 안좋은점은
일단 개인키를 구하게 되는 과정에서
d(개인키)*e(공개키) = 1 mod (p-1)*(q-1)
a mod b(a<b) 이면 a이고 (p-1)*(q-1)가 1보다 클때
d=1이다.
그리고
c(암호문) = (p(평문) ^ e) mod n인데
e는 1이므로
c = p mod n 이게 되는데
문제에선 n이 c보다 크기 때문에 p의 값도 보다 적다.
그러므로
c=p, 암호화가 되지 않은 상태이다.
from Crypto.Util.number import long_to_bytes
n = 110581795715958566206600392161360212579669637391437097703685154237017351570464767725324182051199901920318211290404777259728923614917211291562555864753005179326101890427669819834642007924406862482343614488768256951616086287044725034412802176312273081322195866046098595306261781788276570920467840172004530873767
e = 1
ct = 44981230718212183604274785925793145442655465025264554046028251311164494127485
print(long_to_bytes(ct))
플래그 값은 crypto{saltstack_fell_for_this!}이다.
'Season 1 > 워게임' 카테고리의 다른 글
[Cryptohack] RSA (Crossed Wires, Everything is Still Big) (0) | 2023.05.20 |
---|---|
[Cryptohack] RSA (Modulus Inutilis, Everything is Big) (0) | 2023.05.19 |
[Cryptohack] RSA (Monoprime, Square Eyes) (0) | 2023.05.17 |
[Cryptohack] RSA (Factoring, Inferius Prime) (0) | 2023.05.16 |
[Cryptohack] RSA (RSA STARTER 4, 5, 6) (0) | 2023.05.15 |
Contents