암호화의 종류
SHA-2(Secure Hash Algorithm 2)
- 미국 NSA에서 설계한 암호화 해시 함수.
- digest size는 224, 256, 384or512 bit로 6개의 해시함수로 구성되어졌음.
- GPU를 이용한 연산속도가 매우 빠르기 때문에 password 암호화에 권장되지 않음
- GPU 연산속도가 빠를수록 공격자의 하드웨어를 통한 오프라인 brute force에 더 취약하다.
- 빠른 해시를 사용하여 암호화를 진행시 공격자는 오프라인 공격으로 초당 수십억개의 해시를 계산할 수 있다.
PBKDF2(Password-Based Key Derivation Function)
pbkdf2_hmac(해시함수(sha256..), password, salt, iteration, DLen)
- 해시함수의 컨테이너 역할을 한다.
- 검증된 해시함수만을 사용한다.
- 해시함수와 salt를 적용 후 해시 함수의 반복횟수를 지정하여 암호화할 수 있다.
- 가장 많이 사용되는 함수. ISO 표준에 적합하며 NIST에서 승인된 알고리즘이다.
NIST Special Publication 800-132
Bcrypt
bcrypt.hashpw(password, bcrypt.gensalt())
- 1999년에 publish된 password-hashing function이다.
- Blowfish 암호를 기반으로 설계된 암호화 함수이며 현재까지 사용중인 가장 강력한 해시 메커니즘 중 하나이다.
- 보안에 집착하기로 유명한 OpenBSD에서 사용하고 있다.
- .NET 및 Java를 포함한 많은 플랫폼,언어에서 사용할 수 있다.
- 반복횟수를 늘려 연산속도를 늦출 수 있으므로 연산 능력이 증가하더라도 brute-forece 공격에 대비할 수 있다.
SHA를 암호해싱에 사용하는 암호화 함수들은 GPU를 이용한 공격에 취약하며(SHA family는 연산속도가 매우빠르기 떄문) 많은 메모리를 필요로 하지 않는 점을 문제로 지적하고있습니다.
SHA가 보안에 결함이 있어서 안전하지 않기 때문이 아니라, SHA는 일반적으로 GPU연산에 유리한 32비트 논리 및 산술 연산만 사용하기 때문에, 공격자가 빠른연산으로 공격할 수 있기 때문입니다.
Bcrypt 설계자들은 이런 문제로 SHA가 아닌 Blowfish를 이용하여 구현하였습니다.
Maven Dependency
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
샘플 소스
import org.springframework.security.crypto.bcrypt.BCrypt;
public class BCryptTest {
public static void main(String[] args) {
String password = "암호화할 문자열";
// 디비에 저장할 비밀번호 암호화
String encrypted = BCrypt.hashpw(password, BCrypt.gensalt());
System.out.println("encrypted : " + encrypted);
// 로그인시 디비에 저장된 암호화된 문자열과 사용자가 입력한 비밀번호로 checkpw 검증
System.out.println(BCrypt.checkpw(password, encrypted)); // true
System.out.println(BCrypt.checkpw(password + "1", encrypted)); // false
}
}
'Languages | Frameworks > Java' 카테고리의 다른 글
Java) List와 ArrayList의 차이? (0) | 2022.11.08 |
---|---|
JPA, JPQL (0) | 2022.09.27 |
게시판 글이 중간에 삭제시 > 번호 초기화후 인덱싱 하는 방법 (0) | 2022.07.13 |
[Java] 추상 클래스와 인터페이스 (0) | 2022.05.30 |
Optional이란? (0) | 2021.09.17 |