SecureRandomSpi

SecureRandomSpi (난수 생성기 SPI)

암호학적으로 강력한 의사 난수 생성기 구현을 제공하려는 각 서비스 프로바이더가 구현해야 하는 SecureRandom 클래스의 Service Provider Interface(SPI)입니다.

출처: Java API Reference

본문

SecureRandomSpi는 난수 생성기의 내부 엔진(engine) 역할을 수행합니다. 구현에서 SecureRandomSpi(SecureRandomParameters) 생성자를 오버라이드하면 SecureRandom이 인스턴스화될 때마다 호출됩니다. SecureRandom.getParameters()null을 반환하면 안 됩니다. 생성자를 오버라이드하지 않으면 SecureRandomParameters 인자 없이 인스턴스화될 때 기본 생성자가 호출되며, getParameters()null을 반환합니다.

기본적으로 SecureRandomSpi 구현은 여러 동시 스레드에 안전하지 않은 것으로 간주되며, SecureRandom이 각 엔진 메서드에 대한 접근을 동기화합니다. 구현이 스레드 안전하다면 등록 시 "ThreadSafe" 서비스 프로바이더 속성을 "true"로 설정해야 합니다.

SPI가 정의하는 주요 메서드는 다음과 같습니다.

  • protected abstract void engineSetSeed(byte[] seed) — 주어진 시드로 이 난수 객체를 다시 시드합니다.
  • protected abstract void engineNextBytes(byte[] bytes) — 사용자가 지정한 수의 임의 바이트를 생성합니다. 제한을 초과하면 버퍼를 완전히 채울 때까지 생성 과정을 여러 번 호출합니다.
  • protected void engineNextBytes(byte[] bytes, SecureRandomParameters params) — 추가 매개변수로 임의 바이트를 생성합니다. 오버라이드하지 않으면 UnsupportedOperationException을 던집니다.
  • protected abstract byte[] engineGenerateSeed(int numBytes) — 주어진 수의 시드 바이트를 반환합니다. 다른 난수 생성기를 시드하는 데 사용할 수 있습니다.
  • protected void engineReseed(SecureRandomParameters params) — 엔트로피 소스에서 읽은 엔트로피 입력으로 이 난수 객체를 다시 시드합니다. 기본 구현은 UnsupportedOperationException을 던집니다.
  • protected SecureRandomParameters engineGetParameters() — 이 인스턴스의 유효 매개변수를 반환하고, 사용된 매개변수가 없으면 null을 반환합니다.
  • public String toString() — 이 SecureRandom의 사람이 읽을 수 있는 문자열 표현을 반환합니다.

더 알아보기 (Learn more)

Java 공식 API