분류없음2017.10.13 03:58

예전에 RSA 암호화를 아주 잘못되게 구현한 적이 있었다. node.js 기반 웹 서비스였는데 그냥 취미로 만들던 것이라 보안같은건 1도 신경쓰지 않고 개발했었다사실 보안을 잘 몰랐다. SSL 인증서를 구입하면 그나마 편하긴 한데, 퍼블리싱할 것도 아니고 그냥 방구석 라즈베리파이에서만 돌릴 것이라 구지 돈 들여서 구입할 필요도 없었다. 나중에 퍼블리싱 할 것 같음 쓰지 뭐... 하는 생각으로 미루었다.


기획했던 서비스는 유저 기능이 필요했다. 하지만 사용자는 한명뿐이었다고 한다. 유저 기능을 구현하기 위해 db 스키마를 만들고 회원가입, 로그인 폼 만들고 하면서 기능을 개발했다. 패스워드 입력창을 지긋이 바라보면서 아무리 유저가 혼자라지만 많은 사람이 쓸 것 생각하고 기획한 것이니 보안을 무시할 수 없겠다는 생각이 들었다. 그렇다고 SSL을 구입할 생각도 아니었으니 답은 RSA 암호화 알고리즘을 쓰는 것 하나였다.

그래서 RSA 도입을 시도해봤다. 해커가 유저의 패킷을 도청했을 때 평문이 나타나지 않게끔만 하면 성공이다. 웹 클라이언트의 스크립트 부분에서 암호화 돌려서 서버에 POST시켜주면 되는 건데... 여기서 나의 멍청함이 등장하기 시작하였다. 나는 웹의 자바스크립트에서 암호화를 돌린 것이 아니라 그냥 평문을 서버에 POST 날리고 그걸 서버에서 암호화한뒤 result로 암호문을 받고, 그걸 다시 POST해서 서버에 전송시킨 것이었다. 패킷 스니핑 해보니 역시 테스트하고 있던 비밀번호가 적나라하게 보였다. 지금 생각해봐도 되게 웃기다 ㅋㅋ 


변명을 좀 해 보자면, RSA에 대해 알게 된 게 그때가 처음이었고, RSA 라이브러리가 왜인지 클라이언트단에서 잘 안먹혔던 점도 있었다. 그리고 수단과 방법을 가리지 않고 '어떻게든' 암호화해서 서버로 전송시켜주면 된다고 착각하고 있었다. '어떻게든' 한다는 방법이 서버로 돌리는게 돼서 문제였는데, 결과적으로 암호화를 구현한 의미가 사라져 버리게 되었다. 그냥 가볍게 프로젝트 한다는 생각으로 해서 착각한 것인지 모르겠지만 아무튼 통신 구조나 설계를 좀 더 정확하게 이해할 필요를 느낄 수 있었던 경험이었다.



Posted by icaynia