해시는 해시 함수를 사용하여 모든 크기의 입력 데이터에서 생성된 고정 길이의 문자열(다이제스트)입니다. 이 과정은 단방향입니다. 즉, 해시를 복호화하거나 역으로 변환하여 원본 데이터를 얻을 수 없습니다. 따라서 "해시 암호화"라는 용어는 적절하지 않습니다. 해싱은 암호화가 아닙니다.
주요 해시 알고리즘은 다음과 같습니다.
MD5 (보안용으로 더 이상 사용되지 않음)
SHA-1 (더 이상 사용되지 않음)
SHA-256, SHA-512 (SHA-2 계열의 일부)
SHA-3
bcrypt, scrypt, Argon2 (안전한 비밀번호 해싱용)
해싱은 사이버 보안 및 데이터 무결성 측면에서 여러 가지 목적을 갖습니다. 해싱을 사용하는 주요 이유는 다음과 같습니다.
데이터 무결성: 데이터가 변경되지 않았는지 확인합니다(예: 파일 체크섬).
비밀번호 저장: 실제 비밀번호를 저장하는 대신 해시를 비교하여 비밀번호를 안전하게 저장합니다.
디지털 서명: 큰 문서가 아닌 해시를 사용하여 서명합니다.
효율성: 작고 고정된 크기의 해시 값은 큰 데이터 블록보다 비교 속도가 빠릅니다.
해시는 결정적이고 빠르기 때문에 검증 작업에 이상적입니다.
해시 함수 사용에는 다음이 포함됩니다.
데이터 입력(예: 파일, 문자열 또는 비밀번호).
해싱 알고리즘을 사용하여 데이터를 처리합니다.
다이제스트는 입력 내용을 고유하게 나타내는 고정 크기 문자열입니다.
비밀번호 보호:
비밀번호를 솔트(무작위 데이터)와 결합합니다.
안전한 해시 함수(예: bcrypt 또는 Argon2)를 적용합니다.
해시 값과 솔트 값을 안전하게 저장하세요.
해시는 되돌릴 수 없으므로 입력 내용(예: 비밀번호)을 다시 해시하고 새 해시 값을 저장된 해시 값과 비교하여 검증합니다.
해싱은 다음과 같은 경우에 사용해야 합니다.
데이터 무결성을 검증해야 하는 경우(예: 손상 또는 변조 여부 확인).
비밀번호는 암호화되거나 일반 텍스트가 아닌 안전하게 저장해야 합니다.
디지털 서명 및 인증서가 사용됩니다(해싱은 문서의 신뢰성을 보장합니다).
빠른 데이터 비교가 필요합니다(예: 해시 테이블 또는 캐시).
나중에 원본 데이터를 복구해야 하는 경우에는 해싱이 적합하지 않습니다. 암호화의 목적은 바로 이러한 것입니다.