CS

[CS] Hashing에 대한 나름의 이해

Dong's Universe 2024. 1. 10. 08:10

Hashing은 hash function을 이용하여 암호화하는 것이다.

특징으로는 세 가지가 있다.

1. One-way: 복호화가 불가능하다.

2. Deterministic: 같은 값의 해시는 같다.

3. Avalanche effect: 인풋값이 조금만 바뀌어도 해시값은 크게 변한다.

 

복호화가 왜 불가능할까?

챗지피티에 따르면 역함수가 없는 함수라고 한다. 무한한 입력에 대해 유한한 출력이기 때문이다.

 

아무튼 복호화가 안된다는 건 Hashing의 큰 장점이다.

이를 무너뜨리기 위한 방법으로는 대표적으로 다음과 같은 것들이 있다.

1. Brute Force Attack: 모든 값을 다 대입해서 일치하는 해시값을 찾아내는 방식이다. 128 bit 이상의 해시를 사용하면 뚫기 어렵지만 낮은 해시를 사용하면 뚫릴 수 있다.

2. Dictionary Attack: 많이 사용하는 패스워드의 해시값을 구해서 비교하는 방식이다.

3. Rainbow Tables: 많이 사용되는 해싱 함수를 미리 테이블에 넣고 확인해보는 방식이다.

 

이러한 공격들을 잘막기 위해서는 다음과 같은 방법들이 있다.

1. 강력한 해싱 알고리즘을 사용한다. 예를 들어, Argon2, scrypt or PBKDF2 등이 있다.

2. 패스워드에 unique random salt를 넣는 방식을 활용한다.

3. 유니크한 패스워드를 사용한다.

 

What is sha?

SHA는 Secure Hash Algorithm의 줄임말이다. National Security Agency(NSA)에서 만들었다고 한다. 현재 SHA-1은 보안 문제로 많이 사용이 안되고 SHA-2, SHA-3가 많이 사용된다고 한다. 특이한 건 원래 두개의 인풋이 같은 해시값을 가질 수 있지만 SHA는 이게 계산적으로 불가능하다고 한다. 즉, 하나의 인풋에 대해 하나의 아웃풋이 대응되는 것이다.