체인링크 VRF: 온체인에서 검증가능한 무작위성 (랜덤 펑션)
체인링크 VRF를 처음으로 소개하게 되어 매우 설렙니다. 체인링크 VRF는 검증가능한 랜덤 펑션을 통해 온체인에서 검증할 수 있는 무작위성(랜덤성)을 생성할 수 있는 기능입니다. 수많은 훌륭한 스마트 컨트랙트가 체인링크 VRF 사용을 통해 혜택을 누릴 수 있을 것이며 통제할 수 없는 조작 불가능한 랜덤 데이터를 사용 및 증명해야 하는 스마트 컨트랙트를 위한 유용한 기능입니다.
체인링크 VRF에 대한 피드백을 제공해 주신 큰 개발자 커뮤니티이자 저희 아카데믹 협력자분들 및 실제 구현 가능한 초기 실행 단계를 위해 애써 주신 팀원분들께도 감사의 말씀을 전합니다.
체인링크 VRF는 블록체인 게이밍, 보안, 계층 2 프로토콜 등 다양한 유스 케이스를 위한 스마트 컨트랙트의 개발을 가속화시킬 수 있습니다. 개발자들은 체인링크 VRF를 스마트 컨트랙트에 쉽게 인티그레이션 해 검증가능한 랜덤 펑션을 사용할 수 있고 방법은 최근 공개된 개발자 문서(developer documentation)에 나와있습니다.
검증가능한 무작위성의 필요성
스마트 컨트랙트가 보유한 자금을 호시탐탐 노리는 공격자로부터 성공적으로 컨트랙트를 보호하고 안전한 컨트랙트를 만들기 위해서 늘 보안에 대해 민감하게 생각해야 합니다. 무작위성을 주요 인풋으로 사용하는 스마트 컨트랙트를 만드는 개발자은 이 무작위성을 헤칠 수 있는 조작을 결정적인 위험으로 인지합니다. 무작위성에 의존하는 시스템이 잘 설계되었다면 컨트랙트의 모든 참여자들에게 공정하게/공평하게 무작위로 된다는 것을 증명하고 싶을 것이고 그와 동시에 결과를 예측해 컨트랙트를 악용하려는 공격자들에 대한 리스크도 크게 줄이고 싶을 것입니다.
체인링크 VRF는 이 두 가지 필요조건을 충족시킬 수 있습니다. 온체인으로 검증가능한 암호화된 증거가 수반된 무작위성을 제공함으로써 그 무작위성이 실제로 예측 불가능하다는 것을 보여줍니다. 체인링크 VRF의 무작위성은 온체인에서 검증 가능하기 때문에 참여하는 노드들은 요청에 대해서 보류만 할 수 있고 만약에 보류한다면 추후 있을 체인링크 스테이킹 역량을 활용해 금전적으로 불이익을 줄 수 있으며 미래에는 무작위성을 위해 수수료를 지불하는 쿼리에 참여할 수 없게 될 가능성도 있습니다.
체인링크 VRF를 사용한다면 예측 불가능한 결과물을 필요로 하는 모든 애플리케이션을 위한 신뢰할 수 있는 스마트 컨트랙트를 만들 수 있습니다. 예시는 다음과 같습니다.
● 온체인에서 검증 가능한 무작위적 소스를 사용함으로써 더 신뢰가능한 게임을 만들 수 있고 보안에 특히 더 민감한 유저들을 위해 추가적인 증거를 제공할 수 있습니다.
● 어렵고 예측 불가능한 시나리오 및 환경을 생성해 게임을 더 재밌게 만들 수 있고 랜덤으로 떨어지는 아이템 같은 예측할 수 없는 리워드를 플레이어들에게 제공할 수 있습니다.
● 직무 및 리소스를 랜덤으로 할당할 수 있습니다. (예: 사건에 대한 판사 또는 심사 대상 기업에 회계 감사원을 무작위로 배치)
● 컨트랙트가 합의를 도출하는데 필요한 제안에 투표할 자격이 있는 대표 표본을 선정할 수 있습니다. (조사는 추가 시빌 저항을 제공하는 효율적인 방법입니다.)
기존 방식의 보안 한계점
스마트 컨트랙트에 무작위성을 제공하는 현재 솔루션은 한계가 있습니다. 하지만 체인링크 VRF의 검증가능한 무작위성을 통해 기존 한계를 극복할 수 있습니다. 블록해시와 같은 기존 온체인 데이터와 오프체인 무작위성을 사용해 온체인에 전송하는 방식 모두 각각의 한계점이 있습니다.
블록체인의 무작위성에 기반해 스마트 컨트랙트를 만드는 개발자들이 우려하는 악용 사례가 한 가지 있습니다. 특히 블록 해시의 무작위성에 의존하는 스마트 컨트랙트 개발자들이 우려하는 것입니다. 예를 들어 스마트 컨트랙트가 특정 높이에서 블록 해시의 마지막 비트의 패리티에 기반해 결정을 내린다고 가정해보세요. 이렇게 보면 50:50 확률 같지만 만약 평균적으로 1/3 블록을 생성하는 마이너 또는 마이너 연합이 블록 해시의 마지막 비트가 1인, 약 2-3ETH의 보상을 제공하는 당첨 블록을 버린다고 가정해보세요. 이런 경우에 마이너는 비트가 0이 나오는 확률인 50%를 2/3 확률로 조작할 수 있고 이 랜덤 생성 방식에 의존하는 스마트 컨트랙트에 있는 유저 자금 손실로 이어질 수 있습니다. 만약 컨트랙트 상 0 비트가 나오는 경우가 마이너에게 12-18ETH 이상의 이득으로 이어진다면 이런 행동을 할 경제적 유인이 생기기 때문에 이런 방식을 사용하는 스마트 컨트랙트가 갖춰야 하는 한계를 상향 조정해야 할 수 있습니다.
이런 문제를 피하기 위해 스마트 컨트랙트 개발자들은 이미 오프체인 솔루션으로 눈을 돌려 오프체인에서 생성된 임의의 숫자를 온체인으로 전송하고 있습니다. 하지만 오프체인 숫자가 공정하게 생성되었다는 암호 검증이 없다면 제공된 숫자 자체가 오프체인의 제공자가 임의로 조작한 수치일 수도 있고 임의의 수치를 온체인에 올리는 데이터 이동 과정에서 조작될 수도 있습니다. 마찬가지로 애플리케이션의 유저들은 그저 무작위로 숫자가 공정하게 생성되어 아무런 중간 조작 과정 없이 온체인에 전달되었다고 짐작할 수밖에 없습니다.
스마트 컨트랙트에 대한 무작위성을 소스로 사용하고자 하는 개발자들이 피해야 할 요소 및 맞이할 수 있는 보안 위험은 다음과 같습니다.
● 스마트 컨트랙트가 액세스 불가능하거나 호환되지 않는 경우
● 중앙화된 랜덤 숫자 생성 오퍼레이터의 조작
● 애플리케이션의 유저인 블록체인의 마이너가 악용하는 경우
● 애플리케이션의 엔드 유저의 지나친 신뢰를 요구하는 경우
이러한 문제 및 원치 않은 보안 위험을 처리하기 위해 체인링크 VRF는 모든 결과가 공정하게 생성되었다는 투명성 및 암호 증명을 제공합니다.
체인링크 VRF 작업 방식
1. 스마트 컨트랙트 애플리케이션이 무작위성을 요청
2. 체인링크가 무작위성을 생성해 VRF 컨트랙트에 증거 전송
3. VRF 컨트랙트가 무작위성 검증
4. 스마트 컨트랙트 애플리케이션이 검증된 무작위성 수신
간단하게 말하자면 스마트 컨트랙트가 체인링크에 시드(seed)를 제공해 무작위성을 요청합니다. 제공되는 오라클이 예측할 수 없는 이 시드는 랜덤 숫자를 생성하는데 사용하게 되고 그 후에 온체인으로 컨트랙트에 전송됩니다. 각 오라클은 무작위성을 생성할 때 각자의 비밀 키를 사용합니다. 증거와 함께 결과가 온체인으로 발표가 되면 오라클의 공개 키와 애플리케이션의 시드를 사용해 검증이 됩니다. 널리 잘 알려진 블록체인만의 특징인 증거 검증 능력을 활용해 컨트랙트가 있는 온체인 환경에서 검증받은 무작위성 인풋만 컨트랙트가 사용하도록 합니다.
체인링크 VRF를 사용해서 얻을 수 있는 근본적인 이점은 검증가능한 무작위성입니다. 만약 노드 하나가 훼손되었더라도 결과를 조작하거나 조작된 결과를 제공하지 못합니다. 만약 훼손된 노드가 있다면 온체인 암호화 증명이 실패할 것입니다. 최악의 시나리오는 훼손된 노드가 요청에 대한 응답을 회신하지 않는 것인데 만약 회신하지 않는다면 블록체인에 즉시 기록이 되어 영원히 기록에 남을 것입니다. 유저들은 응답을 하지 않거나 유효한 증명을 수반한 무작위성을 제공하지 않는 노드는 신뢰하지 않을 것입니다. 그리고 아주 적은 확률이지만 노드가 훼손되는 경우가 생겨도 무작위성 특성 자체가 훼손되지는 못할 것입니다. 훼손된 노드는 그저 응답을 하지 않아 요청을 보류할 수는 있겠지만 추후 있을 체인링크 스테이킹 역량을 활용해 금전적으로 불이익을 줄 수 있으며 미래에는 무작위성을 위해 수수료를 지불하는 쿼리에 참여할 수 없게 될 가능성도 있습니다. 이렇게 품질이 낮거나 잘못된 행동을 하는 노드 오퍼레이터들은 상당한 즉각적 및 장기적 손실을 입게 됩니다. 즉, 체인링크 VRF는 올바르게 사용한다면 애플리케이션을 조작할 순 없습니다. 그저 오프라인으로 되거나 하나의 결과물을 보류해 미래 무작위성을 제공하는 과정에 참여할 수 없게 되겠죠. 이로 인해 체인링크 VRF를 사용하는 스마트 컨트랙트 개발자들 및 사용자들에게 훌륭한 보안을 보장할 수 있습니다.
체인링크 VRF를 사용함으로써 얻을 수 있는 추가 이점은 더 많은 사용자들이 사용할수록 노드 오퍼레이터들에게 제공되는 수수료가 늘어나고 노드 오퍼레이터들이 최대한 보안을 보장할 수 있도록 하는 인센티브가 늘어난다는 것입니다.
시간이 지날수록 유저들이 추가 보안을 위해 지불하는 수수료의 금액이 늘어남에 따라 스테이킹을 통한 암호경제 보안을 요구하게 될 것입니다. 이로 인해 유저가 지불하는 수수료가 지원하는 글로벌 공유 리소스가 생길 것이며 개별 RNG (랜덤 숫자 생성)솔루션을 만들기 위해 사용되었을 자금을 블록체인 생태계를 위한 공유 리소스의 공동 보안을 위해 투자하게 될 것이라 생각합니다. 체인링크는 폴카닷(Polkadot), 테조스(Tezos)를 포함한 다수의 체인에서 사용되고 있습니다. 따라서 늘어나는 유저 풀 및 더 강력해지는 암호경제 보안의 네트워크 효과로 인해 앞으로 더 많은 사람들이 이 커뮤니티 리소스를 위해 수수료를 지불할 것입니다.
인티그레이션 사례: 풀투게더
풀투게더(PoolTogether) 이더리움 기반의 원금을 잃지 않고 참여할 수 있는 복권과 같은 서비스입니다. 현재 풀투게더 팀이 면밀한 조사 끝에 풀투게더 애플리케이션에 체인링크VRF를 사용해 유저들에게 무작위성을 보장하기로 했습니다. 굉장히 기쁜 소식입니다.
예금: 풀투게더에서 디파이 대출 프로토콜을 통한 예치금 이자 발생
풀투게더는 랜덤으로 당첨자를 선정해 1주일 동안 발생한 이자를 모두 받음. 이자가 발생하는 예치금은 각 유저 소유.
풀투게더는 원금을 잃지 않고 참여할 수 있는 게임으로 유저들은 풀에 예금을 하고 풀에 예치된 예금에 대한 이자를 무작위로 매일 및 매주 한 사람에게 몰아주는 일종의 복권 서비스입니다. 이 게임은 복권의 원리를 통해 예금을 장려합니다.
체인링크의 VRF를 시행해 검증가능한 무작위성을 보장할 수 있다면 풀투게더 유저들은 각각의 당첨자들이 정말 조작되지 않은 랜덤 당첨자인 것을 검증할 수 있게 됩니다. 풀투게더는 보안이 더 강화되고 유저들에게 풀투게더 아키텍쳐의 중요한 부분이 안전하고 검증 가능한 방식으로 작동하며 이를 증명할 수 있다고 보장할 수 있습니다. 따라서 유저들은 풀투게더 스마트 컨트랙트에 참여한다면 실제로 당첨금을 받을 수 있다는 확률이 있다는 것을 더 신뢰하게 됩니다.
기술 설명
체인링크 VRF는 이 논문에 설명되어 있는 골드버그(Goldberg)의 검증 가능한 랜덤 펑션(Verifiable Random Function)을 실행한 사례입니다. “검증 가능한 랜덤 펑션”에서의 “랜덤”은 “시드 또는 비밀 키를 모르는 어느 사람에게나 (균일분포) 완전히 예상 불가능”하다는 것을 의미합니다.
VRF 비밀 키는 {0, …, #secp256k1-1} 균일분포에서 오라클이 암호화적으로 안전한 방식으로 선택하는 숫자입니다. (secp256k1은 이더리움 암호화 기법에서 사용하는 타원형 곡선) 해당 비밀 키와 연관된 키는 공개 키로 오라클을 파악하는데 사용됩니다. 오라클은 온체인 장비를 통해 공개 키를 등록하고 동시에 응답할 체인링크 job-ID도 입력합니다.
무작위성을 필요로 하는 스마트 컨트랙트가 요청을 하면 시드를 제공합니다. 예측하기 어려운 VRF 결과물을 위해 예측할 수 없는 조작하기 어려운 수치를 시드에 넣는 것이 좋습니다. 예를 들어 가장 최근 블록해시 또는 이미 암호화 검증을 끝낸 현실 세계 데이터인 어떤 자산에 대한 가장 최근 가격 등이 있습니다. 이 데이터를 합쳐 keccak256를 사용해 bytes32로 만들어 시드 인풋으로 사용합니다. 온체인 VRF 장비가 다른 데이터에 소비자가 제공하는 시드를 섞어 기본적인 보호장치를 더해 재전송 공격을 방지하지만 자신만의 시드를 제공하는 것도 중요합니다.
온체인 장비가 시드를 결정하면 이더리움 로그를 전파해 소비자가 요청한 특정 오라클에 해당 VRF 결과물을 요청합니다. 이 로그를 보면 오라클이 결과물을 어떻게 도출하는지 다음 구조를 통해 확인할 수 있습니다.
먼저 체인링크 VRF가 “커브에 인풋을 해싱 하고” 암호학적으로 안전한 랜덤 샘플을 secp256k1로부터 취득 후 시드와 오라클의 공개 키를 인풋으로 사용합니다. keccak256 를 사용해 인풋을 반복적으로 해싱 해 결과물이 secp256k1의 베이스 필드(base field)보다 적은 값 및 (secp256k1 설명에 나와있는 “p”) 결과물이 secp256k1의 어느 포인트(x,y) 중 x 세로축이 될 때까지 (예: 베이스 필드의 y2=x3+7) 합니다. 그다음 (x,y)는 곡선 인풋의 해시가 됩니다.
그 후 포인트 Ɣ를 획득하기 위해 비밀 키를 secp256k1 곡선 포인트의 (x,y)에 곱셉합니다. Ɣ의 keccak256 해쉬는 uint256이며 VRF 결과물이 됩니다. 오라클의 공개 키가 secp256k1의 생성기이며 체인링크 VRF는 Ɣ가 (x,y)의 배수라는 것에 대한 증명을 생성합니다. 이는 슈노르 서명(Schnorr signature)과 굉장히 유사합니다. 먼저 비밀 키를 위해 했던 것처럼 {0, …, #secp256k1-1}에서 논스(nonce) n을 안전하게 샘플로 삼습니다. 그 후 u=n×g를 계산하고 여기에서 g는 secp256k1 생성기이며 u의 이더리움 주소를 사용합니다. 그 후 v=n×(x,y)를 계산합니다. 다음으로 (x,y), VRF 공개 키, Ɣ, u의 주소 및 v를 해싱하고 해시의 나머지를 #secp256k1로 모듈로(modulo) 해 그 값을 c라고 부릅니다. 마지막으로 s=n-c×k 모듈로 #secp256k1 를 계산하고 여기에서 k는 비밀 VRF 키 입니다. 공개 키, Ɣ, c, s 와 인풋 시드가 증명입니다. 이것을 온체인 장비에 다시 전송해 증명을 검증하고 결과물을 컨트랙트에 전송해 증명이 검증되었다고 가정합니다.
스마트 컨트랙트는 증명을 검증하기 위해 이상적으로 다음 과정을 거칠 것입니다.
● 공개 키와 Ɣ가 유효 secp256k1 포인트인지 확인
● c×pk+s×g 포인트의 주소가 u의 주소와 매치하는지 검증 (여기서 pk는 오라클의 공개 키)
● 공개 키 와 시드에서 “해시 투 커브” (x,y)를 계산해 h의 해시, 공개 키, Ɣ, u의 주소와 c×Ɣ+s×(x,y)가 c와 매치하는지 확인
왜 이 방식이 암호학적으로 안전한지 더 체감하고 싶으신 분들은 지미 송(Jimmy Song)의 책(Programming Bitcoin) 3장에 있는 “서명 및 검증” 섹션의 “화살표” 아날로지를 확인해보세요. 체인링크의 경우 도달하려는 특별한 “타겟”은 c입니다. 이 방법을 통한 보안을 완전하게 증명하려면 “Making NSEC5 Practical for DNSSEC”의 별첨B를 참고해 주세요.
안타깝게도 secp256k1에서 c×Ɣ와 같은 스칼라 곱셈(scalar multiplication)은 EVM에서 직접적으로 연산하려면 상당한 비용이 요구되므로 효율성을 위해 체인링크는 비탈릭 트릭(Vitalik’s trick)을 통해 c×Ɣ에 대한 증명을 위해 통과된 대리인이 c×Ɣ의 결과에 매치한다는 것을 검증합니다. 이 방식을 통해 저희는 c×Ɣ를 오프체인에서 직접 연산하는 것이 아니라 c×Ɣ로 통과된 값이 c×Ɣ라는 것만 검증하면 되므로 비용이 훨씬 줄어듭니다.
위에 나온 인풋 및 과정에 추가로 증명에 대한 온체인 검증을 위해 c×Ɣ 와 s×(x,y)에 대한 증인도 필요합니다. 검증 과정에는 비탈릭 트릭을 통해 유효한 secp256k1 곡선 포인트인지, 주장하는 결과물에 대한 값이 맞는지 증인을 확인합니다. 추가적으로 u에 대한 이더리움 주소를 확인하며 비탈릭 트릭을 사용해 c×pk+s×g 포인트에 매치하는지 확인합니다.
VRF 체인링크 VRF 추후 계획
체인링크의 추후 계획에 있는 네트워크 분산 방식은 임계치 서명을 사용해 비용 효율적이며 확장성이 높습니다. 동일한 분산 방식을 사용해 체인링크 VRF도 상당한 탈중앙화를 달성하고 가용성을 유지하게 될 것입니다. 이 두 가지 방법을 통합해 체인링크 VRF만이 제공할 수 있는 온체인에서 검증 가능한 랜덤 펑션의 이점은 모두 누리면서 체인링크 VRF의 업타임 및 가용성을 위한 수천 개의 노드를 비용 효율적으로 사용할 수 있습니다.
체인링크 VRF 분산화 방식
오프체인 – 체인링크 노드
데이터에 대한 새로운 요청이 체인링크 네트워크로 전송
오프체인 – 체인링크 노드
체인링크 노드들이 응답을 하고 필요한 숫자의 노드들이 참여해 (예: 7명) 응답을 하나로 어그리게이트
임계치에 달성하면 결과가 하나의 트랜잭션으로 전파
온체인 – 스마트 컨트랙트
결과가 검증, 업데이트 및 스마트 컨트랙트 애플리케이션을 위해 사용 가능하게 됨
체인링크 더 큰 생태계의 노드들이 체인링크VRF 랜덤 숫자 생성에 참여할 수 있도록 함으로써 저희는 경제적 이득을 기반으로 노드 오퍼레이터들이 자발적으로 참여하게 해 온체인에 검증가능한 무작위 한 데이터를 생성 및 전파할 수 있는 글로벌 네트워크를 형성할 수 있습니다. 체인링크 임계치 서명과 분산된 노드 오퍼레이터 네트워크를 동시에 사용한다면 컨트랙트 유저들의 자금을 노리는 공격자들로부터 유저들의 자산을 보호할 수 있습니다. 체인링크 VRF에서 제공하는 응답은 온체인에서 검증 가능한 것뿐만 아니라 상당한 업타임 및 가용성을 보장할 수 있습니다. 체인링크가 이미 검증가능한 랜덤 펑션을 필요로 하는 다수의 블록체인에서 사용되고 있고 암호경제적 보장이 이미 되기 때문에 체인링크 VRF는 무작위성을 인풋으로 하는 스마트 컨트랙트에 대한 표준이 될 가능성이 높습니다.
위에서 언급한 이점들 외에도 더 많은 이점을 제공하기 위해 현재 체인링크VRF 개선을 위해 노력하고 있고 최신 기술에 대해 조사해 분산된 무작위성을 생성할 수 있도록 하며 다른 RNG(랜덤 번호 생성) 시스템과 협력할 수 있도록 노력하고 있습니다. 저희 자체 초기 연구 결과 체인링크VRF는 온체인 및 오프체인에서 VDF 및 다른 무작위성을 생성하는 방식과 통합될 수 있습니다. 체인링크는 더 큰 블록체인 업계와 더 큰 학술 커뮤니티와의 협력을 통해 스마트 컨트랙트를 위한 최선의 검증가능한 공정한 무작위성 소스를 제공할 수 있도록 노력하고 있고 앞으로 더 많은 성과가 있을 것으로 기대하고 있습니다.
체인링크 VRF 사용 후 피드백 알려주세요
만약 오늘 보여드린 VRF 기능을 활용하고 싶은 스마트 컨트랙트 개발자라면 저희 개발자 문서 페이지(developer documentation)를 방문해 테스트넷에서 사용해보시고 디스코드(Discord)에서 기술 관련 대화를 함께 나눠보아요.
저희는 현재 체인링크VRF 보안 검토 마지막 단계를 진행 중이고 개발자 커뮤니티 및 학술 커뮤니티에 계신 유저분들과 더 많은 소통을 하고 싶습니다. 만약 저희 VRF 접근법에 대해 피드백이 있으시거나 개선점을 위한 제안을 해 주실 수 있다면 이메일([email protected])을 통해 연락 주세요.
저희는 현재 함께 일 할 코어 팀원을 찾고 있습니다! 현실 세계에 존재하는 많은 문제를 해결할 수 있는 안전하고 신뢰할 수 있는 스마트 컨트랙트를 만들고 지원하는 것에 관심이 있는 분들이라면 저희 직원 채용 페이지(Careers page)에서 더 알아보세요.
체인링크에 대해 더 전반적으로 알고 싶은 분들은 체인링크 홈페이지(Chainlink website)를 방문해주시거나 체인링크 트위터(Twitter)또는 레딧(Reddit)을 팔로우해주세요.