본문 바로가기
Language/Java

자바 Random vs SecureRandom 차이점 정리

by wakestand 2022. 5. 24.
반응형
Random random = new Random();
random.nextInt();

SecureRandom secureRandom = new SecureRandom();
secureRandom.nextInt();

 

자바에서 Random 값이 필요할 때

Random을 사용하는 방법과

SecureRandom을 사용하는 방법이 있는데

 

바로 결론부터 가자면

무조건 SecureRandom을 쓰는 쪽을 권장한다

 

먼저 Random의 비트 수는 48인 반면

SecureRandom은 128이기 때문에

SecureRandom에서 중복값이 나올 확률이 훨씬 적고

 

Random의 경우에는

2^48 회를 시도하면 사용한 값을 찾을 수 있는데

SecureRandom의 경우에는

2^128 회의 시도가 필요하다

 

여기에 Random은 시스템 시간이나

시간을 가지고 시드를 생성하는데 사용하기 때문에

시드를 생성된 시간을 알면 훨씬 뚫리기 쉽지만

 

SecureRandom은

OS에서 임의의 데이터를 사용해서 훨씬 안전하다

 

마지막으로 Random은

Linear Congruential Generator를 사용하는데

SecureRandom은 SHA1를 사용한다

 

뭐가 뭔지 전혀 구별이 안되지만설명을 읽어보면 SHA1가 훨씬 좋은 방식이라고 한다

 

마지막으로 중요하지 않은 값의 경우에는Random을 쓰건 SecureRandom을 쓰건아무 상관이 없지만

 

보안이 필요하거나 혹은 민감한 데이터는 

반드시 SecureRandom을 사용해 줘야 한다

반응형

댓글