이번에는 Hash에 대해 알아볼 것이다.
해시 함수(Hash function)는 임의의 크기의 데이터를 받아서 고정된 크기의 데이터를 반환하는 함수이다.
이때 나온 값을 해시 값이라고 한다.
암호학적 해시 함수는 해시 함수 중 특정 성질을 만족하는 함수이다.
암호학적 해시 함수는 다음 성질을 만족한다.
1. 제 1 역상 저항성
2. 제 2 약상 저항성
3. 충돌 저항성
제1 역상 저항성은 해시 값이 y일때 y를 이용하여 평문 x를 찾는것은 어렵다는 성질이고,
제2 역상 저항성은 x를 해시화 했을때, 해시 값이 같은 x'를 찾기 어렵다는 성질이다.
마지막 충돌 저항성은 충돌(해시 값이 같은)이 일어나는 x, x'는 찾기 어렵다는 성질이다.
위 성질들은 해시를 많이 접해보면서 쉽게 이해할 수 있을 것이다.
눈사태 효과는 해시 함수중 가장 보안적인 요소 중 하나인데, 이는 확산의 성질 매우 잘 갖추고 있다.
아래는 md5라는 해시로 abc,abd를 각각 해시화 한것이다.
글자 하나만 바꿔도 해시 값이 매우 달라지는 걸 확인할 수 있다.


이제 일방향 함수에 대해서 알아보겠다.
일방향 함수는 임의의 x에 대한 함수 값 y는 쉽게 계산할 수 있지만, 함수 값 y에 대해서 x를 알아내기 어려운 함수이다.
다음은 생일역설에 대해 알아볼 것이다.
생일역설이란 딱 봤을때, 전체 인원이 적어도, 그 안에서 생일이 같은 학생이 있을 확률이 높은 현상을 말한다.
생일 역설을 생각해보면, 해시 함수가 아무리 성능이 뛰어나도 공역의 크기가 작으면 충돌이 일어날 확률이 높아진다.
그래서 해시 공역의 크기를 크게 하는게 충돌 저항성을 높여준다.
해시는 데이터의 고유한 값이 있기 떄문에, 통신이 변조되었는지 확일할 때도 사용되고, 비밀번호를 해시화하여 저장하기도 한다.
이제 해시함수의 종류를 알아보자.
해시함수는 굉장히 많은데 대표적으로, md5, sha256이 있다.
md5는 1991년에 만들어 졌지만, 최근 2020년에 다양한 취약점이 발견되어 더이상 사용되지 않는다.
md5는 입력으로 부터 16바이트 해시 값을 생성하고, 512비트 단위로 쪼갠후 연산한다.
sha256은 아직까지 충돌, 취약점이 발견되지 않아서 자주 사용하고 있다.
예전에 sha0 sha1도 있었지만, 취약점이 많이 발견되어 더이상 사용되지 않는다.
sha256 32바이트 해시 값을 생성한다.
'Cryptography' 카테고리의 다른 글
Dreamhack - ICM2022(writeup) (0) | 2023.02.22 |
---|---|
Dreamhack - darimchal_001(writeup) (0) | 2023.02.22 |
Cryptography(암호학) - RSA(공개키 암호) (0) | 2021.12.23 |
Cryptography(암호학) - DES(Data Encryption Standard) (0) | 2021.12.18 |
Cryptography(암호학) - AES(블록암호) (0) | 2021.12.18 |