본문 바로가기

Programming/네트워크/보안

안전한 패스워드 생성

패스워드(password)는 오늘날 정보보안 시스템에 있어 상당히 취약한 연결고리가 되고 있다. 하지만 패스워드는 현재도 그렇고 앞으로도 계속 사용될것이다. 

패스워드는 주로 기계에게 사람을 인증하기 위해 쓰인다. 즉, 아무것도 모르는 기계로 하여금 어떤 사람이라고 주장하고 있는 사람이 실제 그 주장의 사람이 맞다는 것을 증명하기 위한 방법의 하나이다.

사람은 다음 세가지를 적절히 조합해 기계로부터 인증을 받을수 있다.


- 알고 있는 어떤것

- 가지고 있는 어떤것

- 본인 자체의 어떤것


이 중 패스워드는 '알고 있는 어떤것'에 해당한다. '가지고 있는 어떤것'이란 스마트카드 등을 예로 들 수 있으며, '본인 자체의 어떤것' 이란 생체 인식을 예로 들 수 있다.


그렇다면 요즘의 뛰어난 과학기술덕분에 각광받고 있는 생체 인식 기술등이 아직도 패스워드를 완벽히 대체하고 있지 못한 이유가 무엇일까. 

바로 비용 때문이다. 대부분의 사회 기반 시스템 장치들에는 번호패드 또는 키보드가 달려있고 개인이 쓰는 컴퓨터 등의 기계에도 기본적으로 키보드가 달려 있다. 키보드는 기계에게 사람이 명령을 내릴 수 있도록 해주는 1차적 형태의 input device이며, 가장 널리 사용되고 있다고 볼 수 있다. 이 키보드에 최적화 된 것이 패스워드이다. 지문인식, 홍채 인식등의 방식은 추가적인 장비를 필요로 한다. 내부 알고리즘이 소프트웨어로 구현 되어 있다고 하더라도 기계에게 사람의 생체 정보를 입력 할 수 있는 방법은 하드웨어 차원에서 보장해 주어야 하기 때문이다. 이 장치들의 가격이 나중에 저렴해 질 수는 있겠지만  컴퓨터에 달린 키보드는 패스워드를 통한 인증의 용도 이외에 다른 명령을 내릴 수 있는 역할도 하는 반면 이 장치들은 대게 인증의 용도로 밖에는 쓰이지 않는다.


요즘 판매되고 있는 노트북을 보면 거의 기본적으로 블루투스, 무선랜 등의 장비가 들어가 있다. 하지만 일반 유저가 데스크탑을 조립 할 때 블루투스, 무선랜 등은 따로 구입해서 메인보드에 부착하지 않는다. 데스크탑에서는 굳이 쓸 일이 없기 때문이다. 이처럼 생체인식 장비가 아주 싸진다고 하더라도 굳이 불필요하고 하루 한번정도 밖에 사용되지 않을 이런 장비를 데스크탑에 부착할 일은 별로 없을것이다. 

이런이유로 패스워드가 지속적으로 쓰일 수밖에 없다. 게다가 패스워드는 꽤나 안전하게 쓰일 수 있다. 

보통수준의 64비트 키를 갖는 암호화 알고리즘을 해킹해서 키를 찾아내는 방법이 전수키 조사 방법 밖에 없다고 가정 할 때 조합 가능한 키의 개수는 2의 64제곱 개 이다. 그럼 공격자가 정확한 키를 찾아내기 까지는 평균 2의 63제곱 개의 키를 시도해 보아야 한다. 1초에 2의 40제곱개의 연산을 계산 할 수 있는 컴퓨터가 있다고 하면 이 컴퓨터로 이 키의 전수키 조사에 2의 23제곱 초가 걸리고 이는 대략 38시간 정도가 소요 된다. 그렇다면 256가지 문자 중 하나로 정해지는 8개로 만들어진 패스워드를 알아내려는 노력을 생각 해 보자. 이 경우 조합 가능한 8개 문자는 총 256의 8제곱 개 이고, 이는 2의 64제곱가지 이므로 앞에 설명한 암호화 알고리즘을 푸는 노력과 일치한다.

 

요즘에 컴퓨터의 성능이 좋아져서 암호화 알고리즘에 쓰는 키의 비트 수가 128비트 이상 인 것과 마찮가지로 패스워드도 문자 뿐 아니라 숫자, 대소문자 구분, 특수문자 등을 포함한 12개~14개를 권장하고 있다. 이렇게 사용된 패스워드는 알아내기가 현실적으로 불가능 하다. 하지만 불행하게도 사용자의 입장에서 패스워드를 기억 할 수 있어야 하기 때문에 사용자는 패스워드에 쓰이는 문자 구성을 무작위로 하지 않고 자신이 알고 있는 특정 숫자, 단어 등에 기초에서 패스워드를 생성한다.

요즘엔 많은 사람들이 패스워드를 정할 때 생년월일, 집주소, 전화번호 등을 사용하는 것이 좋지 않다는 것을 알고 있지만 그 와중에도 이를 사용하는 사람들은 많으며, 이런 알려진 문자가 아니더라도 자신이 좋아하는 단어, 숫자 등을 패스워드로 많이 쓰게 된다. 

해커들은 이런 자주 쓰이는 패스워드가 수록된 '사전' 형태의 데이터를 가지고 있으며 특정 사이트를 공격할때 그 사이트의 모든 아이디에 대해 이 패스워드를 전부 입력해보는 방법으로 불특정 다수의 패스워드를 얻어 낼 수 있다. 물론 이들은 네이버, 구글 등의 잘 알려진 사이트를 공격하지는 않는다. 사용자들은 거의 모든 사이트의 패스워드와 아이디를 똑같은 것을 사용하기 때문에 굳이 이런 거물급 사이트를 건드릴 필요가 없다. 개인이 운영하는 회원제 사이트 또는 중소 업체가 운영하는 회원제 사이트를 타깃으로 잡으며 이런식으로 아이디에 따른 패스워드를 알아 내면 유명한 사이트나 공격자가 타깃으로 삼은 특정 사이트에 같은 아이디, 같은 비밀번호로 로그인을 할 수 있다. 해커들이 이렇게 개인의 계정을 알아내는 이유는 여러가지가 있을 수 있겠지만 자신이 접근 할 수 없는 어떤 기업에 속한 사람의 계정을 얻어 그 기업에 침투해 계정의 권한을 격상시켜서 피해를 줄 수도 있고 DDOS 공격에 이용 할 수도 있다. 요즘에는 스팸게시글 등을 올리는데에 자주 사용 되는 것 같다. 네이버 등의 카페에 새벽시간대에 올라오는 스팸 게시글들은 그 카페에서 정식으로 활동 하던 사용자의 계정이 해킹당한 경우가 대부분이다. 


그렇다면 안전한 패스워드를 만드는 방법은 무엇일까.

가장 이상적인 방법은 모든 사이트의 아이디, 패스워드를 다르게 하고, 모든 패스워드를 무작위로 생성하는 것이다. 또한 한달에 한번씩 모든 패스워드를 새로 생성하여 교체 하는 것이다. 하지만 사람은 망각의 동물.... 이런방식은 혼란을 가중 시킨다. 

현실적으로 쓸 수 있는 방법중 하나는 사이트의 패스워드들에 한 두자를 다르게 하는 것이다. 패스워드에 그 사이트의 이름을 추가 한다던가 하는 등의 방법을 이용 할 수 있다. 이 방법이 아니더라도 메일, 블로그 등의 계정과 인터넷 뱅킹, 공인인증서등의 돈과 관련된 계정은 반드시 패스워드를 다르게 써야 한다.


그렇다면 패스워드의 내용으로는 어떤것을 써야 할까. 아직 몇몇 사이트는 패스워드의 대,소문자를 구분하지 않거나 8자리 까지만 지원 하거나, 특수문자는 지원하지 않는 곳이 있다. 하지만 이런 몇몇곳을 제외하고는 전부 12~16자 정도까지의 패스워드를 지원하고, 대소문자 구분, 특수문자를 지원한다. 그러므로 이를 적극 활용해서 영어와 숫자, 특수문자가 모두 들어간 패스워드를 구성하고 영어는 중간중간 대 소문자를 병행해서 써준다.

패스워드내에서 쓰일 영문자는 일반 영어 단어보다는 패스프레이즈를 기반으로 한 패스워드 선정 방식이 가장 안전하다.(어차피 영어 단어가 들어가야 한다면)

패스프레이즈란 단순한 단어가 아닌 문장으로 구성된 방식이다. 즉, four score and seven years ago 라는 문장에서 FSa7Yago 라는 패스워드를 만들어 낼 수 있다. 이러한 방식은 단어 사전에 의한 공격을 방지 할 수도 있으며 어찌보면 의사 랜덤에 가까운 단어들이므로 풀기가 어렵다. 

'Programming > 네트워크/보안' 카테고리의 다른 글

암호화 알고리즘 - 고전암호  (0) 2013.04.27
정보보안에 쓰이는 용어  (0) 2013.04.27