난수 생성

Substrate 런타임에서 난수 생성을 도입하는 방법을 설명합니다.

블록체인은 동일한 입력이 항상 동일한 출력을 생성하는 결정론적(deterministic) 결과를 필요로하기 때문에, 무작위한 결과를 생성하기 위한 적절한 소스를 찾는 것은 어려운 일입니다. 그러나 난수 생성이 특정 작업을 수행하는 데 필수적인 많은 응용 프로그램이 있습니다. 예를 들어, 블록을 생성자를 선택하기 위해 난수 생성을 포함시켜 예측 가능하지 않고 특정 공격에 취약하지 않도록 합니다. 통계 또는 과학적 분석, 암호 작업 또는 게임과 관련된 응용 프로그램에서도 난수 생성을 사용할 수 있습니다.

결정론적 난수 생성

전통적인 컴퓨터 응용 프로그램에서 사람들이 무작위 숫자라고 부르는 것은 사실 의사 난수를 사용하여 생성됩니다. 의사 난수는 사용자 또는 외부 소스에서 제공되는 충분히 무작위한 시드와 시드를 조작하여 일련의 숫자를 생성하는 알고리즘에 의존합니다. 결과는 알고리즘을 사용하여 예측하기 어렵지만, 동일한 시드 입력은 항상 동일한 출력 시리즈를 생성하기 때문에 결정론적입니다.

그러나 블록체인에서 실행되는 응용 프로그램은 모든 네트워크의 권한자가 온체인 값, 즉 주입된 모든 난수 생성 데이터에 대해 동의해야 하기 때문에 제약이 더 큽니다. 이 제약 때문에 블록체인 응용 프로그램에서 직접적으로 실제 난수 생성을 사용할 수 없습니다.

블록체인 응용 프로그램에서 난수 생성을 제공하기 위한 가장 일반적인 접근 방식은 검증 가능한 무작위 함수(VRF)라는 암호 기본 요소입니다. 검증 가능한 무작위 함수 (VRF)는 입력을 받아 무작위 숫자와 이 무작위 숫자가 제출자에 의해 생성되었다는 증명(proof)를 생성하는 수학적 연산입니다. 이 증명은 임의의 도전자가 검증할 수 있으며, 이를 통해 무작위 숫자 생성이 유효한지 확인할 수 있습니다.

Polkadot 생태계와 Substrate 기반 체인에서는 검증 가능한 무작위 함수가 BABE 팔레트에서 제공하는 합의 메커니즘의 일부입니다. 검증 가능한 무작위 함수와 합의 사이의 관계에 대한 자세한 내용은 합의를 참조하십시오.

난수 생성 및 사용

Substrate는 난수 생성을 생성하는 로직과 난수 생성을 사용하는 로직 사이의 인터페이스를 정의하는 Randomness 특성을 제공합니다. 이 특성을 사용하면 난수 생성을 생성하는 로직과 난수 생성을 사용하는 로직을 서로 독립적으로 작성할 수 있습니다.

난수 생성

애플리케이션의 보안 보장 및 성능 트레이드오프에 따라 다양한 방법으로 Randomness 특성을 구현할 수 있습니다. Substrate에는 성능, 복잡성 및 보안 사이의 다른 트레이드오프를 제공하는 팔레트에서 Randomness 특성을 구현하는 두 가지 예제가 포함되어 있습니다.

  • 보안이 없는 난수 생성 팔레트는 이전 81개 블록의 블록 해시를 기반으로 의사 난수 값을 생성하는 random 함수를 제공합니다.

    이러한 유형의 난수 생성은 성능이 우수하지만 보안이 없습니다. 이 팔레트는 보안 요구 사항이 낮은 응용 프로그램이나 난수 생성을 사용하는 응용 프로그램을 테스트할 때만 사용해야 합니다. 이 팔레트는 제품 환경에서 사용해서는 안 됩니다.

  • BABE 팔레트는 검증 가능한 무작위 함수를 사용하여 난수 생성을 제공합니다.

이 팔레트는 제품 수준의 난수 생성을 제공하며, 인프라블록체인(InfraBlockchain) 에서 사용됩니다. 블록을 생성하기 위해 슬롯 기반의 예측불가능한(blind) (BABE) 합의를 사용해야 합니다.

난수 사용

Randomness 특성은 다음과 같은 난수 생성 사용을 위한 메서드를 제공합니다:

  • random_seed 메서드는 매개변수를 받지 않고 원시 무작위 값을 반환합니다. 이 메서드를 한 블록에서 여러 번 호출하면 매번 동일한 값을 반환합니다. 따라서 대부분의 경우에는 이 메서드를 직접 사용하지 않아야 합니다.

  • random 메서드는 바이트 배열을 컨텍스트 식별자로 사용하고, 기본 난수 생성 소스가 허용하는 한 다른 컨텍스트와 독립적인 결과를 반환합니다.

무작위 값을 필요로하는 팔레트는 난수 생성 소스를 제공할 필요는 없지만, Randomness 특성을 구현하는 난수 생성 소스를 지정해야 합니다.

보안 보장

Randomness 특성은 런타임에서 난수 생성 소스를 정의하기 위한 편리한 추상화를 제공하지만, 특성 자체는 어떠한 보안 보장도 제공하지 않습니다. 난수 생성 소스가 모든 팔레트의 난수 생성 요구 사항을 충족하는지 확인하는 것은 런타임 개발자로서 당신의 책임입니다.

다음 단계로 넘어가기

Last updated