Gae Ko's Blog

ppt 대용 발표자료 본문

암호

ppt 대용 발표자료

Gae Ko 2018. 8. 3. 15:29

R u Ronald Rivest


재승이 블로그 있는 라이트업을 보고 풀이 흐름을 깨닫고 모르는 부분에 대해 찾아서 알아가는 식으로 공부하였습니다.


문제 풀이에 앞서서 RSA 관한 기본적인 설명

---------------------------------------------------------------------------------------

RSA

-  공개키 암호 시스템으로 공개키와 개인키를 사용

-  공개키는 모두에게 알려져 있으며 암호화할 때 사용하고 개인키를 가진 자만이 암호화된 것을 복호화할 수 있음 

-  키 생성 과정

    1. n = pq (p와 q는 서로 다른 두 소수)
    2. Φ(n) = (p-1)(q-1)
    3. gcd(e, Φ(n))= 1 e선택하여 ed mod Φ(n)=1 d 생성

       이  확장된 유클리드 호제법을 사용하여 d 구한다

 

- 암호화 : c = m^e mod n 

- 복호화 : m = c^d mod n

----------------------------------------------------------------------------------------

 



[문제]

 



주어진 파일 안에는 lol_pub.pem text.txt 가지 파일이 있다.

이름을 보아 lol_pub.pem 공개키에 관한 파일이고 text.txt 암호화된 파일인거 같다.

복호화하면 플레그가 있는게 아닌가 싶다.

 



[풀이]


공개키는 숫자인데 lol_pub.pem 파일을 보면 base64 인코딩된 듯한 문자와 위아래로 텍스트 문자열이 들어가있다. 이러한 형태를 띄고 있는 파일은 PEM(Private Enhanced Mail)포맷파일로, 공개키를 암호화한 파일이다.

 

직접 base64 디코딩해줘도 되지만 키값이 아닌 데이터도 포함되어 있기 때문에 정확한 키를 알아내기 위해 openssl이라는 툴을 사용한다.

 

openssl 네트워크를 통한 데이터 통신에 쓰이는 TLS SSL프로토콜을 구현하는 오픈소스 라이브러리로, 인증서 확인 생성 등의 기능을 제공하고 있다.



  • pem인코딩된 인증서를 파싱하여 정보를 출력하기

 openssl rsa -noout -text -pubin -in lol_pub.pem


       

      공개키  n 225bit 사용하고 있고e 65537이라는 값임을   있음



      • n 정확한 값을 알고 싶다면 다음과 같은 작업을 해주면 된다.

      ans1parse openssl에서 ANS.1형식 파일을 파싱해주는 툴이다.

      다음 링크를 가보면 ans1parse에 대한 설명과 사용할  있는 옵션들에 대해 설명및  결과에 대한 설명이 있다.

      (https://www.openssl.org/docs/man1.0.2/apps/asn1parse.html)


        a. 환경변수로 문자열을 파싱

           PUBKEY=`grep -v -- ----- lol_pub.pem | tr -d '\n'`


            b. 그 결과를 base64 디코딩하여 openssl 이용해 정보를 읽어오기

             echo $PUBKEY | base64 -d | openssl asn1parse -inform DER -i

             

             


            공개키의 정보가 offset17 BIT STRING 위치하여 있음을   있음 -> -strparse 옵션을 사용하여 검사할  있다.

            다음 명령어는 offset 17에서 시작하는 부분을 파싱한 결과를 보여준다.


             echo $PUBKEY | base64 -d | openssl asn1parse -inform DER -i -strparse 17


             

            n : 0x013269DC2680BC64277889DC6A101ED6F13DD07498F13A4818474C2069

                (32269109513264378873151120068074444086989044741418671122338798116969)

            e : 0x010001 (65537)

             

            n  소수의 곱이다n 구했으니 p q 찾으면 d 구할  있겠다!


            • n을 소인수분해 하여 p와 q 구하기 


            p,q = 1796360473659570891671495336244551, 17963604736595708916714953362445519


            p와 q 그리고 e를 아니까 개인키 d를 구할 수 있다. rsatool 사용하면 쉽게 구해준다고 한다. 

             


            • rsatool을 사용하여 개인키 구하기 

            rsatool 을 다운받을라고 하는데 음.... 어떻게 해야하는지 막혀버렸다 ㅠㅠ 


            rsatool학교와서 재승이에게 물어보니, openssl을 이용하지 않아도 정의대로 구하는 법(너의 말을 잘 이해한거 맞니?^^)으로 하면 

            되지 않냐는 조언을 듣고 집가서 다시 시도해보겠다!!!! ㅎㅎ 


            재승이 블로그를 보면 저 툴을 사용하여 d를 구하여 개인키를 생성하고

            그 개인키를 사용하여 문제에 주어진 text.txt파일을 복호화하면 복호화된 결과값들이 플레그를 의미한다. ㅎㅎ



            lol_pub.pem

            text.txt