구현 배경 |
우리는 하루에도 수십 번씩 "HTTP://"를 통해서 웹서비스를 이용합니다. 하지만, 그 어떠한 웹사이트도 "사용자 로긴 정보"가 LAN 선을
통해서 흘러갈 때 완벽한 "평문"으로 흘러간다는 것을 알려주는 곳도 없고, 사용자 역시 어쩔 수 없이 사용하는 것이 현실입니다.
Microsoft의 Passport 서비스나 "https://"로 구현되는 SSL 등이 있지만 유료화로 인해 많이 퍼지지 않고 있는
실정입니다.
문제는, 그렇게 흘러가는 사용자 ID와 암호가 그다지 어렵지 않게 네트워크상에서 가로챌 수 있다는 것입니다.
결론은... 웹사이트 스스로 구현을 해야 하는 수밖에 없는데요. 하지만 그것도 그리 쉽지 않습니다. 어쨌든 ActiveX 컨트롤을 내려보내야
하고, 그것을 폼(!)나게 설치하려면 "컨트롤 인증서"를 구입해야 하기 때문입니다.
제 http://sysnet.pe.kr 웹사이트는 사용자의 로긴정보를
보호하기 위한 예시로서 구현해 보았습니다.
물론, 이 구현이 완벽한 것은 아닙니다. 하지만, 굳이 비유를 들자면... 밭에 끈으로나마 울타리를 치는 것과 치지 않는 것은 엄청난
차이가 있으니까요. |
절차 |
SYSNET.PE.KR에서는 다음과 같이 로긴 정보에 대한 보안을 적용하고 있습니다.
1. 회원 가입
-- 클라이언트 측
ㄱ. 입력한 자신의 ID와 비밀번호를 Seed로 해서 개인키와 공용키를 생성.
ㄴ. 사용자가 입력한 비밀번호를 MD5 단방향 해시 문자열로 만듦.
ㄷ. SYSNET.PE.KR에서 공개한 RSA 공용키로 해시된 비밀번호를 암호화 시킴.
ㄹ. 평문의 사용자 ID, 사용자의 평문 공용키, 암호화된 MD5
해시된 비밀번호를 서버로 전송
--- 서버 측
ㄱ. 전송되어진 평문의 사용자를 DB에 저장.
ㄴ. 전송되어진 평문의 공용키를 DB에 저장.
ㄷ. 전송되어진 암호를 서버만이 가진 개인키로 복호화해서 얻은 MD5 해시된 비밀번호를 DB에 저장.
** 효과 **
1) 해시된 비밀번호가 서버의 DB에 저장되므로 서버 관리자조차도 사용자의 비밀번호를 알 수 없음. 나아가서 DB가 해킹당해도
사용자의 비밀번호를 알 수 없음.
2) 만약, DB를 해킹 당한 경우에는, 해킹된 MD5 문자열을 가지고, 고성능 컴퓨터로 모든 문자열에 대해서 차례로
MD5 해시 알고리즘을 적용하여 일치하는 문자열을 찾을 때까지 반복하는 경우에는 확률적으로 원래의 비밀번호를 찾는 것이 가능.
3) 해커가 네트워크 상에서 데이터를 가로채더라도 MD5 해시된 비밀번호 문자열이 서버 측 RSA 공개키로
암호화되어 있으므로, 해커는 RSA 개인키를 알아내야 하고 MD5 해시 문자열도 해독해야 하므로 확률은 보다 더
낮아지게 됨.
2. 사용자 로그인
-- 클라이언트 측.
ㄱ. 입력한 자신의 ID와 비밀번호를 Seed로 해서 개인키와 공용키를 생성.
ㄴ. 사용자가 입력한 비밀번호를 MD5 단방향 해시 문자열로 만듦.
ㄷ. 서버에 자신의 공용키와 아이디를 전송.
ㄹ. 서버는 유일한 "GUID 난수"를 생성하고, "ㄷ" 단계에서 전송되어진 클라이언트의 공용키로 암호화하여
클라이언트로 반환, 또한 해당 "GUID 난수"는 서버의 DB에 해당 ID 회원 정보 테이블에 저장.
ㄹ. "암호화된 난수 키"를 자신의 개인키로 풀어내고, 해독된 키를 Seed로 해서 RSA 개인키/공용키를
만듭니다.
ㅁ. "난수 키"로 만들어진 공용키로 MD5 해시된 사용자 암호를 RSA 암호화 하여 서버로
전송, 평문의 사용자 ID 전송.
-- 서버측
ㄱ. 전송되어져 온 평문의 사용자 ID에 해당하는 "GUID 난수"를 서버의 DB로부터 조회.
ㄴ. "GUID 난수"로 RSA 개인키/공용키를 생성.
ㄷ. 전송되어져 온 암호화된 MD5 해시 비밀번호를 "GUID 난수"로 생성된 개인키로
RSA 복호화.
ㄹ. 복호화된 MD5 비밀번호와 사용자 ID 정보가 서버에 있는지 조회.
ㅁ. 있으면 정상 로긴 절차를 거치고, 저장된 서버의 "GUID 난수"를 제거.
** 효과 **
1) 오고가는 패킷을 가로채어 마지막으로 서버로 전송되어지는 정보를 가로챈다해도 해커는 두 번 다시 그 문자열 구성으로 "재로긴"을
시도할 수 없음. 즉, 현재의 모든 웹사이트에서는 HTTP FORM이 Submit 된 시점의 데이터가 네트워크를 흘러가는 것을 가로채게
되면, 해커는 동일한 HTML FORM 구성을 통해서 간단히 재로긴을 할 수 있지만, "SYSNET" 웹사이트에서는 그것이 불가능.
3. 회원 정보 변경(비밀번호 변경)
-- 클라이언트 측, 서버 측 모두 "2번 사용자 로그인"과 동일한 절차로 정보 전송.
|