본문 바로가기

기술

블록체인 환경에서 난수 생성 - 1

 앞서 포스팅을 했듯이 블록체인에서 난수생성은 어려운 문제다. 기존의 블록체인에서의 난수 생성 방식은 대부분 해쉬값을 스마트 컨트랙에 보내고(commit) 시드를 보내서(reveal) 난수를 생성하는 방법이 가장 직관적이다. 이 방식을 commit and reveal 이라 하는데 대표적인게 RANDAO 이고 Siginidice 은 변형이라고 볼 수 있다. commit and reveal의 단점은 아래와 같다.

  • 난수 생성에 발생하는 비용이 오라클 보다 큼 
  • 저장 공간이 발생하게 됨 (메모리도 비용)
  • 장애로 인해 난수 생성 비용을 모두 의도하지 않게 날릴 수 있음 

 기존의 블록체인들은 마이너가 블록에 들어가는 모든 값들을 미리 알 수가 있다. 블록을 생성한 후 마이너가 예측할 수 없는 시드를 하나씩 추가해주는 식으로 블록을 설계하면 난수를 생성하는데 충분한 도움이 될 수 있다. 예를 들어 10초에 하나씩 블록이 생성되는 블록체인에 블록이 생성된 지 1~2초 정도 뒤에 시드가 트랜잭션 혹은 파라미터 값으로 추가되면 해당 시드를 이용해 난수를 만들고 검증하는 것이 가능해진다. 스마트 컨트랙은 특정 블록번호에 해당하는 시드로 난수를 발생시키도록 구현하면 된다. 대략 아래와 같은 프로세스를 거친다. 

  1. 특정 블록번호의 난수를 시드로 하는 난수 발생 스마트 컨트랙을 생성 
  2. 참여자들은 해당 스마트 컨트랙에 참여(follow) 
  3. 특정 블록번호에서 생성된 시드를 이용해 스마트 컨트랙은 난수를 생성 
  4. 참여자들은 해당 난수를 수신하여 다음 프로세스를 진행 

 난수를 생성하는 블록체인을 만들면 사실 어렵지 않은 문제이긴 하지만 일단 이러한 체인이 ICO를 받을 수 있을지 모르기 때문에 -_-.. 기존의 블록체인에 난수를 삽입하는 방법을 좀 더 고민할 필요가 있다. 극단적인 방법으론 시드를 블록마다 꾸준히 트랜잭션에 기록해주는 스마트컨트랙이 있으면 좋을 텐데 이 방법은 스마트 컨트랙을 운영하는 주체를 신뢰할 수 있어야 되고 비용이 많이 발생한다. 블록체인은 탈중앙화 시스템을 지향하는 만큼 사용자들의 리소스를 비용으로 지불할 수밖에 없다. 따라서 이 합리적으로 비용을 지불하고, 참여자에게 인센티브를 공평하게 줄 수 있는지의 고민이 필요하다. 

 

 

 

 

'기술' 카테고리의 다른 글

신경망 암호와 ECC  (1) 2019.05.23
RANDAO  (0) 2019.04.15
블록체인에서의 난수 생성  (0) 2019.03.28
탈중앙화(Decentralization)에 관하여  (0) 2019.02.25
블록체인에 대한 단상  (0) 2019.02.20