본문 바로가기
쿤즈 Secure/암호이야기

[암호] 내 비밀번호는 단방향 암호화 (Hash) 로 저장한다

by Koonz:) 2020. 8. 1.
728x90

이번 포스팅에서는 암호이야기 첫 포스팅으로 모든 포털 사이트 혹은 모든 웹 사이트에서 비밀번호를 저장하는 방법에 대해서 이야기를 하려합니다. 암호화에는 두가지 방법이 있습니다. 암호화문을 복원할 수 없는 암호화와 복원할 수 있는 암호화입니다. 이 포스팅에서는 복원할 수 있는 암호화를 먼저 다루도록 하겠습니다.

 


복원이 불가능한 단방향 암호화

단방향 암호화란 이름 그대로 한쪽 방향으로만 암호화를 한다는 의미입니다. 즉, 암호화 방법은 있으나 복호화 방법은 없다는 것이죠. 그래서 비밀번호를 암호화 할 때에는 거의 대부분 이 방법을 사용합니다.

원문(평문) : 암호되지 않은 원래의 문장
암호화 : 특정 알고리즘이나 방법을 이용해서 원문을 다른문장으로 변경시키는 것
복호화 : 암호화때 사용한 알고리즘이나 방법을 이용해서 암호문을 다시 원문으로 변형시키는것

이러 단방향 암호화는 복호화를 할 수 없게 구성되어 있습니다. 이유는 아무리 긴 문장이라도 길이를 압축해서 일정한 길이의 값이 나오게 만들기 때문입니다. 예를들어서 보겠습니다.

 

원문 : apple

암호문 : D0BE2DC421BE4FCD0172E5AFCEEA3970E2F3D940 (sha1)

 

위에서 원문은 apple입니다. 그리고 암호문은 SHA-1 이라는 알고리즘을 이용해서 암호화한후 16진수로 표현한 값입니다. 16진수로 표현하지 않으면 깨진 글자로 나와서 알아 볼 수 없기 때문에 이렇게 표현하였습니다.

 

이와같이 짧은 문장이나 긴 문장 모두 동일한 알고리즘으로 단방향 암호화를 하면 동일한 길이의 값이 나오게 됩니다. 이 값을 역으로 복호화 할 수는 없습니다. 따라서 누군가가 이 값을 가져가도 원문을 알 수 없기 때문에 값을 유추하는것은 불가능합니다


내 비밀번호를 잃어버리면 어떻게 찾지?

결론적으로 찾을 방법이 없습니다. 그래서 대부분 본인확인을 거친 후 새로운 비밀번호를 생성하게 합니다. 이렇게 사용하는 이유는 이 방법이 가장 안전하다 판단해서 그렇습니다. 혹시나 해킹과 같은 비밀번호 탈취가 일어난다 하더라도 모든 비밀번호는 복호화가 불가능한 단방향 암호화가 되어 있기 때문에 비밀번호를 탈취할 수 없습니다.

 

하지만 비밀번호를 알아낼 수 있는 방법도 있습니다. 모든 값을 대입해보는 것입니다. 시간이 굉장히 오래 걸리겠지만 알아 낼 수는 있는 것이죠. 그래서 비밀번호를 8글자 이상 대문자, 소문자, 특수문자를 섞어서 사용하라는 문구들을 보셨을 겁니다. 이러한 방법으로 사용하면 유추하는데에도 오래 걸리기 때문입니다.

 

비밀번호를 3월에 한번씩 혹은 6개월에 한번씩 주기적으로 변경하라는 팝업도 종종 보셨을겁니다. 사실 비밀번호를 변경한다고 더 안전하거나 하지는 않습니다. 안전도는 비밀번호의 관리이기 때문입니다. 물론 내가 가입되어 있는 사이트에 문제가 발생하면 바로 변경해야 하는것이 맞지만 그렇지 않은 경우는 변경하지 않으셔도 됩니다.

다만, 변경관련 규정이 있기에 잘 읽어보시고 판단하셔야 합니다.


단방향 암호화 알고리즘 종류

단방향 암호화 알고리즘에는 여러가지 종류가 있습니다. 대표적인 알고리즘에는 MD5, SHA-1, SHA-2 등이 있습니다. 이 알고리즘들을 우리는 Hash(해시) 라고 부릅니다. 현재 MD5의 경우는 이미 충돌값이 발견되었기에 안전하지 않다 판단하여 사용을 권하지 않습니다.

 

 

여기서 충돌이란 서로다른 원문을 암호화 했을때 같은 암호화 결과값이 나오는 것을 의미합니다. 예를들어서 apple 을 넣은 암호화값과 banana 를 넣은 암호화값이 같다면 동일한 ID 하나에서 두개의 비밀번호가 모두 맞다고 판단될 수 있기에 문제가 발생합니다.

최근에서는 SHA-1 의 경우도 추천하지 않으며 SHA-2 로 권고합니다.


오늘은 단방향 암호화에 대해서 알아보았습니다. 암호라는 내용 자체가 굉장히 생소하고 어렵게 생각되기 때문에 아주 쉬운 부분부터 조금씩 알아가다 보면 어느새 익숙해진 모습을 볼 수 있을겁니다 :D

다음에는 양방향 암호화에 대해서 알아보도록 하겠습니다.

댓글