- 오라클은 Web API나 마켓 데이터 피드와 같은 방식을 통해서 블록체인과 스마트 컨트랙트용 외부 데이터를 검색, 검증하는 것을 의미한다.
🍺 스마트 컨트랙트에서 요구하는 데이터의 종류로 가격 정보, 난수 생성, 날씨 정보 등이 있을 수 있다.- 오라클은 특정 정보에 대해서 데이터 자원을 쿼리하고, 블록체인과 외부 데이터간의 인터페이스를 제공하는 것으로 구성된다.
🥤 그 결과로 스마트 컨트랙트는 외부 데이터로부터 오는 특정 정보에 의해서 실행될 수 있다.
🥤 외부에서 오는 데이터는 블록체인이나 스마트 컨트랙트처럼 deterministic(결정적)이지 않다.
오라클 문제는 서드 파티 오라클과 스마트 컨트랙트의 무신뢰성 실행간 보안, 인증, 신뢰 충돌 문제에 관한 것이다.
스마트 컨트랙트는 주어진 데이터에 따라서 계약을 이행할지 결정할 뿐이고, 데이터에 대한 자체적인 판단을 하는 기능은 없다.
🍛 스마트 컨트랙트로 들어온 데이터의 신뢰도, 출처가 불명확할 수 있다.
🍛 출처가 명확해도 외부 데이터를 가져오는 과정에서 해커에 의해서 위변조가 일어날 수 있다.
🍛 위와 같은 이유로, 데이터 자체에 대한 신뢰성이 의심받을 수 있다.
대표적인 오라클 문제로 난수 생성 문제가 있는데, 컴퓨터 과학에서 난수를 만들 때, 유사 난수(Pseudo Random)와 진짜 난수(True Random)로 난수의 종류가 나뉜다.
유사 난수는 컴퓨터의 데이터와 알고리즘으로 얻어지고, 특정한 패턴을 가지기에 예측될 수 있다.
진짜 난수는 불확실성을 지닌 외부의 데이터(ex. 외부 소음 등)를 디지털화 하여 난수를 생성해 무작위성을 확보한다.
🍢 컴퓨터 외부의 데이터를 가져왔기에, 조작할 수 없고 예측할 수 없다.
- 블록체인에서 난수를 생성하기 위한 데이터로 물리 현상, 여러 사용자가 가져온 데이터, 또는 블록체인 내부의 값을 사용하는 경우를 생각할 수 있다.
- 하지만, 위의 경우의 수는 모두 자신에게 유리한 값이 나오도록 난수 생성을 조작할 수 있다.
🍦 물리 현상을 반복적으로 관찰하거나, 다른 사용자의 데이터를 참고하여 자신에게 유리한 값을 내는 데이터를 보낼 수 있다.
🍦 블록체인의 해시값은 이전 블록의 해시값을 참조하기에 채굴 노드가 자신에게 유리한 블록 해시 값이 나올 때 까지 해시 값을 조작할 수 있다.- 블록체인에서는 모든 노드들이 트랜잭션을 검증할 때, 데이터의 무결성을 보장하기에, 블록체인에서 일어나는 모든 동작은 결정적인 방식으로 일어난다.
🍩 하지만, 난수 생성에서 결정적이면 예측이 가능하고 그렇기에 조작할 수 있다.
🍩 따라서, 블록체인에서 난수 생성은 결정적이면 안된다.- 블록체인에서 난수 생성을 할 때는 이 난수 값이 정말 조작되지 않았음을 증명할 있어야 한다.
여러 사용자가 가져온 값을 사용하여 난수를 만든다.
하지만, 다른 사용자가 보낸 값을 알면 조작의 가능성이 있기에 스마트 컨트랙트를 사용하여 서로의 값을 모른채로 값을 제출하게 한다.
🍥 자신이 보내려는 값을 암호화하고, 일정 금액의 토큰을 예치금으로 스마트 컨트랙트에 보낸다.
🍥 일정 기간이 지나면, 참여자들은 자신이 제출하려 했던 값(원래 값)을 스마트 컨트랙트에 보내고, 스마트 컨트랙트는 원래 값을 암호화하여 이전에 보냈던 암호화된 값과 비교한다.
🍥 값이 다르면 유효성 검사를 통과하지 못하고, 올바른 값을 보내면 토큰(예치금)을 돌려준다.
🍥 스마트 컨트랙트는 받은 값들로 난수를 생성한다.
임계값 서명의 한 종류로, N명의 사용자가 개인키 S를 쪼개어 가지고 있는다.
난수를 생성해야할 때 참여자들이 각자 자신이 가지고 있는 개인키 조각을 제출한다.
이때, 개인키를 k명 이상 제출하면, k개의 개인키 조각으로 난수를 생성한다.
Commit Reveal Scheme는 한 두명이 정직하지 않으면, 난수 생성이 불가능해질 수 있다.
하지만, BLS Scheme은 k명의 사람이 정직하면 난수를 생성할 수 있다.
참고 자료 출처 : 코드 스테이츠