Understand Sui Security
이 페이지는 Sui가 보안 측면에서 제공하는 주요 보장(gaurantees)에 대한 개요를 제공한다.
Sui 자산 소유자와 스마트컨트랙트 설계자는 여기서 자산을 보호하기 위한 메커니즘과 Sui가 제공하는 보증에 대해 학습할 수 있다. 스마트컨트랙트 설계자는 또한 Sui를 활용해 설계한 자산 타입이 자산 보유자에게 안전한 경험을 제공하는 Sui의 전반적인 보안 아키텍처에 대해 학습할 수 있다.
Security features
Sui는 자산 소유자에게 매우 높은 보안 보장을 제공하도록 설계되었다. 오딧(audit) 할 수 있는 기 정의된 스마트컨트랙트의 로직에 따라 수이 내의 자산은 소유자만 사용 할 수 있고, Sui를 운영하는 일부 validator가 프로토콜을 올바르게 따르지 않더라도 네트워크는 이를 올바르게 운영 할 것이다.
Sui 시스템의 보안 기능은 다음과 같은 점을 보장한다.
- 소유 자산(owned asset)의 소유자(owner)만이 이 자산에 대해 작동하는 transaction을 승인할 수 있다. 승인은 자산 소유자만이 아는 개인 서명 키(private signature key)를 사용하여 수행된다.
- 모든 사람은 공유 자산(shared asstets)이나 불변 자산(immutable assets)을 실행할 수 있지만, 스마트 컨트랙트에 의해 추가적인 접근 통제 로직이 구현될 수 있다.
- transaction은 해당 자산 유형을 정의한 스마트 컨트랙트 생성자가 설정한 사전에 정의된 규칙에 따라서 자산에 대해 작동한다. 이러한 규칙은 Move 언어를 사용하여 표현된다.
- transaction이 확정되면, 그 효과들(즉, 거래가 처리하는 자산의 변경 사항이나 새롭게 생성된 자산)은 영구적으로 기록되며, 그 결과로 생긴 자산들은 추가적인 처리를 위해 사용 가능하게 된다.
- Sui 시스템은 독립적인 validator들의 집합 사이의 프로토콜을 통해 작동한다. 그러나 validator의 작은 하위 집합이 프로토콜을 따르지 않더라도, 시스템의 모든 보안 속성은 보존된다.
- 어떤 자산이든 올바르게 처리되었음을 확인하기 위해 수이 내의 모든 작업들은 오딧될 수 있다. 이는 Sui 상의 모든 작업이 모두에게 보이게 되며, 사용자는 개인 정보 보호를 위해 여러 다른 주소를 사용하고자 할 수 있음을 의미한다.
- Validator는 Sui 토큰을 하나 이상의 validator에게 잠그고 위임하는 Sui 사용자를 통해 주기적으로 결정된다.
Security architecture
Sui 시스템은 transaction을 처리하는 validator 집합에 의해 운영된다. 이들은 시스템에 제출 후 처리된 유효한 transaction에 대해 합의에 도달할 수 있도록 하는 Sui 프로토콜을 구현한다.
Sui가 사용하는 합의 프로토콜은 비잔틴 장애 내성 전파(Byzantine fault tolerant broadcast) 및 합의(consensus)를 통해 일부 validator가 Sui 프로토콜을 올바르게 따르지 않더라도 이를 허용한다. 구체적으로, 각 validator는 사용자가 자신의 Sui 토큰을 사용하여 이들에게 스테이킹 혹은 투표하는 과정을 통해 할당된 일부 투표권을 가진다. Sui는 스테이킹량의 2/3 이상이 프로토콜을 따르는 validator에게 할당된 경우에 모든 보안 속성을 유지한다. 그러나, 더 많은 validator가 결함(faulty)이 있어도 여러 audit 속성은 유지된다.
Addresses and ownership
Sui transaction은 해당 transaction이 작동하는 모든 소유 자산의 소유자가 자신의 개인 서명 키로 디지털 서명해야만 유효하며 진행될 수 있다. 이 서명 키는 사용자가 비공개로 유지할 수 있으며 다른 누구와도 공유되지 않는다. 결과적으로, 모든 validator가 프로토콜을 따르지 않더라도, 다른 어떤 주체(party)도 감지되지 않은 채 사용자의 소유 자산을 실행하는 것은 불가능하다.
개인 서명 키는 사용자에게 자산을 보내거나 스마트 컨트랙트가 맞춤형 접근 통제 로직을 정의할 수 있도록 사용되는 Sui 네트워크 상의 공개 주소에 해당한다. 사용자는 편의 또는 개인 정보 보호 이유로 여러 서명 키에 해당하는 하나 이상의 주소를 가질 수 있다. 주소는 어떠한 사전 등록도 필요하지 않으며, 자산을 주소로 보내면 네트워크 상에 이 주소가 자동으로 생성된다. 그러나 이는 사용자가 전송의 수신자 주소나 다른 작업에 관련된 당사자를 주의 깊게 확인해야 함을 의미한다. 왜냐하면 잘못된 주소로 자산을 보내는 것은 돌이킬 수 없는 영향을 미칠 수 있기 때문이다.
Smart contracts define asset types and their logic
모든 자산은 Sui 스마트 컨트랙트 내에 정의된 유형을 가진다. Sui는 SUI 네이티브 토큰(native token)을 관리하는 데 사용되는 것과 같은 몇 가지 시스템 컨트랙트를 제공하지만, 또한 누구든지 맞춤형 스마트 컨트랙트를 작성하고 제출할 수 있도록 허용한다. 한 자산 유형에 대한 transaction은 해당 자산 유형을 정의한 스마트 컨트랙트 내에 정의된 작업만을 호출할 수 있으며, 해당 컨트랙트 내의 로직에 의해 제약을 받는다.
이러한 이유로, 사용자는 자신이 신뢰하거나 신뢰할 수 있는 다른 이들이 오딧한 스마트컨트랙트를 사용하여, 그 계약이 자산 운영을 위해 정의한 로직을 이해한 상태에서 자산을 관리하는 것이 권장된다. Sui 스마트 컨트랙트는 제3자가 이를 audit할 수 있도록 하고 보장을 높이기 위해 이들의 수정을 방지하도록 불변 자산으로 정의된다.
Move 스마트 컨트랙트 언어는 audit과 검증의 용이성을 염두에 두고 설계되었다. Move 스마트 컨트랙트 소개에 관심이 있을 수 있다.
공유 자산은 여러 사용자가 transaction을 통해 작동할 수 있도록 허용한다. 이는 그들의 소유 자산뿐만 아니라 하나 이상의 공유 자산을 포함할 수 있다. 이러한 공유 자산은 공유 자산의 유형을 정의한 스마트 컨트랙트에 따라서, 서로 다른 사용자들 사이를 안전한 방식으로 중재하는 프로토콜을 구현하는 데 사용되는 데이터와 로직을 나타낸다. Sui는 모든 사용자가 공유 자산을 포함하는 transaction을 생성할 수 있도록 허용한다. 그러나 스마트 컨트랙트 유형은 어떤 주소와 어떻게 공유 자산이 사용될 수 있는지에 대한 추가적인 제한을 정의할 수 있다.
Transaction filnality
모든 validator에게 제출된 유효한 transaction은 인증(certified)되어야 하며, 이 인증서(certificate) 또한 최종 확정을 위해 모든 validator에게 제출되어야 합니다. 일부 validator가 프로토콜을 따르지 않더라도, transaction은 Sui 프로토콜을 정확하게 따르는 나머지 validator를 통해 최종 확정될 수 있다. 이는 Sui 프로토콜에 의해 정의된 전파(broadcast) 및 합의(consensus)를 위한 암호학적 비잔틴 저항 내성 합의 프로토콜을 사용하여 달성된다. 이러한 프로토콜은 safety, 즉 잘못된 validator가 옳은 클라이언트에게 잘못된 상태를 납득시킬 수 없음을 의미하며, liveness, 즉 잘못된 validator가 transaction 처리를 방해할 수 없음을 의미하는 두 가지를 모두 보장한다.
Sui의 모든 transaction은 Sui에 의한 처리 비용을 충당하기 위해 가스 자산(gas asset)과 연관되어야 한다. 유효한 transaction은 실행 성공 또는 실행 중단을 야기할 수 있다. 실행은 자산을 정의하는 스마트 컨트랙트 내의 조건으로 인해, 또는 실행 비용을 지불하기에 충분한 가스가 부족하여 중단될 수 있다. 성공한 경우에는 작업의 효과가 최종 확정된다. 그렇지 않으면, transaction 내의 자산 상태는 변경되지 않는다. 하지만 시스템 전체에 대한 서비스 거부 공격을 완화하기 위해, 가스 자산에는 항상 일정량의 가스가 청구된다.
사용자 클라이언트는 transaction 및 인증서를 제출하는 과정을 직접 수행하거나, transaction을 제출하고 validator와 상호 작용하기 위해 제3자 서비스에 의존할 수 있다. 이러한 제3자는 사용자 개인 서명 키를 가질 필요가 없으며 사용자를 대신하여 transaction을 위조할 수 없다. 이들은 transaction의 확정성과 그 효과를 증명하는 validator로부터의 서명 집합을 통해 transaction이 최종 확정되었음을 사용자 클라이언트에게 재확인시켜 줄 수 있다. 그 시점 이후에 사용자는 transaction이 초래한 변경 사항이 Sui의 상태에 지속될 것을 확신할 수 있다.
Auditing and privacy
Sui validator는 사용자 본인이 저장한 모든 자산과 이러한 자산에 대한 transaction의 기록을 읽을 수 있는 기능을 제공한다. validator는 또한 자산 상태에 기여한 transaction의 전체 체인에 대한 암호학적 증거를 제공한다. 사용자 클라이언트는 이러한 증거 체인을 요청하고 검증하여 모든 작업이 정확했으며 validator 간의 집단적 합의의 결과임을 확인할 수 있다. 하나 이상의 validator의 상태를 미러링하는 전체 복제본을 운영하는 서비스는 이러한 audit를 일상적으로 수행한다.
Sui의 공개 audit 가능성(public auditability)은 또한 Sui 내의 모든 transaction과 자산이 공개적으로 보이게 됨을 의미한다. 자신의 개인 정보 보호에 유념하는 사용자는 어느 정도의 가명성(pseudonymity)을 활용하기 위해 여러 주소를 사용하거나, 제3자의 보관 또는 비보관 서비스를 사용할 수 있다. 추가적인 암호학적 개인 정보 보호를 제공 하는 특정 스마트 컨트랙트는 제3자에 의해 제공될 수도 있다.
Censorship-resistance and openness
Sui는 정립된 Delegated Proof-of Stake 모델을 사용하여 주기적으로 자신의 validator 집합을 결정한다. 사용자는 각 에포크에 자신의 SUI 토큰을 잠그고 위임하여 다음 에포크에 Sui 네트워크를 운영할 validator 위원회(committee)를 결정할 수 있다. 최소 금액 이상의 위임된 스테이크를 가진 누구든지 Sui validator를 운영할 수 있다.
validator는 네트워크를 운영하며, gas fee 수입을 통해 자신들을 validator로 지원하기 위해 자신의 Sui를 스테이킹하는 사용자에게 보상을 제공한다. 신뢰성이 낮은 validator와 그들에게 지분을 위임한 사용자는 더 낮은 보상을 받을 수 있다. 하지만 사용자 지분는 악의적인 validator나 네트워크의 누구에게서도 압수될 수 없다.
이 매커니즘은 validator가 Sui 사용자에게 책임을 지도록 보장하며, 유효한 transaction을 검열하려는 시도를 발견하는 것을 포함하여 신뢰성 부족이나 잘못된 행동의 첫 징후에서 교체될 수 있도록 한다. validator의 선택과 그들이 운영하고자 하는 프로토콜을 통해, Sui 사용자는 Sui 시스템의 미래 발전에 대해서도 의미 있는 발언권을 가진다.
Further reading
Sui 보안의 기저에 있는 컴퓨터 과학에 대한 심층적인 기술적 설명을 찾고 있다면, Sui Smart Contracts Platform에 대한 우리의 백서를 참고하라.