[Java]SecureRandom와 Random의 차이?

Gaeng·2024년 11월 18일

JAVA

목록 보기
1/3
post-thumbnail

SecureRandomRandom 클래스?

SecureRandom 사용한 프로젝트 정리

결론적으로 먼저 말하면, 다음과 같이 정리할 수 있다.

특성RandomSecureRandom
용도일반적인 난수 생성보안적이고 예측 불가능한 난수 생성
성능빠름느림 (보안에 더 많은 시간과 자원 소비)
사용 예게임, 테스트 데이터 생성, 샘플링암호화, 인증 토큰, 보안 프로토콜 등
보안성보안적이지 않음보안적으로 안전

1. Random 클래스

Random 클래스는 Java에서 일반적인 난수를 생성하기 위해 사용됩니다. 이는 주로 게임, 시뮬레이션, 테스트 등에 사용되는 난수를 생성하는 데 적합합니다.

주요 특징:

  • 일반적인 난수 생성: Random 클래스는 의사 난수를 생성합니다. 즉, 특정 알고리즘을 사용해 난수를 생성하지만, 알고리즘이 예측 가능한 특성을 가질 수 있습니다.

  • 속도가 빠르고, 일반적인 용도로 충분한 수준의 난수를 생성

    import java.util.Random;
    
    public class RandomExample {
        public static void main(String[] args) {
            Random random = new Random();
            int randomInt = random.nextInt(100); // 0부터 99까지의 난수
            System.out.println("Random number: " + randomInt);
        }
    }

사용 예:

  • 게임에서 랜덤한 이벤트 발생
  • 데이터 샘플링
  • 테스트 데이터 생성

2. SecureRandom 클래스

SecureRandom 클래스는 보안 목적의 난수를 생성할 때 사용됩니다. 암호학적으로 안전한 난수를 생성하기 위해 설계되었습니다. 이 난수는 예측할 수 없고 외부 공격에 강한 특성을 가집니다.

주요 특징:

  • 암호학적 안전성: SecureRandom암호학적 난수를 생성합니다. 즉, 생성된 난수가 예측되거나 추측되는 것이 매우 어려워 보안적으로 중요한 작업에 적합합니다.
  • 느림: 보안성을 강화하기 위해 속도가 느릴 수 있습니다. 이는 보안상의 이유로 난수 생성에 더 많은 시스템 자원을 소비할 수 있기 때문입니다.
import java.security.SecureRandom;

public class SecureRandomExample {
    public static void main(String[] args) {
        SecureRandom secureRandom = new SecureRandom();
        int secureRandomInt = secureRandom.nextInt(100); // 0부터 99까지의 난수
        System.out.println("Secure Random number: " + secureRandomInt);
    }
}

사용 예:

  • 암호화 키 생성
  • 토큰 생성
  • 보안 프로토콜에서 사용되는 랜덤 값 생성 (예: SSL 인증서)
profile
문제를 해결하면서 나온 문제를 기록하는 노트

0개의 댓글