보안 공부하는 꼬깔이


 

1번문제에 접속하면 위와 같은 화면이 출력될 것이다.

문제에는 실제 노트에 K -> M , O -> Q , E -> G 이런식의 치환을 의미하는 사진이 보여진다.

K 알파벳은 M으로 O 는 Q , E 는 G 이를 통해 우리는 알파뱃을 두칸씩 뒤로 밀어 치환시킨다는 것을 알수있다. 

g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.

그리고 위와 같은 카이사르 암호화 구문이 보일것이다. 

노트에 적혀있는 힌트와 카이사르 암호의 연관성을 생각해보면 해당 카이사르 암호문은 기존 내용의 알파벳들을 각각 모두 두칸씩 뒤로 밀어 암호화 시켰을 것이다.

그러므로 파이썬 코딩을 통해 카이사르 암호를 복호화 시키는 코드를 작성하면 문제공략이 가능할 것이다.


TIP.카이사르 암호?

- 카이사르 암호(ceasar cipher)는 암호학에서 다루는 간단한 치환암호의 일종이다. 암호화하고자 하는 내용을 알파벳 별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식이다. 예를 들어 3글자씩 밀어내는 카이사르 암호로 'COME TO ROME' 를 암호화 하면 'FRPH WR URPG' 가 된다.

*출처: https://ko.wikipedia.org/wiki/카이사르_암호


카이사르 암호문의 알파벳 각자리수를 2칸식 앞으로 당겨 복호화 하는 코드를 작성했다

https://github.com/leeggoggal/Python/blob/master/python_challenge_1.py

해당 코드에 대한 설명은 위링크의 github에 작성해 두었다.

i   h o p e   y o u   d i d n t   t r a n s l a t e   i t   b y   h a n d . t h a t s   w h a t   c o m p u t e r s   a r e   f o r .   d o i n g   i t   i n   b y   h a n d   i s   i n e f f i c i e n t   a n d   t h a t ' s   w h y   t h i s   t e x t   i s   s o   l o n g .   u s i n g   s t r i n g . m a k e t r a n s ( )   i s   r e c o m m e n d e d .   n o w   a p p l y   o n   t h e   u r l .

해당 코드를 실행하면 위와 같은 복호화된 문장이 출력된다. 코드를 짜는것보다 영어 문장을 해석하는게 더 어려운거 같다.

어렵게 해석을 해본 결과 내용은 이러하다. "손으로 복호화 하지 말고 컴퓨터를 사용해라. 텍스트가 매우 길기 때문에 손으로 하는 것은 무리한 짓이다. string.maketrans() 함수를 사용하길 추천한다.  지금 url에 적용해라"

아무래도 string.maketrans() 라는 함수를 사용하여 url에 적용해야하는 모양이다. 이 함수가 어떤 기능을 하는지 구글링을 통해 알아보자.

https://www.tutorialspoint.com/python/string_maketrans.htm

구글링을 통해 string.maketrans() 함수의 사용법을 이해하기 쉽게 설명해둔 사이트를 찾았다.

*출처 : https://www.tutorialspoint.com/python/string_maketrans.htm

해당 사이트의 예제를 참조하면 intab 변수에는 변환전 문자를 outtab 문자는 변환될 문자를 저장하고 maketrans 함수에인자를 던져주면 각 변수에 저장된 문자의 각각 자리수를 매칭해 변환한다.

어떻게 사용하는지 알았으니 string.maketrans 함수를 이용하기 전에 url에 적용하라는 의미를 생각해보자

해당 문제의 url 을 보면 현재 페이지는 map.html이다. 그렇다면 map이라는 문자를 maketrans 함수를 이용해 처음 노트에 적힌 힌트대로 2칸씩 미뤄 출력시킨 값을 url로 넘겨주면 어떻게 될까?

위 코드를 실행시키면 map을 치환한 어떠한 문자가 나온다 그문자를 url로 넘겨주면 다음 문제 페이지로 넘어가게 된다.

1번 문제 공략 완료!