암호 알고리즘의 종류와 기능 (대칭형/비대칭형/단방향 암호)

2017. 12. 18. 21:29Programming/Etc...

많은 정보가 온라인에 노출되는 요즈음.


개인정보를 보호하기 위한 방법에는 무엇이 있을까요?

비밀번호는 어디에서 사용될까요?


알아가 보도록 하죠!


svj+QX1vwCGmibrYgTcBXneIdwCwXWtmQWP4XlsanmM7qlKAGJpkDGY6mCZFpROF


위에 글자들은 AES 암호화 알고리즘으로 특정 문장을 '1234' 라는 비밀번호로 암호화한 결과물입니다.(UTF8 인코딩입니다.)


이것을 복호화 한다면, 암호 알고리즘이란 무엇일까요? 라는 본래의 글자가 나오게 됩니다.


인터넷의 보급으로 인하여, 언재 어디서 누구든지 정보에 접근할 수 있게 되었습니다.

그로 인하여 손쉽게 털리는 개인정보를 보호하는 방법도 중요시 하게 되었는데요,

위 같은 암호화는 중요한 정보를 보호하여 피해를 줄이기 위한 역할을 합니다.


그렇다면, 암호 알고리즘의 종류는 무엇이 있을까요?


암호는 3가지 정도로 분류됩니다.

1.대칭형 암호

2.비대칭형 암호

3.단방향 암호


각자 다른점이 있고, 사용범위도 다르기에 하나하나 알아봅시다.


1.대칭형 암호

위에서 사용한 AES 암호화가 대칭형 암호화에 해당됩니다.

암호화할 때와 복호화할 때의 사용하는 비밀번호가 같은 암호 알고리즘들을 칭하는 기법입니다.

즉, 위에서 보여드린것처럼

'암호 알고리즘이란 무엇일까요?' 라는 문장을 '1234'로 암호화하면,

'svj+QX1vwCGmibrYgTcBXneIdwCwXWtmQWP4XlsanmM7qlKAGJpkDGY6mCZFpROF' 를 출력하고,


'svj+QX1vwCGmibrYgTcBXneIdwCwXWtmQWP4XlsanmM7qlKAGJpkDGY6mCZFpROF' 를 '1234'로 복호화하면,

암호 알고리즘이란 무엇일까요? 라는 문장을 출력합니다.


2.비대칭형 암호

비대칭형 암호는 대칭형 암호화 비슷하면서 다른 암호 알고리즘 입니다.

바로 암호가 2개라는것 인데요!


대칭형 암호를 사용하면 문장은 암호화가 잘 되어서 공개되어도 되는 상황이 되어도,

비밀번호인 1234는 안전하게 옮기기 힘듭니다.

이러한 문제를 방지하기 위하여, 개발된 비대칭형 암호는 앞서 말한것처럼, 키가 2개입니다.


즉, 'ABCD'라는 글자를 A라는 키로 암호화 하면, B라는 키로만 복호화를 할 수 있습니다.

그러하다면, 비밀번호가 털려도 별 문제가 없습니다.


다만 그렇다고 해도 비대칭형 암호가 안전한것은 아닙니다.

일단 암호화와 복호화 하는데에 소모되는 시간이 상당히 오래 걸리게 됩니다.

그것뿐만 아니라, (MITM : Man In The Middle Attack) 공격에 매우 취약합니다.

MITM 공격은, 암호키와 복호화 키를 중간에서 둘다 가로채가는 기법입니다.


그렇다고 해도 대칭형 암호보다 안전하다는것은 변하지 않군요.


3.단방향 암호

정말 신기한 암호화입니다!

암호화는 되는데 복호화는 안된다는것!


ㅇ? 복호화가 안되면 의미가 없잖아..? 라고 생각하시는 분이 계실꺼라 생각합니다.

(저는 그렇게 생각했었음..)


아~닙니다!

생각보다 많이 쓰입니다.

특히 비밀번호를 암호화 할때 사용됩니다.


81dc9bdb52d04dc20036dbd8313ed055

위의 글자는 비밀번호 1234를 단방향 암호화 방식인 md5를 이용해 암호화한 결과물입니다.

이 암호화는 복호화 할 수 없습니다.


그렇다면, 언재 어떤 형식으로 사용될까요?

위와 같이 사용됩니다.

즉, 서버같이 털릴 위험이 큰 공개된 곳에다가 암호화를 하여 정보를 저장하고, 그것을 비교하는것이죠.


이러한 단방향 암호 알고리즘 에는 SHA-256, SHA-3 그리고 위 예재에서 사용된 MD5등등이 있습니다.

허나 MD5의 암호화는 취약점이 발견되었기에 사용하지 않는것이 좋습니다.



암호화를 진행하면 안전한가?

자. 지금까지 암호화가 왜 필요한지, 무슨 암호 알고리즘이 있는지 알아보았습니다.

그렇다면, 모든 암호화된 정보들은 안전한걸까요?

절대 아닙니다.

마치 창과 방패와 같아서 언잰가는 암호화가 뚫리기 마련입니다.


모든 암호화된 정보들은 브루트 포싱(Brute-Forcing)을 이용하여 뚫리기 마련입니다.

브루투 포싱은 전수 대입인데요, 간단하게 말하자면..


모든 암호를 일일히 대입해보는것 입니다.

4자리의 숫자 비밀번호가 있다면, 0000부터 9999까지의 모든 숫자를 대입하여 복호화를 진행하고,

정보가 나오는것을 찾는 방법입니다.


복호화 키가 없다는 단방향 암호화 마져도 위같은 브루트 포싱 공격을 이용하여 뚫을 수 있습니다!

이것은 반대로 이루어진달까... 모든 문장을 암호화하여서 나온값이 미리 암호화 되어있는 값과 같은지를 비교하여,

같다면 이 단방향으로 암호화된 암호의 원문은 이거다! 하는 방식입니다.


즉, 시간만 있다면 모든 암호화는 뚫릴 수 있다는것 입니다.

우리는 온라인에 노출되는 정보많큼 그 중요성을 알고 관리해야 합니다.

아무리 암호를 길개 써 놓는다고 해도, 요즈음의 병렬 컴퓨팅을 이용하면 쉽게 뚫릴 수 있습니다.


결국 정보 보호와 탈취는 창과 방패의 싸움임으로 이를 막는 방법은, 주기적인 암호 변경입니다.

브루트 포싱을 사용하여 뚫는데에는 많은 시간이 필요하니, 그 시간안에 변경해버리는 거죠.


그러니.. 귀찮아도! 6개월애 한번씩 비밀번호를 변경하는 습관을 들여둡시다!


이상 Nitro였구요. 다음 포스팅에서 뵙시다.

혹시 위에 서술된 내용에 오타나 오류가 있다면 알려주세요!


그럼 20000.


반응형