2011년 5월 19일 목요일

개인정보와 암호화

요즘들어 해킹으로 인한 개인정보 노출 이슈가 굉장히 많습니다. 물론 적당히 넘길 사안이 아니라 매우 중요하고 큰 문제이므로 반드시 확인하고 해결하고 벌도 주고 해야겠지요.

요번에는 세티즌이라는 곳에서 해킹을 당해 개인정보가 노출되었다고 합니다. 한번 확인해 보세요.

http://www.cetizen.com/notice_popup/notice_pop0519.php

주민등록번호와 패스워드 같은 초중요 개인정보는 암호화가 되어있다고 안심하라고 하네요.


암호화?


암호화란 무엇일까요. 뭐 직관적으로 생각해보면 남이 알아볼 수 없는 특별한 방법으로 자신만 알아볼 수 있도록 변조하는 것이지요.

물론 컴퓨터의 세상에도 암호화란 동일한 의미입니다. 암호화된 데이터로는 원래의 데이터가 무슨 데이터인지 알 수 없게 바꾸는게 암호화입니다.

하지만, 암호화 라는게 무작정 자신만은 해독할 수 있는 신호체계라는 건 아니라는 것이지요.

두 가지 암호화 기법에 대해 소개를 하고 안전할지에 대한 개인적인 추측을 한번 서 보겠습니다. (단 용어는 공식용어가 아닐 수도 있습니다)

양방향 해싱


해싱이라는 용어를 썼습니다. hasing이라는 전문용어로, 특정 데이터를 특정한 알고리즘으로 특정하게 바꾸는 행위 혹은 알고리즘 자체를 의미하기도 합니다. 여기서는 암호화 한다는 의미로 이해해도 됩니다.

양방향 이라는 의미는 암호화(encryption)와 복호화(decryption)가 가능하다는 말입니다. 즉, 암호로 바꿨으면 그 암호를 다시 풀어서 원본 내용을 알 수도 있다는 말이지요.

사실 양방향 해싱에 대한 이론은 굉장히 많고 알고리즘도 다양합니다. 공인인증서를 인터넷 뱅킹 등에서 이용할텐데 이런 인증서도 암호화 때 사용하는 정보 중 하나입니다.

단순하게 정리하자면 '양방향 해싱'이란 건 복호화가 가능한 암호화 라는 점입니다. 원본과 암호 양 쪽을 왔다 갔다 할 수 있기 때문에 양방향 이라고 이름 지었다고 생각하면 되겠습니다.

단방향 해싱


양방향이 있다면 단방향도 있습니다. (해싱(hashing)이라는 말 자체는 보통 단방향 해싱을 의미하는 경우가 많다는 것을 미리 알립니다.)

단방향의 특징이라면 복호화가 불가능하다는 점이 있습니다.

단방향 해싱은 원본 데이터를 특정한 알고리즘과 특정한 키 데이터를 이용해서 원본의 내용과는 완전히 동떨어진 데이터를 구축합니다. 하지만 이것은 원본 데이터를 암호화 한 것이 아니라, 원본 데이터를 특정한 규칙으로 새로운 방식으로 표현한 데이터입니다.

그래서 단방향 해싱 기법으로 암호화를 하면 원래의 데이터를 알 수가 없습니다.

하지만 그렇다고 완벽하게 알 수 없는 건 아니지요. 어떤 규칙으로 데이터를 변조하느냐에 따라 특정 패턴의 데이터로 바뀔 수도 있고 이것을 역이용해 원래 데이터를 일부 유추해 내는 게 불가능한건 아닙니다. 단, 원본으로 완벽하게 복호화 해 낸다는 건 불가능하다는 의미지요.

문제의 암호화는 어떤 것?


보통 패스워드나 비밀번호는 단방향 해싱으로 암호화 하게 됩니다. 사용자가 직접 입력하는게 필수이기 때문에 사용자의 입력을 동일하게 암호화해서 원래 암호화 했던 데이터와 대조를 하는 형식으로 패스워드가 올바른지 확인하게 됩니다.

일반적인 회원제 서비스에서 패스워드를 잊어버렸을 때 원래 패스워드를 알려주는 기능이 없는게 바로 이런 이유 때문입니다. 서비스사에서는 회원의 비밀번호를 알아낼 수가 없으니깐요. 대신, 그 암호화된 패스워드를 다른 패스워드로 바꾸는 건 가능하기 때문에 패스워드 분실 시의 대비를 할 수는 있습니다.

하지만 주민등록번호는 단방향인지 양방향인지가 불분명합니다.

주민등록번호는 비밀번호나 패스워드 등과는 다르게, 여러 서비스에서 이용이 가능한 개인 식별 코드입니다. 따라서 서비스에 따라서는 복호화가 가능하게 암호화를 할 수도 있습니다. 사용자가 매번 주민등록번호를 입력하지는 않으니 대부분의 주민등록번호 데이터베이스는 복호화가 가능한 수단으로 암호화가 되어 있을 것입니다.

이 이야기는 추측일 뿐입니다.

암호화된 데이터는 안전하다?


100% 안전하다고는 할 수 없지요.

단방향 해싱을 통해 생성된 암호는 원래의 데이터를 동일한 알고리즘으로 암호화 했을 때 동일한 값이 되는게 정석입니다. 그렇다면 원래의 데이터를 특정한 규칙으로 생성해서 계속 암호화 해서 대조하다 보면 원본 데이터를 찾을 수도 있습니다.

가급적 패스워드를 길고 복잡하게 만들라고 하라는 이유는 이런 규칙 때문입니다. 원본 데이터가 길고 복잡해 질 수록 해커들은 원래 데이터의 패턴을 유추하기가 어려워지고 시간도 걸리기 때문이지요. 패스워드가 한 자리가 늘어나면 대조해야 할 데이터의 양은 기하급수적으로 늘어납니다. 여기에 특수문자가 섞이면 정말 해커에겐 큰 일(?) 이겠군요.

양방향 해싱의 경우 알고리즘과 키(encryption key) 유무에 따라 달라집니다. 별 다른 사용자의 동의나 인증 수단 없이 복호화가 일어나는 시스템을 구축해 놨다면 시스템 내부에 그 암호를 해제할 수 있는 정보가 있다는 말이 됩니다. 즉, 해커는 그 만큼 암호를 쉽게 풀어낼 수도 있다는 말이 됩니다.

단 이 경우 데이터베이스 등 개인정보만 누출되어다면 그나마 암호가 풀릴 가능성은 낮아집니다만, 단방향 해싱에 비해서는 약간은 더 위험하다고 판단합니다.

물론 공인인증서 처럼 공개키와 개인키가 구분되어서 두 가지(사용자가 가지고 있는 것과 서비스제공사가 가지고 있는 것)가 완전히 갖춰져야 암호를 풀 수 있는 경우처럼 암호를 풀기 어려운 방식도 많이 사용되고 있다는 점을 위안으로 삼아야겠지요. 하지만 주민등록번호를 이런 치밀한 암호화로 가렸을지는 의문입니다.

결론


패스워드의 경우는 암호화된 데이터가 누출되었어도 크게 걱정하지 않으셔도 될 가능성이 높습니다. 하지만 주민등록번호의 경우는 좀 자신이 없네요.

100% 완벽한 암호화란 없습니다. 혹시 모르니 미리미리 대비하고 실제로 누출 되었을 시에 어떻게 해야 하는지를 알아두는게 좋겠지요. 문제는... 누출 되었을 때는 어떻게 대처해야 하는지 저도 어떻게 해야 하는지 모르겠다는 점이군요. (ㅠ ㅠ)

최근 글

문재인 정부가 경제를 죽인다는 황교안

연일 보수세력의 현 정부 공격이 계속되고 있다. 특히 소득주도성장은 처음부터 끝까지 물고 늘어지고 있는 먹이감(?)으로 보이나보다. 이번 글도 이 내용의 연장선으로, 아래 기사에서 출발한다. "문재인 정권이 자유시장 경제를 망가뜨리고 있...

일주일간 인기글