결론을 먼저 말해보면 둘 다 암호화 기법이지만, 해시(Hash)는 단방향 암호화 기법이며, 암호화(Encryption)는 양방향 암호화 기법이다.
즉, Hash는 평문 데이터를 암호화된 데이터로 바꿀 수 있는 단방향 암호화 기법이고, Encryption은 평문을 암호화된 데이터로 바꾸는 암호화와 암호화된 데이터를 평문 데이터로 바꿀 수 있는 복호화가 존재합니다.
1. Hash
- 해시 알고리즘은 특정 입력 값에 대해서 항상 동일한 결과 값을 리턴하게 됩니다.
- 해시 입력 값은 다르지만, 해시 결과 값은 동일할 수 있습니다. (여기서 중복이 적게 생길수록 좋은 해시 함수입니다.)
해시만 적용하는 것으로 완벽한 보안이 될까?
사실 어떻게 보안을 해도 어떤 천재 해커나 집요한 해커들에게 뚫릴 가능성이 Zero는 아니기 때문에 더 튼튼한 보안을 결정해서 사용해야 합니다.
하지만, 평문 데이터를 단순히 해시함수 한 번만 거쳐 암호화를 했다고 완벽한 보안이 될 수 없습니다.
그래서 보통 해시 함수를 여러 번 돌리거나 Salt를 넣어서 사용하는 방법을 사용하곤 합니다.
여기서 솔트 값은 적용하는 방식에 따라서 많이 달라질 수 있는데, 임의로 정해둔 솔트 값을 비밀번호의 앞이나 뒤 또는 앞뒤에 모두 적용해서 해시 함수에 넣어 결과 값을 얻는 방식이다.
이렇게 하면 어떻게 막 해시 함수에 임의의 값을 막 넣다보니 해커가 평문 데이터를 알아냈다고 했을 때, 이 평문 데이터는 임의의 값인 Salt가 섞여있는 데이터이기 때문에 해커는 이 Salt 값까지 알아내야 실제 데이터를 얻어낼 수 있습니다.
대표적인 해시 함수에는 MD5, bcrypt, SHA가 존재합니다.
2. Encryption
- 양쪽에서 같은 암호화 키를 가지고 있는 암호화 방식을 "대칭키 방식"이라고 합니다.
- 한쪽은 개인키(private key)를 가지고, 다른 한쪽은 개인키와 한 쌍인 공개키(public key)를 가지고 암호화 복호화하는 방식을 "비대칭키 방식"이라고 합니다.
- "대칭키"와 "비대칭키"를 둘 다 사용하는 혼합 암호화 방식도 존재합니다.
- 암호화 방식은 해시와는 다르게 양방향성을 가지게 됩니다.