-
Notifications
You must be signed in to change notification settings - Fork 0
[04. ADR] 패스워드 암호화 알고리즘
YH.LEE edited this page Jul 18, 2023
·
1 revision
- Status: proposed
- Deciders: 김정희, 이유희
- Date: 2023-07-17
Technical Story: Issue #2
User 도메인의 회원가입시 생성 데이터중 패스워드가 있다.
패스 워드에 적합한 암호화 알고리즘을 선택해야한다.
- 패스 워드 암호화에 적합한 암호화 방식인가?
- 법적으로 준수해야 할 암호화 방식이 있는가?
- 해킹에 의해 패스 워드 평문이 노출될 위험은 없는가?
- 양방향 암호화 알고리즘
- 단방향 암호화 알고리즘
패스워드 보안에 중점을 두어 PBKDF2에 비해 보안 강도가 높은 bcrypt 로 결정했다.
- 비밀번호가 유출 되더라도 복호화 하지 못하여 사용자의 비밀번호를 획득하기 힘들다.
단점
- 암호화 키가 노출되면 패스 워드 원본이 노출될 가능성이 있음. 패스워드는 원본을 알 수 있어선 안 된다.
장점
- 개인정보의 기술적 관리적 보호조치 기준 (2022.08)에 의하면 패스워드는 단방향 암호화를 권장함
단점
- MD5, SHA-1, SHA-256, SHA-512 등이 있음
- 이 암호화 알고리즘의 목적은 메세지 인증과 무결성 검사라서 패스워드 인증에 사용하면 brute force attack, rainbow table 로 뚫릴 수 있는 위험이 있다.
다이제스트를 생성할 때 salting과 key stretching을 반복적으로 하여 보안의 강도를 높인 라이브러리다.
spring-security에서도 이러한 라이브러리를 활용한 기능을 제공한다.
https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/crypto.html#spring-security-crypto-passwordencoders
- 가장 많이 사용되는 라이브러리
- SHA와 같이 검증된 해시 함수만을 사용
- 높은 처리량의 시스템이라면 PBKDF2에 비해 보안 강도가 높은 bcrypt보다는 PBKDF2가 적절할 수 도있다.
- 비밀번호를 저장하는 목적으로 개발되었다.
- PBKDF2와는 달리 입력값을 72바이트로 제한하는 사항이 있다.
- PBKDF2에 비해 보안강도가 높다.
- 다이제스트 길이는 60으로 고정이다.
단점
- 원문의 72바이트까지 텍스트가 동일하고 이후의 문자열은 달라도 같은 다이제스트가 생성됨
- https://www.javatpoint.com/how-to-encrypt-password-in-java
- https://hackid.tistory.com/m/10
- https://d2.naver.com/helloworld/318732
- https://www.ibm.com/docs/en/app-connect-pro/7.5.3?topic=reference-digesthash-function
- https://howtodoinjava.com/java/java-security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/