급여 데이터가 위변조되지 않았는지 확인하는 방법 중 하나가 해시 검증이다. 해시 생성기를 통해 해시 함수의 기본 원리를 이해하고, 실무에 어떻게 적용하는지 알아본다.
해시 함수 특성
해시 함수는 입력 데이터를 고정 길이의 해시값으로 변환한다. 중요한 특성 세 가지가 있다.
- 결정성: 같은 입력은 항상 같은 해시
- 단방향성: 해시에서 원본을 역산 불가
- 충돌 저항성: 다른 입력이 같은 해시가 되기 어려움
gogoling.kr/hash-generator에서 다양한 해시 알고리즘을 테스트해볼 수 있다.
SHA-256 vs MD5
MD5는 빠르지만 충돌이 발견되어 보안 용도로는 권장하지 않는다. SHA-256은 현재 표준이다. 더 강력한 SHA-384, SHA-512도 있다.
const crypto = require("crypto"); const hash = crypto.createHash("sha256").update(data).digest("hex");
급여 데이터 무결성 검증
월 급여 데이터를 확정한 후 해시값을 저장해둔다. 나중에 데이터가 변조됐는지 확인하려면 다시 해시를 계산해서 비교한다.
// 저장 시 const salaryData = JSON.stringify(monthlyPayroll); const checksum = sha256(salaryData); store.save({ data: salaryData, checksum });
// 검증 시 const stored = store.get(); if (sha256(stored.data) !== stored.checksum) { alert("데이터 변조 감지!"); }
해시 체인
블록체인처럼 각 월의 해시에 이전 월의 해시를 포함시키면, 과거 데이터도 변조하기 어려워진다.
const currentHash = sha256(previousHash + currentData);
이러면 한 달치만 바꿔도 이후 모든 해시가 달라져서 변조가 드러난다. 해시 생성 원리를 이해하면 이런 구조를 설계할 수 있다.
비밀번호 저장
비밀번호는 해시해서 저장하지만, 일반 해시가 아닌 bcrypt나 Argon2를 쓴다. 솔트와 반복 연산으로 레인보우 테이블 공격을 방어한다.
파일 해시
급여 명세서 PDF 파일의 해시를 저장해두면, 파일이 수정됐는지 확인할 수 있다. 문서 위조 방지에 활용된다.
마치며
해시 함수는 데이터 무결성의 기초다. 직접 테스트해보고 싶다면 온라인 해시 생성기를 활용해보자.