Skip to content

[04. ADR] 패스워드 암호화 알고리즘

YH.LEE edited this page Jul 18, 2023 · 1 revision

[패스워드 암호화 알고리즘]

  • Status: proposed
  • Deciders: 김정희, 이유희
  • Date: 2023-07-17

Technical Story: Issue #2


Context and Problem Statement

User 도메인의 회원가입시 생성 데이터중 패스워드가 있다.

패스 워드에 적합한 암호화 알고리즘을 선택해야한다.


Decision Drivers

  • 패스 워드 암호화에 적합한 암호화 방식인가?
  • 법적으로 준수해야 할 암호화 방식이 있는가?
  • 해킹에 의해 패스 워드 평문이 노출될 위험은 없는가?

Considered Options

  • 양방향 암호화 알고리즘
  • 단방향 암호화 알고리즘

Decision Outcome

패스워드 보안에 중점을 두어 PBKDF2에 비해 보안 강도가 높은 bcrypt 로 결정했다.

Positive Consequences

  • 비밀번호가 유출 되더라도 복호화 하지 못하여 사용자의 비밀번호를 획득하기 힘들다.

Pros and Cons of the Options

양방향 암호화 알고리즘

단점

  • 암호화 키가 노출되면 패스 워드 원본이 노출될 가능성이 있음. 패스워드는 원본을 알 수 있어선 안 된다.

단방향 암호화 알고리즘

장점

  • 개인정보의 기술적 관리적 보호조치 기준 (2022.08)에 의하면 패스워드는 단방향 암호화를 권장함

단점

  • MD5, SHA-1, SHA-256, SHA-512 등이 있음
  • 이 암호화 알고리즘의 목적은 메세지 인증과 무결성 검사라서 패스워드 인증에 사용하면 brute force attack, rainbow table 로 뚫릴 수 있는 위험이 있다.

Adaptive Key Derivation Functions

다이제스트를 생성할 때 salting과 key stretching을 반복적으로 하여 보안의 강도를 높인 라이브러리다.

spring-security에서도 이러한 라이브러리를 활용한 기능을 제공한다.
https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/crypto.html#spring-security-crypto-passwordencoders

PBKDF2

  • 가장 많이 사용되는 라이브러리
  • SHA와 같이 검증된 해시 함수만을 사용
  • 높은 처리량의 시스템이라면 PBKDF2에 비해 보안 강도가 높은 bcrypt보다는 PBKDF2가 적절할 수 도있다.

bcrypt

  • 비밀번호를 저장하는 목적으로 개발되었다.
  • PBKDF2와는 달리 입력값을 72바이트로 제한하는 사항이 있다.
  • PBKDF2에 비해 보안강도가 높다.
  • 다이제스트 길이는 60으로 고정이다.

단점

  • 원문의 72바이트까지 텍스트가 동일하고 이후의 문자열은 달라도 같은 다이제스트가 생성됨

Links