Legendre Symbol

2023. 2. 13. 21:38·Wargame/Cryptohack
728x90
반응형

1. intro

2. code 및 분석

2.1.  code

N/A

 

2.2. 분석

앞선 케이스에서 p가 29라면 쉽게 계산할 수 있었지만, p가 매우 크다면 터무니 없는 방법이 된다.

하지만 쉽게 제곱 잉여인지 아닌지 계산할 수 있는 방법이 르장드르 기호를 이용하는 방법이다.

 

르장드르 기호는 앞선 포스팅과 같이 1 or -1인지만 확인하면 된다.

2023.02.09 - [Tips & theory] - Legendre Symbol - 르장드르 기호

 

Legendre Symbol - 르장드르 기호

서론 지금까지 이런 해킹은 없었다. 이것은 크립토인가 수학인가. 이론 앞서 공부한 제곱 잉여 x^2 = a mod p 에서 p가 충분히 작다면 쉽게 a를 구할 수 있었지만, p가 커지면 어떻게 제곱 잉여인지

wyv3rn.tistory.com

 

이는 파이썬 pow 함수로 쉽게 계산할 수 있다.

pow 함수는 아래와 같이 작동한다

 

pow(a,b,c) = a^b mod c

 

문제에서 주어진 파일 내에 1024 bit의 소수와 10개의 정수로 이루어져 있는데, 제곱 잉여를 찾고 제곱근을 찾으면 된다.

 

다만 제곱근을 어떻게 찾느냐가 문제인데,

다시 르장드르 기호를 생각해보자.

(a/p) = 1

a^ ((p - 1) / 2) mod p = 1

가 된다.

 

여기서 p는 소수 이기에 p > a 라면

a ^ ((p - 1) / 2)를 p로 나누면 a ^ ((p - 1) / 2)가 나머지가 될 것이다.

 

그러므로

a^ ((p - 1) / 2) = 1

라고 할 수 있고,

a ^ ((p - 1) / 2) * a = a

a ^ ((p + 1) / 2) = a

라 할 수 있다.

 

여기서 제곱근은 a ^ (1 / 2) 이므로

a ^ ((p + 1) / 4) = a ^ (1 / 2)

가 된다.

 

3. exploit

p = 101524035174539890485408575671085261788758965189060164484385690801466167356667036677932998889725476582421738788500738738503134356158197247473850273565349249573867251280253564698939768700489401960767007716413932851838937641880157263936985954881657889497583485535527613578457628399173971810541670838543309159139

ints = [25081841204695904475894082974192007718642931811040324543182130088804239047149283334700530600468528298920930150221871666297194395061462592781551275161695411167049544771049769000895119729307495913024360169904315078028798025169985966732789207320203861858234048872508633514498384390497048416012928086480326832803, 45471765180330439060504647480621449634904192839383897212809808339619841633826534856109999027962620381874878086991125854247108359699799913776917227058286090426484548349388138935504299609200377899052716663351188664096302672712078508601311725863678223874157861163196340391008634419348573975841578359355931590555, 17364140182001694956465593533200623738590196990236340894554145562517924989208719245429557645254953527658049246737589538280332010533027062477684237933221198639948938784244510469138826808187365678322547992099715229218615475923754896960363138890331502811292427146595752813297603265829581292183917027983351121325, 14388109104985808487337749876058284426747816961971581447380608277949200244660381570568531129775053684256071819837294436069133592772543582735985855506250660938574234958754211349215293281645205354069970790155237033436065434572020652955666855773232074749487007626050323967496732359278657193580493324467258802863, 4379499308310772821004090447650785095356643590411706358119239166662089428685562719233435615196994728767593223519226235062647670077854687031681041462632566890129595506430188602238753450337691441293042716909901692570971955078924699306873191983953501093343423248482960643055943413031768521782634679536276233318, 85256449776780591202928235662805033201684571648990042997557084658000067050672130152734911919581661523957075992761662315262685030115255938352540032297113615687815976039390537716707854569980516690246592112936796917504034711418465442893323439490171095447109457355598873230115172636184525449905022174536414781771, 50576597458517451578431293746926099486388286246142012476814190030935689430726042810458344828563913001012415702876199708216875020997112089693759638454900092580746638631062117961876611545851157613835724635005253792316142379239047654392970415343694657580353333217547079551304961116837545648785312490665576832987, 96868738830341112368094632337476840272563704408573054404213766500407517251810212494515862176356916912627172280446141202661640191237336568731069327906100896178776245311689857997012187599140875912026589672629935267844696976980890380730867520071059572350667913710344648377601017758188404474812654737363275994871, 4881261656846638800623549662943393234361061827128610120046315649707078244180313661063004390750821317096754282796876479695558644108492317407662131441224257537276274962372021273583478509416358764706098471849536036184924640593888902859441388472856822541452041181244337124767666161645827145408781917658423571721, 18237936726367556664171427575475596460727369368246286138804284742124256700367133250078608537129877968287885457417957868580553371999414227484737603688992620953200143688061024092623556471053006464123205133894607923801371986027458274343737860395496260538663183193877539815179246700525865152165600985105257601565]

for i in range(len(ints)):
    if (pow(ints[i],(p-1)//2,p)) == 1:
        print(pow(ints[i],(p-1)//2,p))
        print(pow(ints[i],(p+1)//4,p))

 

┌[wyv3rn🐲]-(/mnt/c/Users/lmaxl/Downloads)
└> ./solve.py 
1
93291799125366706806545638475797430512104976066103610269938025709952247020061090804870186195285998727680200979853848718589126765742550855954805290253592144209552123062161458584575060939481368210688629862036958857604707468372384278049741369153506182660264876115428251983455344219194133033177700490981696141526
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Wargame > Cryptohack' 카테고리의 다른 글

Encoding Challenge  (0) 2023.02.15
Network Attacks  (0) 2023.02.13
Quadratic Residues  (0) 2023.02.08
Modular Inverting  (0) 2023.02.06
Modular Arithmetic 2  (0) 2023.02.03
'Wargame/Cryptohack' 카테고리의 다른 글
  • Encoding Challenge
  • Network Attacks
  • Quadratic Residues
  • Modular Inverting
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (493)
      • To do list (6)
        • Doing (0)
        • Complete (6)
      • Diary (35)
      • Tips & theory (77)
      • Kernel Exploit (22)
      • Wargame (313)
        • pwn.college (34)
        • Dreamhack (148)
        • pwnable.kr (15)
        • Lord of Sqlinjection (3)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (40)
        • Solved (38)
        • Unsolved (2)
      • Script (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    BOF
    Me
    dreamhack
    x64
    Format String Bug
    x86
    cryptohack
    tcache
    pwnable.kr
    hackerschool
    ROOT ME
    phoenix
    la ctf
    32bit
    64bit
    pwntools
    CANARY
    Buffer Overflow
    vtable
    root
    lob
    heap
    libc
    docker
    rop
    root-me
    RTL
    _IO_FILE
    exploit education
    FSB
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
Legendre Symbol
상단으로

티스토리툴바