컨텐츠 바로가기

06.03 (월)

이슈 주목받는 블록체인 기술

해커 공격 막을 랜덤오라클, 블록체인 복권에 탑재된다

댓글 첫 댓글을 작성해보세요
주소복사가 완료되었습니다
매일경제

<이미지를 클릭하시면 크게 보실 수 있습니다>


체인링크가 해커의 ‘랜덤 값 추측 공격’에 맞설 수 있도록 랜덤기능을 강화한 오라클 랜덤 생성기 ‘체인링크 VRF’를 최근 공개했다. 체인링크 VRF는 복권 디파이앱인 ‘풀투게더’에도 탑재되면서 관심을 끌고 있다. ‘풀투게더’는 랜덤 오라클이 제공하는 랜덤 값을 토대로 매주 복권 당첨자를 선출하게 된다.

*오라클 : (블록체인, 프로그램 등에서 데이터가 옳은지 그른지 판단하는 기술) 블록체인의 외부에 존재하는 날씨, 금융 정보 등의 외부 데이터를 블록체인 내부로 가져와 사용할 수 있도록 하는 기능. 랜덤 오라클이란 블록체인 바깥에서 생성한 랜덤 값을 블록체인 안으로 가져오는 기술이다.

*VRF : (랜덤 기술) 생성된 랜덤 값의 유효성을 공개키를 사용해 누구나 검증할 수 있도록 투명성을 높인 ‘검증 가능한 랜덤 기능’을 뜻한다. 영지식증명의 권위자 실비오 미칼리가 1999년 제안했다. 블록체인에선 검증자 역할을 스마트 컨트랙트가 수행하게 된다.

블록체인에서 누구도 예측 불가능한 안전한 랜덤 기능을 구현하는 건 난제로 꼽힌다. 현 블록체인의 랜덤 기능은 소프트웨어로 구현한 ‘유사랜덤'기능으로 결과값에도 중복이 발생하거나 다음 값의 패턴이 유추되는 등 취약점이 존재한다. 이를 악용해 비트코인, 이더리움의 갬블링 앱에서 공격자가 랜덤수를 추적해 다음 숫자를 예상하고 상금을 여러 번에 걸쳐 모두 가로채간 경우도 있었다. 실제로 주사위 갬블링 앱으로 유명한 이오스플레이(EOSPlay)에서도 해커가 랜덤 값을 추측해 11만 달러(한화 약 1억3천만원)을 작년 가로채 간 바 있다.

대부분의 스마트 컨트랙트, 디앱 등에서 사용되는 난수는 해시 함수와 다른 변수를 엮어서 만든다. 이를 유사 랜덤 함수라고 부른다. 여기엔 예측을 어렵게 하기 위해 블록 해시값과 타임스탬프 등 여러 변수를 조합해 사용한다. 이 중에서 해시 함수는 ‘무한한 입력값이 들어오면 어떤 공간은 둘 이상 같이 사용하게 된다’는 ‘비둘기집 원리’에 의해 결과값에 중복이 애초에 발생할 수밖에 없다. 이는 랜덤 함수의 취약점으로 작용하기도 한다.

때문에 블록체인에서 랜덤 기능은 해시 함수의 이 같은 충돌을 최대한 억제하는 방향으로 발달하고 있다. 특히 랜덤넘버제너레이션(RNG)과 같은 외부 라이브러리, 오라클 솔루션을 사용해 랜덤 값을 추출하면 기본 내장된 해시 함수만 사용하는 경우보다 충돌 저항성을 더욱 높일 수 있어 효과적이다. 이더리움 커뮤니티에선 탈중앙화자율조직(DAO) 구성원들이 참여해 랜덤 값을 생성하는 라이브러리인 란다오(RANDAO)가 유명하다.

이번에 공개된 ‘체인링크 VRF’는 랜덤 값을 오프체인에서 생성해 오라클을 거쳐 이더리움으로 가져오는 방식으로 작동한다. 랜덤 값 자체는 애플리케이션 시드 값과 오프라인 장부의 특정 에셋 값을 넣고 조합해 생성하는 방식으로 크게 다르지 않다. 다만 랜덤 값을 연산하는 과정에 타원곡선 암호화(ECC) 방식을 추가적으로 구현해 넣어 타원곡선의 대칭성에서 발생하는 랜덤 값 중복을 억제하고 검증 과정도 손쉽게 개선했다. 체인링크는 블로그 글을 통해 “스마트 컨트랙트에 랜덤 값과 사용자의 공개키를 입력하면 랜덤 값이 유효한지 곧장 검증할 수 있도록 개선했다”고 설명했다.

장성균 블로코 사외이사는 “블록체인에서 랜덤 값을 구현하는 기능은 항상 이슈가 될 수밖에 없다. 랜덤 값을 유니크하게 만들기 위해선 충돌을 방지할 수 있는 기술적인 솔루션이 크게 필요하기 때문”이라고 말했다. 그는 “특히 ‘랜덤 오라클’과 같은 기능은 외부에서 랜덤 값을 생성하기에 디파이 등 디앱과 애초에 분리돼 있어 해시의 충돌 저항성을 높여 서비스의 무결성과 보안성을 끌어올릴 수 있어 꼭 필요할 것”이라고 말했다.

[강민승 D.STREET(디스트리트) 기자]

[ⓒ 매일경제 & mk.co.kr, 무단전재 및 재배포 금지]
기사가 속한 카테고리는 언론사가 분류합니다.
언론사는 한 기사를 두 개 이상의 카테고리로 분류할 수 있습니다.