개발/C

해시(Hash) 알고리즘 / SHA256

그린란드상어 2018. 10. 9. 22:03
반응형

해시(Hash)


1. 해시(고기와 감자를 잘게 다져 섞어 요리하여 따뜻하게 차려 낸 것)


- 출처 (네이버 사전)



해시 함수는 임의의 길이의 입력 메세지를 고정된 길이의 출력값으로 압축시키는 함수이다.


우리가 아는 해쉬포테이토처럼 잘게 다져서 다시 뭉쳐서 압축시키는 것이다.





해시는 무결성을 보장할 수 있다는 점에서 다양한 개발 분야에서의 활용도가 높다.


해시 함수 종류로는 대표적으로 MD5, SHA 시리즈 등이 존재한다. 


이러한 함수들은 국제적으로 공용으로 사용되기 때문에 같은 값을 넣으면 언제나 같은 해시값이 도출된다.


예를들어, 두개의 파일에서 SHA-256이라는 해시 알고리즘을 사용해 나온 결과가 동일하다면, 그 두 개의 파일은 정확히 동일한 파일이라 할 수 있다.


해시의 특징은 어떤 값을 넣어도 항상 고정된 길이로 결과가 나온다.


해시 알고리즘은 조금만 다른 값을 넣어도 완전히 다른 해시 값(Hash Value)이 나온다는 점에서 해시 값을 보고 역으로 원래의 값을 유추하기 어렵다.






해시는 기본적으로 O(1)의 시간을 가진다. 다만 해시의 큰 결함은 '충돌'이다.


충돌은 서로 다른 두 값을 입력했는데, 동일한 해시 값이 나오는 현상이다.


MD5의 경우 128비트로 데이터를 저장한다. 이는 2의 128제곱 만큼의 데이터를 담는것이고,


대략 340,000,000,000,000,000,000,000,000,000,000,000,000이다.


매우 큰 숫자지만 모든 데이터를 저장하기엔 턱없이 작은 숫자이다.


그렇기에 충돌이라는 문제가 항상 존재하며, SHA-256은 아직까지는 충돌이 발생되지 않아 자주 사용되지만, 충돌 가능성이 제기되었다.




반응형

'개발 > C' 카테고리의 다른 글

[C언어] 해시 알고리즘 / OpenSSL/ SHA256 사용  (1) 2018.10.14