[java] java.security.egd 옵션은 무엇입니까?

내가 작업중 인 프로젝트에서 응용 프로그램은 다음과 비슷한 명령을 사용하여 시작됩니다.

java -Djava.security.egd=file:/dev/urandom -jar app.jar

나는 java.security.egd전에 옵션을 본 적이 없다 . 비트를 검색하면 Java 응용 프로그램에서 난수 생성을 구성하는 데 사용됩니다.

맞아? 언제 적용 되나요?



답변

Java 응용 프로그램은 java.security.SecureRandom 클래스를 사용하여 CSPRNG (암호 적으로 강력한 의사 난수 생성기 ) 를 사용하여 암호로 강력한 임의 값을 생성 할 수 있습니다 . java.util.Random 클래스 의 표준 JDK 구현은 암호화 적으로 강력한 것으로 간주되지 않습니다.

유닉스 계열 운영 체제에는 /dev/random장치 드라이버 및 기타 소스에서 수집 된 환경 노이즈에 액세스하는 의사 난수를 제공하는 특수 파일 인가 있습니다. 그러나 요청 된 것보다 적은 엔트로피가 있으면 차단합니다 . /dev/urandom의사 난수 생성기 시드가 부팅 이후 엔트로피로 완전히 초기화되지 않은 경우에도 일반적으로 차단되지 않습니다. /dev/arandom시드가 충분한 엔트로피로 안전하게 초기화 될 때까지 부팅 후 블로킹 한 다음 다시 차단하지 않는 세 번째 특수 파일이 여전히 있습니다 .

기본적으로 JVM은을 사용하여 SecureRandom 클래스를 시드 /dev/random하므로 Java 코드가 예기치 않게 차단 될 수 있습니다 . -Djava.security.egd=file:/dev/./urandomJava 프로세스를 시작하는 데 사용되는 명령 행 호출 옵션 은 JVM이 /dev/urandom대신 사용하도록 지시합니다 .

추가로 /./JVM 은 SHA-1을 PRNG (Pseudo Random Number Generator)의 기초 로 사용하는 SHA1PRNG 알고리즘 을 사용하는 것으로 보입니다 . /dev/urandom지정된 경우 사용되는 NativePRNG 알고리즘보다 강력 합니다.

마지막으로, /dev/urandom의사 난수 생성기 인 PRNG/dev/random 라는 신화가 있으며 , “진정한”난수 생성기 입니다. 이것은 단순히 사실이 아니다, 모두 /dev/random/dev/urandom같은 CSPRNG (암호 보안 의사 랜덤 넘버 생성기)에 의해 공급된다. 일부 추정에 따르면 각각의 풀에 엔트로피가 부족할 때의 동작 만 다릅니다. /dev/random블록 /dev/urandom은 그렇지 않습니다.

엔트로피가 부족하면 어떻습니까? 중요하지 않습니다.

“임의로 보이는 것”은 많은 암호화 구성 요소의 기본 요구 사항입니다. 그리고 암호화 해시의 출력을 얻는다면 암호가 그것을 받아 들일 수 있도록 임의의 문자열과 구별 할 수 없어야합니다. SHA1PRNG 알고리즘을 사용하는 이유는 시드와 함께 해시 함수와 카운터를 사용하기 때문입니다.

언제 적용 되나요?

항상 말할 것입니다.

출처 :

https://gist.github.com/svrc/5a8accc57219b9548fe1

https://www.2uo.de/myths-about-urandom


04/2020 편집 :

주석에는 Java 8의 SecureRandom 클래스 동작에 대한 변경 내용이 언급되어 있습니다 .

SHA1PRNG 및 NativePRNG는 java.security 파일의 SecureRandom 시드 소스 특성을 올바르게 준수하도록 수정되었습니다. file : /// dev / urandom 및 file : / dev /./ urandom을 사용하는 모호한 해결 방법은 더 이상 필요하지 않습니다.

이것은 이미 위의 소스 섹션에서 참조 된 테스트에 의해 지적되었습니다. Java 8의 SecureRanom 에서 /./사용하는 알고리즘 을 NativePRNG에서 SHA1PRNG로 변경하려면 추가 기능 이 필요합니다 .

그러나 공유하고 싶은 소식이 있습니다. 당으로 JEP-273 자바 (9) 이후, 의 SecureRandom 클래스가 구현하는 세 가지 결정적 랜덤 비트 생성기 (DRBG) 메커니즘에 설명 NIST 800-90Ar1 . 이러한 메커니즘은 SHA-512 및 AES-256만큼 강력한 최신 알고리즘을 구현합니다.

JDK에는 두 가지 종류의 SecureRandom 구현이 있습니다.

  • 하나는 플랫폼에 따라 다르며 /dev/{u}randomUnix 에서 읽 거나 Windows에서 CryptoAPI를 사용하는 것과 같은 기본 호출 또는 OS 장치를 기반 으로합니다. 최신 Linux 및 Windows 릴리스는 이미 DRBG를 지원 하지만 이전 릴리스 및 임베디드 시스템은 지원하지 않을 수 있습니다 .
  • 다른 종류는 이전의 SHA1 기반 RNG 구현을 사용하는 순수한 Java 구현으로, 승인 된 DRBG 메커니즘에서 사용하는 알고리즘만큼 강력하지 않습니다.

한편 Java 13 보안 개발자 안내서는 여전히 읽습니다.

Linux 및 macOS에서 java.security의 엔트로피 수집 장치가 file:/dev/urandom또는 로 설정된 file:/dev/random경우 NativePRNG가 SHA1PRNG보다 선호됩니다. 그렇지 않으면 SHA1PRNG가 선호됩니다.

새로운 DRBG 메커니즘이 이전 PRNG와 함께 작동하는 방식을 명확히하기 위해 AdoptOpenJDK (빌드 13.0.2 + 8)를 사용하여 macOS (Darwin)에서 일부 테스트를 실행합니다. 결과는 다음과 같습니다.

파일 : / dev / random

제공자 우선 순위 :

SecureRandom.NativePRNG
SecureRandom.DRBG
SecureRandom.SHA1PRNG

파일 : / dev / urandom

제공자 우선 순위 :

SecureRandom.NativePRNG
SecureRandom.DRBG
SecureRandom.SHA1PRNG

파일 : / dev /./ urandom

제공자 우선 순위 :

SecureRandom.DRBG
SecureRandom.SHA1PRNG
SecureRandom.NativePRNG

결론:

코드를 예기치 않게 차단하지 않으면 서 사용하는 플랫폼에 관계없이 사용 가능한 -Djava.security.egd=file:/dev/./urandom가장 강력한 SecureRandom 구현 을 활용하기 위해 사용 하는 것이 좋습니다 .


답변

JDK 8 이상을 사용하는 경우 더 이상 필요하지 않습니다.

이 문제는 Java에 의해 수정되었으며 여기에 몇 가지 링크가 있습니다.

개요

SHA1PRNG 및 NativePRNG는 java.security 파일의 SecureRandom 시드 소스 특성을 올바르게 준수하도록 수정되었습니다. file : /// dev / urandom 및 file : / dev /./ urandom을 사용하는 모호한 해결 방법은 더 이상 필요하지 않습니다.

자세한 정보 (페이지에서 무작위 검색) :

https://docs.oracle.com/javase/8/docs/technotes/guides/security/enhancements-8.html

https://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html


답변

이것은 리눅스 /dev/random/dev/urandom난수 생성기 의 차이점과 관련이 있습니다.

링크 에서 가져온

Java 버그 6202721에 따르면 (2004 년경) / dev / urandom이 제대로 작동하지 않아서 / dev / urandom이 지정된 경우에도 java.security.SecureRandom은 / dev / urandom 대신 / dev / random을 사용합니다. / dev / urandom이 아주 잘 작동한다는 버그는 이제 되돌려지지 않았습니다. 따라서 / dev / random 대신 SHA1PRNG를 강제로 사용하려면 /dev/./urandom을 사용하여 설정을 숨겨서 위조해야합니다.

질문에 대답하기 위해

언제 적용 되나요?

위의 링크를 기반으로, 이는 2004 년 Linux 시스템에서 / dev / urandom의 문제로 인해 Java 버전 5 및 그 이후의 고유 한 링크입니다.


답변