급여 시스템은 보안이 가장 중요한 시스템 중 하나다. 직원들의 급여 정보가 유출되면 큰 문제가 되기 때문이다. 보안 설계에서 핵심 중 하나가 난수 생성인데, 비밀번호 생성기에서 쓰는 암호학적 난수가 어떻게 동작하는지 설명해본다.
암호학적 난수란
일반적인 Math.random()은 예측 가능한 의사 난수(PRNG)를 생성한다. 시드값을 알면 생성될 값을 예측할 수 있다. 반면 암호학적 난수(CSPRNG)는 예측이 불가능하도록 설계되어 있다.
JavaScript에서는 Web Crypto API를 사용한다.
const array = new Uint32Array(1); crypto.getRandomValues(array); const randomNumber = array[0];
gptda.kr/password-generator에서 생성되는 비밀번호도 이런 방식으로 만들어진다.
급여 시스템에서의 활용
암호학적 난수는 급여 시스템에서 여러 곳에 쓰인다.
- 세션 토큰 생성: 로그인 후 발급되는 세션 ID
- 임시 비밀번호: 비밀번호 재설정 시 발급
- 2FA 코드: 이중 인증 숫자 코드
- 암호화 키: 급여 데이터 암호화에 사용
이 중 하나라도 예측 가능하면 보안이 무너진다.
비밀번호 정책
급여 시스템 접속용 비밀번호는 강력해야 한다. 최소 12자 이상, 대소문자+숫자+특수문자 조합을 권장한다. 비밀번호 생성기로 만들면 이 조건을 자동으로 충족한다.
시스템에서는 비밀번호를 절대 평문으로 저장하면 안 된다. bcrypt나 Argon2 같은 해싱 알고리즘을 사용해야 한다.
접근 권한 설계
급여 정보는 필요한 사람만 접근해야 한다. 일반 직원은 자기 급여만, HR 담당자는 전체 급여를, 임원은 통계만 볼 수 있게 권한을 분리한다. RBAC(Role-Based Access Control) 패턴을 적용한다.
감사 로그
누가 언제 어떤 급여 정보를 조회했는지 모든 기록을 남겨야 한다. 이 로그도 위변조 방지를 위해 별도 시스템에 저장하고, 해시 체인으로 무결성을 보장한다.
암호화 적용
급여 데이터는 저장 시(at rest)와 전송 시(in transit) 모두 암호화한다. 저장은 AES-256, 전송은 TLS 1.3을 사용한다. 암호화 키 관리도 중요한데, AWS KMS 같은 서비스를 활용하면 안전하게 관리할 수 있다.
마치며
급여 시스템 보안은 난수 생성부터 암호화, 접근 제어, 감사 로그까지 종합적으로 설계해야 한다. 강력한 비밀번호가 필요하다면 온라인 비밀번호 생성기를 활용해보자.