오라클 문제

citron03·2022년 3월 22일
0

블록체인

목록 보기
9/19
post-custom-banner
  • 오라클은 Web API나 마켓 데이터 피드와 같은 방식을 통해서 블록체인과 스마트 컨트랙트용 외부 데이터를 검색, 검증하는 것을 의미한다.
    🍺 스마트 컨트랙트에서 요구하는 데이터의 종류로 가격 정보, 난수 생성, 날씨 정보 등이 있을 수 있다.
  • 오라클은 특정 정보에 대해서 데이터 자원을 쿼리하고, 블록체인과 외부 데이터간의 인터페이스를 제공하는 것으로 구성된다.
    🥤 그 결과로 스마트 컨트랙트는 외부 데이터로부터 오는 특정 정보에 의해서 실행될 수 있다.
    🥤 외부에서 오는 데이터는 블록체인이나 스마트 컨트랙트처럼 deterministic(결정적)이지 않다.

오라클은 외부에서 오는 비결정적인 정보를 블록체인이 이해하고, 특정 조건에서 실행할 수 있도록 해주는 가교 역할을 한다.

오라클 문제

  • 오라클 문제는 서드 파티 오라클과 스마트 컨트랙트의 무신뢰성 실행간 보안, 인증, 신뢰 충돌 문제에 관한 것이다.

  • 스마트 컨트랙트는 주어진 데이터에 따라서 계약을 이행할지 결정할 뿐이고, 데이터에 대한 자체적인 판단을 하는 기능은 없다.
    🍛 스마트 컨트랙트로 들어온 데이터의 신뢰도, 출처가 불명확할 수 있다.
    🍛 출처가 명확해도 외부 데이터를 가져오는 과정에서 해커에 의해서 위변조가 일어날 수 있다.
    🍛 위와 같은 이유로, 데이터 자체에 대한 신뢰성이 의심받을 수 있다.

  • 대표적인 오라클 문제로 난수 생성 문제가 있는데, 컴퓨터 과학에서 난수를 만들 때, 유사 난수(Pseudo Random)와 진짜 난수(True Random)로 난수의 종류가 나뉜다.

  • 유사 난수는 컴퓨터의 데이터와 알고리즘으로 얻어지고, 특정한 패턴을 가지기에 예측될 수 있다.

  • 진짜 난수는 불확실성을 지닌 외부의 데이터(ex. 외부 소음 등)를 디지털화 하여 난수를 생성해 무작위성을 확보한다.
    🍢 컴퓨터 외부의 데이터를 가져왔기에, 조작할 수 없고 예측할 수 없다.

블록체인에서 난수 생성 문제

  • 블록체인에서 난수를 생성하기 위한 데이터로 물리 현상, 여러 사용자가 가져온 데이터, 또는 블록체인 내부의 값을 사용하는 경우를 생각할 수 있다.
  • 하지만, 위의 경우의 수는 모두 자신에게 유리한 값이 나오도록 난수 생성을 조작할 수 있다.
    🍦 물리 현상을 반복적으로 관찰하거나, 다른 사용자의 데이터를 참고하여 자신에게 유리한 값을 내는 데이터를 보낼 수 있다.
    🍦 블록체인의 해시값은 이전 블록의 해시값을 참조하기에 채굴 노드가 자신에게 유리한 블록 해시 값이 나올 때 까지 해시 값을 조작할 수 있다.
  • 블록체인에서는 모든 노드들이 트랜잭션을 검증할 때, 데이터의 무결성을 보장하기에, 블록체인에서 일어나는 모든 동작은 결정적인 방식으로 일어난다.
    🍩 하지만, 난수 생성에서 결정적이면 예측이 가능하고 그렇기에 조작할 수 있다.
    🍩 따라서, 블록체인에서 난수 생성은 결정적이면 안된다.
  • 블록체인에서 난수 생성을 할 때는 이 난수 값이 정말 조작되지 않았음을 증명할 있어야 한다.

블록체인에서 난수 생성

Commit Reveal Scheme

  • 여러 사용자가 가져온 값을 사용하여 난수를 만든다.

  • 하지만, 다른 사용자가 보낸 값을 알면 조작의 가능성이 있기에 스마트 컨트랙트를 사용하여 서로의 값을 모른채로 값을 제출하게 한다.

🍥 자신이 보내려는 값을 암호화하고, 일정 금액의 토큰을 예치금으로 스마트 컨트랙트에 보낸다.
🍥 일정 기간이 지나면, 참여자들은 자신이 제출하려 했던 값(원래 값)을 스마트 컨트랙트에 보내고, 스마트 컨트랙트는 원래 값을 암호화하여 이전에 보냈던 암호화된 값과 비교한다.
🍥 값이 다르면 유효성 검사를 통과하지 못하고, 올바른 값을 보내면 토큰(예치금)을 돌려준다.
🍥 스마트 컨트랙트는 받은 값들로 난수를 생성한다.

  • 위와 같은 유효성 검사 과정으로 난수값을 조작할 수 없음을 증명한다.

BLS Scheme

  • 임계값 서명의 한 종류로, N명의 사용자가 개인키 S를 쪼개어 가지고 있는다.

  • 난수를 생성해야할 때 참여자들이 각자 자신이 가지고 있는 개인키 조각을 제출한다.

  • 이때, 개인키를 k명 이상 제출하면, k개의 개인키 조각으로 난수를 생성한다.

  • Commit Reveal Scheme는 한 두명이 정직하지 않으면, 난수 생성이 불가능해질 수 있다.

  • 하지만, BLS Scheme은 k명의 사람이 정직하면 난수를 생성할 수 있다.

참고 자료 출처 : 코드 스테이츠

profile
🙌🙌🙌🙌
post-custom-banner

0개의 댓글