[Java] java.security.egd 옵션

호성·2022년 6월 9일
1
post-thumbnail

해당 옵션의 역할을 알아보자

JVM이 시작되면서, 다양한 옵션들이 default값으로 들어가게되고 당연하게도 우리는 해당 옵션들을 임의로 설정할 수 있는데.. 그 옵션 중 하나가 java.security.egd다. java.security.egd는 자바의 SecureRandom 클래스를 초기화하는 방식에 영향을 미친다.

난수를 생성한다던지 등의 목적으로 최초로 SecureRandom을 이용할 때 JVM의 java.security의 구성 파일을 초기화하고 읽게되는데 해당 초기화를 어떻게 진행할지에 대한 설정 값이라고 생각하면 된다.

아래와 같이 사용된다.

java -Djava.security.egd=file:/dev/urandom -cp . com.X.java.security.x

들어갈 수 있는 값

  1. /dev/random
  2. /dev/urandom

위 값 모두 난수 발생기의 역할을 수행하는 특수 파일이라고 보면 된다.

두 값의 차이는 /dev/random은 난수를 생성할 때 충분한 엔트로피가 수집될 때까지 blocking 되는 것이고, /dev/urandom은 엔트로피가 충분하지 않아도 동작을 수행할 수 있다는 것이다. (non-blocking하다고 볼 수 있음)

근데 엔트로피가 뭐임?

Linux에서 아래 명령어를 사용하면 엔트로피 양을 확인할 수 있는데,

cat /proc/sys/kernel/random/entropy_avail

엔트로피는 "임의성"이라고 보면된다. Linux 기준으로, 네트워크 활동, 하드 드라이브 회전 속도, 키 클릭 등을 통해 실제 난수를 수집한다고 한다. 엔트로피 양이 충분해야 보안에 우수한 훌륭한 난수를 생성하기 좋다.

사용 가능한 엔트로피의 좋은 수는 일반적으로 2500~4096. 엔트로피는 1000 미만일 때 낮은 것으로 간주된다고 한다.

정리

따라서 /dev/random을 통한 java.security 초기화는 위에서 설명한 엔트로피 값이 충분할 때까지 blocking되므로 속도가 지연될 수 있으나, /dev/urandom을 통한다면 좀 더 빠른 효과를 볼 수 있으나, 훌륭한 난수를 생성한다고 보기엔 어렵다.

뭘 쓸지 판단은 사용자의 몫 ㅎㅎ

profile
스프링 깎는 노인

0개의 댓글