포럼

암호에 관한 오해를 하시는 분들이 있으신 것 같아서 암호 방식에 대해서 간략히 말씀드리고자 합니다.


암호화 기술에는 여러가지가 있습니다.


편의상 크게 둘로 나누면 암호문을 역으로 풀어서 원문을 찾을 수 있도록 설계가 된 것과 그렇지 않는 것이 있습니다.

전자의 경우는 해독을 위해서 암호문 속에 본문이 완전하게 포함되어 있지만 후자의 경우는 없습니다.


역으로 풀 수있는 암호화는 키를 이용하여 해독이 가능하며, A 지점에서 B 지점으로 평문을 안전하게

전달하는데 사용합니다.


역으로 풀 수없는 암호화는 해독을 위한 키가 없으며, 보통 해쉬함수라하여 평문을 해독하는데 목적이 있지않고

원문의 훼손 여부를 확인하거나 사용자 비밀번호를 안전하게 저장하는데 많이 이용되고 있습니다.


원문의 훼손 방지를 위해 보내는 측에서 평문을 축약하여 일정 길이(64비트, 128비트 등)의 데이터(해쉬문)를 만든 후

이를 원문에 첨부하여 보내면, 받는 측에서 수신된 평문을 같은 방식으로 해쉬문을 만들어 첨부된 해쉬문과 비교함으로써

원문의 훼손여부를 판단하게 됩니다. 평문이 수정되었다면 첨부한 해쉬문과 다른 결과의 해쉬문이 생성될 것입니다.


해쉬문의 생성은 예를 들면 원문을 완전히 섞어서 각 문자의 첫번째 비트만 추출하는 등의 방법으로 만들기 때문에

사용된 해쉬의 프로토콜을 이해한다고 하여도 해쉬문에서 원문을 추출해 내는 것은 불가능합니다.

그래서 해쉬를 단방향 암호화라고 부르며 원천적으로 역으로 해독이 불가능한 이유가 여기에 있습니다.


그런데 해쉬는 이와 같이 큰 데이터를 축약하여 작은 데이터로 만들기 때문에 필연적으로 동일한 해쉬문이

생성될 수 있습니다. 이것을 충돌이라고 부릅니다.


그러나 우리가 사용하는 비밀번호와 같은 것은 일반적으로 원문의 길이가 짦은데 비하여 해쉬문의 길이는 길기 때문에

이러한 충돌이 생길 가능성은 훨씬 적으며 설령 충돌이 생기더라도 본래의 목적을 달성하는데에는 지장이 없습니다.


우리가 경험하는 로그인에서 사용하는 암호 확인 방법은
사용자가 처음에 입력한 비밀번호로 컴퓨터가 해쉬문을 만들어서 사용자의 비밀번호 대신 저장한 후,
다시 로그인할 때 입력한 비밀번호를 같은 방법으로 해쉬문을 만들어서 저장되어 있는 것과 비교하여 동일하면
본인이 맞다고 판단하게 됩니다. 이러한 방식을 이용하면 관리자도 사용자의 비밀 번호를 알 수가 없습니다.

공격자가 해쉬로 만들어진 암호문을 입수하였다고 하여도 이를 역으로 해독하여 본래의 문장을 찾을 수는 없으나,
모든 문자를 차례로 조합하여 같은 함수로 돌려서 동일한 해쉬문이 나오는지를 확인함으로써
비밀번호 추정이 가능하게 됩니다.

그러나 이와 같이 임의의 문자를 만들어 비교하는 것은 길게는 수 년이 걸릴 만큼 시간이 많이 걸리기 떄문에
공격자는 시간이 크게 걸리지 않는, 즉, 숫자만으로 된것, 문자만으로 된 것, 그리고 숫자와 문자의 조합과,
사람들이 많이 사용하는 비밀번호 조합 등을 이용하여  동일한 해쉬함수로 해쉬문을 만들어서 비교를 한 후 비밀번호를
추정하게 됩니다. 이때 해쉬 충돌로 인하여 해쉬문은 같으나 비밀번호는 다른 것도 생성이 됩니다. 

이와 같이 비밀번호를 추정해내는 것은 사전을 이용한다고 말하며 빠른 시간에 비교를 할 수가 있기 때문에
공격 프로그램에서 보통 사용하게 됩니다.
그러나 미리 예측할 수 없는 특수 문자나 소문자와 대문자 조합 등으로 이루어진 비밀번호는 이러한 방식으로는
풀어낼 수가 없고 결국 모든 문자의 조합으로 풀어야하는데 시간이 무척 많이 걸리기 때문에 일반적으로 사용하지
않습니다. (매우 중요한 암호문이라면 수개월 혹은 수년이 걸리더라도 컴퓨터를 계속 돌려서 찾아 낼 수는 있겠지만
사실 그동안 비밀 번호는 이미 바뀌어있을 것입니다)

해쉬의 특성상 이러한 방식의 암호 추출 밖에 할 수가 없기 때문에 암호 해독 성공률은 해쉬의 종류와는 무관합니다.
암호문에 사용된 해쉬함수가 무엇이든 상관없이 해당 함수만 끼워맞혀주면 동일하게 암호 추론이 가능하기 떄문입니다.

참고로 일반인들은 모든 문자를 조합하여 컴퓨터로 돌리는 것이 시간이 별로 안걸릴 것이라고 생각하는데
사실 그렇지가 않으며, 아래 첨부된 그림과 같이 아직도 매우 많은 시간이 걸립니다.
이 표를 보면 키를 해독하는데 만약 마이크로 초당 10의 6승의 계산이 가능한 컴퓨터를 사용한다고 가정할 때
56비트는 10시간, 128비트는 5.4  x 10의 18승 년이 걸림을 알 수가 있습니다.
56비트라하더라도 해독할 암호문 갯수가 1,000개만 되어도 416일, 즉 1년이 넘게 걸리게 됩니다.
(현대의 매우 빠른 컴퓨터도 마이크로초당 10의 4승 이내의 속도이기 때문에 위의 산출시간에 100을 곱해야 합니다.)

(그림 출처 : Cryptography And Network Security Princilpes and Practice 2nd Ed - William Stallings, 1999)

keysrch.jpg
글쓴이 제목 최종 글
새하나모 게시판 목록의 폭 제한이나 글자수 제한이 필수옵션으로 있어야 할거같아요. [4] file 2012.04.05 by sol
suica 회원관리에 대해서 [1] 2012.04.05 by 은혜물가
Cody 맥 컴퓨터에서 게시판에 글쓰기 시에 서브카테고리 표시 문제 [2] 2012.04.05 by Cody
푸하라 혹시 nodejs 를 실전에서 사용하신분 계신가요???  
도라미 소란피워서 죄송합니다. [8] 2020.03.14 by Seeean
콜롬보. 암호에 관한 이해 [1] file 2012.04.04 by Garon
궁금궁금궁금이 문서보기 유저 지정 코어 1.5에서 작동 잘들 되시나요? [2] 2012.04.03 by 궁금궁금궁금이
ForHanbi 다시 질문1.5.2이상에서 ie8에서 회원가입창 문제 없나요. [3] 2012.04.03 by 궁금궁금궁금이
도라미 ie8에서 오류해결이... [2] 2012.04.03 by 도라미
ForHanbi ie8에서 이미지 사라지는 버그 해결법. [2] 2012.04.03 by ForHanbi
자야2 죄송합니다.질문하나만...게시글에 비밀번호 부여방법? [11] 2012.04.03 by 한마음^^
ForHanbi ie8 이미지 사라지는 버그 원인 [1] 2012.04.03 by ForHanbi
ppnp Yoorim 모바일 레이아웃 v1에 Sketchbook5 PC버전 적용후  
카메론다이아몬드 새로운 모바일 레이아웃 적용시 [1] 2012.04.02 by 카메론다이아몬드
mekey 공허한 제목 답글 안달아주기? [1] 2012.04.02 by 데브위트™
황비 50개가 넘는 지금의 댓글노출방식에 대해 어떻게 생각하세요? [12] 2012.04.02 by hhgyu
궁금궁금궁금이 1.5 업데이트 이후 텍스타일 소셜 XE 어떠신가요? [3] 2020.03.14 by 궁금궁금궁금이
니오티 XE 시퀸스에 대한 문제점 토론  
궁금궁금궁금이 관리자 페이지를 볼 수 없을때 업데이트와 캐쉬파일 재생성을 할 수 있는 방법?? [3] 2012.04.01 by 윈컴이
Garamhwi 아이패드는 무엇으로 인식합니까 [6] 2012.04.01 by 궁금궁금궁금이