-
[회고]암호 연구가는 개발자인가? 보안 엔지니어인가? 아니면 다른 무엇인가?카테고리 없음 2024. 12. 2. 01:23
이번 포스트는 순전히 내 개인적인 경험을 rewind하는 겸, 23~24년도 회고 겸, 2025년도를 준비하는 겸 쓴다.
'암호'에 관심을 가지게 된 프로세스
① 수학에서부터 시작
시작은 수학이다. 중고등학교 때부터 수학이 제일 할만 했기 때문에 대학교 입시를 들어갈 때 정시로 모두 수학과를 썼다.
학교에 대한 욕심은 별로 없었다. 하지만 적어도 내가 하고 싶은 공부를 하고 싶었고 그것이 수학이었다.
전공수업은 실제로 정말 재밌었다. (교수님이 재밌었던게 아니라, 내용이)
특히 1학년 때 선형대수학을 공부하면서 행렬, 선형연립방정식, 벡터, 선형사상이 모두 동형(homomorphic)이라는 사실을 깨닫고 그것을 정리했을 때 그 기쁨은 아직도 잊을 수 없다. 아마 수학에 대해 관심이 없었다면 암호에도 관심이 없었을 것이다.
② 컴퓨터공학부로 복수전공
그리고 2학년 때 컴공을 복수전공하게 된다. 컴공을 하게 된 이유는 간단하다. 수학은 좋아하지만 과학은 별로 좋아하지 않았다.
내가 좋아하는 수학을 세상 속에서 펼칠 수 있는 도구가 컴퓨터하고 생각했고, 그렇게 2학년 1학기 때 복수전공을 시작하게 된다.
남들보다 1년 늦게 학부 수업을 듣는 것은 (거기다가 기존 전공 수업까지 겸하여) 쉬운 일은 아니었지만 싫은 공부는 아니었다.
코딩도 그때 처음 해봤다. C언어 수업을 들으면서 처음으로 해냈던 '지뢰찾기' 게임 만들기 프로젝트가 아직도 기억에 남는다.
코로나 시기였던 그때는 정말 나 혼자만의 노력으로 개발 지식을 쌓아야 했지만, 그때 당시 내가 지식을 습득한 방법은 학부 수업 밖에 없었다. 지금 생각해보면 그때 혼자서 독학을 많이 했어야 하지 않았을까 싶지만, 나에게 그런 충고를 해줄 수 있는 사람은 없었다.
③ 3학년 - AI vs Security
2학년을 마치고 군대를 다녀오게 되면서 앨리스라는 기업에서 하는 군장병SW교육을 수강하게 된다. 거기서 AI를 처음 접해보았다.
OpenCV, doc2vec 등 여러 가지를 가볍게 배워보면서 처음에는 AI에 관심이 생겼었다. 그러다가 군대를 마치고 3학년으로 복학하면서 보안에도 자연스럽게 관심이 생기게 되었다. 아마 관심을 갖게 된 첫 단추가 '암호'였던 것 같다. 나에겐 굉장히 매력적인 분야로 다가왔다.
개발에도 다양한 분야가 있음을 알았기에 3학년을 맞이하면서 나는 고민을 했어야 했다. 그래서 나는 인공지능 수업과 암호학 수업을 동시에 들어 내 관심도를 시험해보기로 했고, 많은 고민 끝에 암호의 매력에 더 끌렸음을 인정했다.
그간의 도전들
① 정보보안동아리로 '보안'에 첫 입문
보안에 대해서 본격적인 도전을 했던 첫 번째 경험은 우리학교에 있는 정보보안동아리에서 한 학기 동안 리버싱 스터디를 진행했던 것이다.
그때 보안이라는 분야의 광활함을 체험했다. '보안' 분야 하나만 딱 정하면 될 줄 알았는데, 그런게 아니었다. 보안에도 정말 다양한 분야가 있었다. 리버싱, 시스템 해킹, 클라우드 보안, 포렌식 등등, ... 그 중에 '암호학'은 많은 사람들이 선호하지 않는 것처럼 보였다.
리버싱이라는 분야에서부터 보안을 시작한 것은 맞지만, 단순히 리버싱 뿐 아니라 다른 보안의 분야들이 정말 많구나, 를 느꼈다. 그리고 동시에, 우리 학교에는 정보보안 관련 수업이 정말 적구나를 느꼈다. 컴퓨터공학부라는 전공의 포괄성 때문일 수도 있겠지만, 보안 관련 수업이 정말 적었다.
② 화이트햇 스쿨 2기
그래서 나는 학부 수업이 아닌 다른 방법을 통해 내가 얻고 싶은 지식을 얻어야겠다는 생각을 하게 되었다. 그때 커뮤니티를 둘러보다 한국정보기술연구원에서 주관하는 '화이트햇 스쿨 2기'에 지원하게 되었다.
포스트를 적다보니 서론이 너무 길어지는 것 같아서 화이트햇 스쿨을 수료하면서 느낀 점을 간단히 말해보자면, 보안의 세계는 여전히 넓고, 암호학을 공부하려면 암호만 공부하는 곳을 가야 하는구나를 체감했다. 그래도 암호만 한다고 해서 암호로만 할 수 있는 게 없듯이, 보안에 관련한 지식과 프로젝트 경험은 나에게 보안 엔지니어로서의 관점을 가지게 해주었다.
③ 언더그라운드 해커팀에 들어가 CTF를 경험
화이트햇 스쿨 2기 활동을 마치고 멘토 분의 추천으로 '루비야랩'이라는 언더그라운드 해커팀에 가입하게 된다. 별다른 자격이 필요한 건 아니고, 보안에 관심 있는 많은 사람들과의 네트워킹과 CTF(Capture The Flag) 참가가 주 목적인 해커팀이었다. 이 해커팀에서 조금 조금씩 CTF 문제를 경험해보면서 암호 알고리즘에 대한 지식과 그 취약점을 직접적으로 느낄 수 있었다.
암호학과 관련된 CTF 문제를 풀어보면서 암호 알고리즘을 어떻게 뚫는지에 대한 방법을 찾는 법은 대충 알아낸 것 같았다. 구글에 해당 문제와 관련된 암호 알고리즘의 취약점을 검색해보면 어느 정도 해답이 나오긴 하지만, 난이도가 있는 문제는 응용력이 요구되는 문제라 입문자인 나에겐 풀기 어려운 문제들이 대부분이었다. 그리고 무엇보다 내가 알고 싶은 암호 알고리즘 그 자체에 대해서 CTF만으로는 분석을 하기가 어려웠던 것 같다. 자물쇠를 뚫는 법만 배우는 느낌이었다. 물론 자물쇠를 뚫기 위해서는 자물쇠가 어떤 구조를 가지고 있고, 어떤 약점이 있는지를 분석하는 것은 필요했다. 그런 점에 있어서 CTF 경험은 분명 나에게 큰 도움이 되었다. 그러나 과거에나 쓰였던 암호 알고리즘의 취약점을 뚫기 위한 의도로 만들어진 문제를 통해 현실에서 어떤 암호가 쓰이고, 응용이 되는지를 알 수는 없었다.
④ 암호는 어떻게 배울 수 있을까?
여러 차례 시행착오를 거치면서 내가 배우고 싶은 암호는 어떻게 배울 수 있으며, 이 분야는 우리가 살아가는 실제 세상에서 어떻게 적용이 되는 것인가가 궁금해졌다. 이 궁금증을 해결하기 위한 방법은 대학원 밖에 없었다.
암호(Cryptography)를 연구하는 사람은 누구인가?
'보안'을 건드리면서 느낀 점
서론이 너무 길었다. 내가 보안이라는 분야에 발(도 아니고 발가락 정도)을 담가보면서 분명하게 느낀 점 하나는, 정보보안이라는 분야는 '개발'과는 무언가 관점이 다르다는 것이다. 여태 리버싱 스터디, 화이트햇 스쿨, 실제 암호학 수업을 들으면서도 선명하게 느낀 점은 바로 이것이다. 보안은 단순히 코드를 만들고 프로그램을 만드는 것과는 어딘가 달랐다. 무엇을 다르게 느꼈는지를 간단하게만 말해보자면,
(정말 순수 내 느낀 점이기 때문에 사실과 많이 다를 수 있다)
① 프로그램을 만드는 것이 아니라, 프로그램을 부순다
적절한 표현을 찾기가 힘들지만, 적어도 리버싱이나 시스템 해킹, 포렌식에는 해당되는 이야기일 수 있다. 화이트햇 스쿨의 사람들을 만나 이야기를 나누다보면, '개발은 못한다'는 이야기를 종종 듣곤 한다. 누구는 정보보안 관련 학과를 나오기도 했고, 아예 특성화고를 다니고 있어서 보안에 대한 지식이 풍부한 친구들도 있다. 이 친구들은 처음부터 프로그램을 만드는 법을 배운 사람들이 아니라, 부수는 법을 배운 사람들이다. 프로그램을 부수는 목적은 단 하나다. 프로그램의 취약한 부분을 찾아내기 위함이다. 그것이 왜 필요하고 왜 중요할까?
② 뚫는 법을 알아야 막는 법을 안다
개발을 하다보면 여러 가지 코딩 기법이나 소프트웨어공학적인 방법론을 많이 배우곤 한다. 이러한 것들을 배울 때 마다 There is no silver bullet 이라는 문장을 많이 인용하곤 한다. '완벽한, 최고의 단 하나의 개발방법론은 없다'는 뜻이다. 보안도 이와 비슷하다. 뚫리지 않는 방패와 모든 것을 뚫는 창의 대결이다. 이 두 싸움이 오늘날의 보안을 만들어낸다. 보안을 공부하는 사람들은 보안을 뚫는 법을 배운다. 그래야만 이것을 방어할 수 있는 법을 알 수 있기 때문이다.
암호는 보안에서 어떤 역할을 담당하는가
암호학은 정보를 보호하기 위한 언어학적 및 수학적 방법론을 다루는 학문이다. (출처 : 드림핵)
암호는 데이터를 보호한다. 데이터는 우리의 개인정보가 될 수도 있고, 국가의 기밀정보가 될 수도 있다.
앞서 설명했듯이 보안 엔지니어들이 프로그램을 부수다보면 암호화된 파일이나 데이터를 발견하게 된다.
그리고 이것을 복호화하기 위해 어떤 프로그램을 만들거나 여러 툴(tool)들을 이용하기도 한다. 쉽게 말해서 자물쇠를 따내는 것이다.
결국 암호는 보안에서 '자물쇠'를 맡는다. 자물쇠가 자물쇠의 역할을 담당하려면 이 자물쇠가 뚫기 힘든 자물쇠어야 할 것이다.
이 '뚫기 힘든' 이라는 말에서 기본적인 암호의 수준과 모든 것이 결정된다.
그러면 생각을 해보자. 암호와 관련된 일을 하는 사람은 개발자인가? 아니면 보안 엔지니어인가?
암호를 연구하는 사람은 , 결국 '암호 연구가'
맨 위에는 어려운 수학적 문제를 제안하고 해결하는 암호 분석가가 있다.
(...)
그리고 맨 아래에는 데이터를 암호화하려는 소프트웨어 엔지니어가 있다.
- 타이 두엉(Thai Doung), <So you want to roll your own crypto?>, 2020더 튼튼한 자물쇠를 만드는 것은 개발자의 몫도, 보안 엔지니어의 몫도 아니다.
그들은 그저 자물쇠를 사서 이용하는 고객이자, 더 좋은 자물쇠를 만들기를 촉구하기 위해 자물쇠를 끊임없이 부수려 하는 타공업자들이다.
더 안전한 자물쇠를 만드는 것은 순전히 자물쇠를 설계하는 사람의 몫이다.
실제로 우리가 통신 프로토콜을 보거나, 리버싱을 통해 암호화된 파일을 보면 실제로 대부분의 개발자들은 암호화 알고리즘에 대한 관심보다는, 암호화된 파일을 타켓으로 분석하는 경우가 많다. (그리고 그것이 어찌 보면 당연하다. 자물쇠로 잠긴 상자 안에 무엇이 들어 있는지 궁금해야 하는게 분석가들의 역할이다. 자물쇠 자체에 관심을 두는 경우는 거의 없다.)
그러나, 암호를 만드는 과정은 분명 중요하다. 그렇기에 개발자와 보안 엔지니어가 아닌, 정말 암호를 만들고 분석하는 사람이 있어야 한다.
돌고 돌아 여기까지 오다 보면 결국 내가 하고 싶었던 것은 아마 암호 분석가가 아니었나 싶다. 아직도 수학에는 난제가 많고 풀리지 않은, 그리고 결코 풀릴 수 없는 문제들이 있다. 그러한 어려움에 기반하여 암호를 만들고, 누군가가 그 암호를 끊임없이 분석하여 알고리즘을 깨부수는 노력을 한다. 그러나 그 노력이 한계에 다다를 때 비로소 그 암호를 안전하다고 판정하여 상용화가 되는 것이다.
예전부터 '양자 컴퓨터'의 존재에 대한 이슈는 있어 왔고, 오늘날 양자 컴퓨터의 실현 가능성은 굉장히 높다고 생각한다.
이미 상용화 단계로 들어서고 있고, 오늘날 IT계의 발전 속도를 고려하면 머지 않아 양자 컴퓨터로 인해 암호의 중요성은 더욱 부담이 가해질 것 같다.
지금 이 시간에도 수많은 암호 연구가들이 양자 컴퓨터에서도 유효한 암호 알고리즘을 만들어내기 위해 노력하고 있을 것이다.
훗날 나도 그들 중 하나가 되어 내 주변 사람들이 나를 통해서 걱정 없이 편안하게 개인정보를 보호할 수 있는 날이 오기를 기다린다.
내년에 이제 4학년으로 복학하면서 대학생의 마지막을 향해 달려갈 텐데, 졸업 프로젝트의 아이디어 구상, 그리고 대학원 준비, 논문 읽기, 영어 공부, 학점 관리 등 여러 모로 바쁜 25년이 될 것 같다.