728x90
BCrypt, SCrypt, Argon2 비밀번호 암호화 기법
1. BCrypt
특징
- 안전성: 반복적인 해시 함수를 사용하여 공격에 견딜 수 있도록 설계됨.
- 적응성: 비용 인자(cost factor)를 조정하여 처리 시간을 증가시켜 공격 난이도를 조정할 수 있음.
- 견고성: 레인보우 테이블 공격에 강함.
장점
- CPU를 많이 사용하여 브루트 포스 공격을 방어함.
- 비용 인자를 조정하여 해시 계산 시간을 늘려 보안을 강화할 수 있음.
단점
- 메모리 사용량이 적어 현대의 GPU 공격에 상대적으로 취약할 수 있음.
2. SCrypt
특징
- 안전성: 메모리와 CPU를 모두 많이 사용하는 설계로, 병렬 공격을 어렵게 만듦.
- 적응성: 메모리 및 CPU 사용량을 조정하여 공격 난이도를 조정할 수 있음.
- 견고성: 기존의 해시 공격 기법들에 대해 강력한 저항성을 가짐.
장점
- 메모리와 CPU를 많이 사용하여 브루트 포스 공격을 방어함.
- 메모리 사용량을 조정하여 GPU 공격에도 저항할 수 있음.
단점
- 메모리와 CPU를 많이 사용하기 때문에 리소스가 제한된 환경에서는 부담이 될 수 있음.
3. Argon2
특징
- 안전성: 2015년 비밀번호 해시 콘테스트에서 우승한 알고리즘으로, 메모리와 CPU를 모두 많이 사용함.
- 적응성: 메모리, CPU, 병렬성 인자를 조정하여 공격 난이도를 조정할 수 있음.
- 견고성: 메모리 하드웨어 공격에 대해 강력한 저항성을 가짐.
장점
- 최신 알고리즘으로, 현재 알려진 모든 공격에 대해 강력한 저항성을 가짐.
- 메모리 및 CPU 사용량을 조정하여 보안을 강화할 수 있음.
단점
- 상대적으로 새로운 알고리즘으로, 매우 오래된 시스템에서는 지원하지 않을 수 있음.
SCrypt 사용 예제
Gradle 설정
dependencies {
implementation 'org.springframework.security:spring-security-crypto'
implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
}
사용 예제
import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;
import org.springframework.stereotype.Component;
@Component
public class PasswordEncoder {
private static final SCryptPasswordEncoder encoder = new SCryptPasswordEncoder(
16,
8,
1,
32,
64);
public String encrpyt(String rawPassword) {
return encoder.encode(rawPassword);
}
public boolean matches(String rawPassword, String encodedPassword) {
return encoder.matches(rawPassword, encodedPassword);
}
}
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Security @EnableMethodSecurity 설명 및 예제 (0) | 2024.07.10 |
---|---|
[Spring Boot] @Component와 @Configuration의 특징과 차이점 (0) | 2024.07.09 |
[Spring Boot] JWT, JWS, JWE 개념 및 차이점 (0) | 2024.07.08 |
[Spring Boot] @Value와 @ConfigurationProperties 차이점 (0) | 2024.07.08 |
[Spring Boot] HandlerMethodArgumentResolver 역할과 예제 (0) | 2024.07.02 |