본문 바로가기

항해99

항해 4일차 TIL - SHA256은 뭘까요?

What : 어떤 문제가 있었는지

Try : 시도한 것

So : 그래서 뭘 느꼈는지

 

WHAT

기술 매니저님이 주신 코드를 보니까 비밀번호를 암호화 하시는걸 볼 수 있었습니다.

지금까지 토이 프로젝트를 하며 사용자의 중요한 정보(비밀번호)를 그대로 저장했습니다. 이런식으로 정보가 저장된다면

DB 접근 권한을 가진 관계자라면 누구든지 고객의 비밀번호, 개인정보를 볼 수 있다는 문제가 발생합니다.

 

TRY

암호화란? 

암호화란 평문(보통의 글)을 암호문으로 변경하는 방법입니다. 반대로 암호문을 평문으로 복원하는 것을 복호화라고 합니다.

 

SHA-256

암호화 알고리즘 중 하나입니다.

Secure Hash Algorithm, 해시 알고리즘은 단방향 암호화에 쓰이는 알고리즘입니다.

즉, 복호화가 되지 않습니다. 그렇다고 안전을 보장하는 것은 아닙니다. 사전 공격(dictionary Attack), 무차별 대입 공격(Brute Force Attack) 등으로 비밀번호를 알아낼 수도 있습니다.

 

256, 256비트인 것을 의미합니다.

1비트란 2진법의 한자리를 의미합니다. 16진법을 나타내려면 4비트가 필요합니다. 256/4로 나누면 64입니다.

SHA-256은 64자리로 구성되어있고 각 자리는 16진수로 표현됩니다. 그래서 2의 256제곱가지 경우의 수가 나올 수 있습니다.

 

암호화는 인코딩인가요?

데이터를 다른 형식으로 변경한다는 점에서는 유사하지만 둘은 목표가 다릅니다. 일반적으로 우리가 어떠한 파일을 압축하는 것은 인코딩이지만 암호화라고 부르지는 않습니다. 그리고 인코딩은 데이터를 효율적으로 사용하기 위해 사용되고 원래의 것으로 되돌릴 수 있는 디코딩의 과정이 존재합니다.

 

그렇다면 암호화된 것은 복원할 수 없을까요? 아닙니다. 양방향 암호화는 해독 과정으로 암호문을 평문으로 복원할 수 있습니다. 기회가 되면 양방향 암호화 알고리즘 중 Java에서 사용된다는 aes256에 대해 정리하겠습니다.

 

SO

1. 데이터를 어떠한 형태로 저장해야할지에 대한 고민을 할 수 있게 되었습니다.

2. 혼동되는 단어의 의미를 제대로 파악하고 갑니다.

 

 

reference

해시넷 - SHA256 

해시넷 - 사전공격