Sui 의 암호화: 지갑 사양

Sui 는 사용자가 계정 키를 관리하는 수단으로 암호화폐 업계에서 널리 통용되는 지갑 사양을 따릅니다.

Sui 의 암호화: 지갑 사양

Sui 는 다음과 같이 암호화폐 업계에서 널리 통용되는 지갑 사양을 따릅니다. BIP-32 (및 그 변형, SLIP-0010), BIP-44BIP-39. 이러한 사양은 암호화폐 업계에서 사용자가 계정 키를 관리하기 위한 수단으로 널리 사용되고 있습니다.

현재 Sui 에서는 Ed25519 또는 ECDSA Secp256k1을 사용하여 서명된 트랜잭션을 수락합니다. Sui 지갑과 SDK에서는 다양한 서명 체계로 트랜잭션에 서명할 수 있는 유연한 인터페이스를 제공합니다.

이러한 사양을 정확히 어떻게 적용하는지 자세히 살펴보겠습니다.


키 파생 체계

Sui 는 ECDSA Secp256k1 서명 체계를 지원하는 지갑을 관리하기 위해 BIP-32를 따릅니다.

BIP-32는 키 집합을 논리적으로 연결하기 위해 계층적 결정론적 지갑 구조를 정의합니다. 이러한 방식으로 키를 그룹화하면 사용자의 많은 개인 키를 추적하는 데 드는 오버헤드를 줄일 수 있습니다. 또한 이 방법을 사용하면 관리자가 하나의 제어 소스에서 각 사용자 계정에 대해 고유한 관리 주소를 발급할 수 있습니다.

BIP-32를 사용하면 개인 키 파생과 공개 키 파생이 분리되어, 공개 키와 해당 주소의 체인을 파생하고 개인 키는 서명을 위해 오프라인에 보관할 수 있는 시계 전용 지갑 사용 사례가 가능해집니다.

Sui 는 Ed25519(EdDSA) 서명 체계를 지원하는 지갑을 관리하기 위해 SLIP-0010을 따릅니다.

BIP-32는 원래 소수 차수 그룹을 가진 ECDSA용으로 설계된 반면, Ed25519 곡선은 h × ℓ의 그룹 차수를 기반으로 하기 때문에 SLIP-0010을 사용합니다. 여기서 h는 작은 계수이고 ℓ는 252비트 소수입니다. 고급 기술 세부 사항이지만, Ed25519 서명 표준은 개인 키의 하위 비트와 상위 비트 모두에 비트 클램핑을 적용하기 때문에 일부 BIP-32 모드는 Ed25519와 호환되지 않습니다. 따라서 SLIP-0010은 기존 사용자의 공개 키에서 새로운 공개 키를 파생하는 것을 금지하도록 지정합니다. SLIP-0010은 소위 "강화된" 개인 부모 키에서 개인 자식 키로 파생하는 것만 지원합니다.

키 파생 경로

BIP-32는 계층 구조로 지갑의 레벨을 지정하는 반면, BIP-44는 파생 경로의 다섯 가지 레벨을 정확한 의미와 함께 추가로 정의합니다: m / 목적' / 코인 유형' / 계정' / 변경 / 주소_색인. 이 구조에서 슬래시는 계층 구조의 새로운 수준 또는 하위 수준을 나타냅니다.

목적 수준은 일반적으로 BIP 번호에 해당하는 44로 설정됩니다. 그러나 Sui 에서 목적 수준은 서로 다른 서명 체계를 구분합니다: 44는 Ed25519에 대해 설정되고 54는 ECDSA Secp256k1에 대해 설정됩니다. 목적 수준을 44가 아닌 값으로 설정하는 것은 비표준이지만, 목적 필드를 사용하여 서로 다른 서명 체계를 구분하는 것이 일반적입니다. 예를 들어 BIP-49와 BIP-84는 비트코인에서 스크립트 유형을 식별하는 데 사용됩니다. 저희는 비트코인 표준과의 혼동을 피하기 위해 54 미만의 기존 BIP가 없으므로 54를 선택하여 ECDSA Secp256k1을 표시했습니다.

The 코인 유형 값은 다른 모든 암호화폐의 저장소와 함께 관리됩니다. 두 서명 체계 모두 Sui의 등록된 코인 유형784(전화 키패드에서는SUI )로 문의하세요.

전화 키패드.png

The 계정_인덱스 수준은 일반적으로 사용자 계정을 논리적으로 분리하고 특정 계정 카테고리를 만드는 데 사용됩니다. 몇 가지 일반적인 사용 사례는 다음과 같습니다:

  • 관리자는 여러 사용자 계정을 관리합니다.
  • 사용자는 기부, 저축, 비용 등 특정 목적을 위해 계정을 지정할 수 있습니다.

다중 계정을 지원하려면 0부터 계정_인덱스 수준을 높이는 것이 좋습니다.

그것은 일반적으로 인정되는 계정 기반 통화는 처음 세 단계만 정의합니다, UTXO 기반 통화 는 변경 및 주소 레벨 정의를 추가합니다. Sui 의 객체 지향 데이터 모델은 UTXO도 아니고 계정 기반도 아니기 때문에(실제로는 두 가지를 모두 결합) 호환성을 극대화하기 위해 다섯 가지 레벨을 모두 사용합니다.

요약하자면:

 

파생 경로 양식

참고

Ed25519m/44'/784'/{계정}'/{변경}'/{주소}'파생 경로의 각 레벨이 강화됩니다.
ECDSA Secp256k1m/54'/784'/{계정}'/{변경}/{주소}처음 세 단계는 강화됩니다.


니모닉 지원

시드에서 마스터 키를 도출하는 결정론적 방법을 정의한 후, 니모닉을 사용하여 시드를 사람이 더 읽기 쉽고 기억하기 쉽게 만들기 위해 BIP-39를 도입했습니다. Sui 에서 12, 15, 18, 21, 24개의 단어를 허용합니다. 단어 목록 에서 128, 160, 192, 224, 256 비트의 엔트로피에 해당하는 적절하게 체크섬된 12, 15, 18, 21, 24개의 단어를 허용합니다.

키 관리 Sui

Sui 를 통해 키 쌍 생성 및 관련 니모닉을 지원합니다. 타입스크립트 SDK 및 명령줄 인터페이스(CLI)를 통해 키쌍 생성과 니모닉을 지원합니다. SDK는 트랜잭션 서명 및 RPC 통합을 포함한 추가 기능을 제공합니다.

여기서는 방법을 설명합니다:

  • 니모닉에서 키 쌍 도출하기
  • 주소 얻기
  • 직렬화된 타이핑된 트랜잭션(또는 모든 데이터)에 서명하는 데 사용합니다.
  • RPC 공급자에 대해 실행
Typescript SDK
import { Ed25519Keypair, JsonRpcProvider, RawSigner } from '@mysten/sui.js';
const TEST_MNEMONICS = 'a 12-24 word mnemonics strings separated by space, from the wordlist';
// Create a keypair under Ed25519 scheme.
const keypair_ed25519 = Ed25519Keypair.deriveKeypair(TEST_MNEMONICS, "m/44'/784'/0'/0'/0'");
// Create a keypair under ECDSA secp256k1 scheme.
const keypair_secp256k1 = Secp256k1Keypair.deriveKeypair(TEST_MNEMONICS, "m/54'/784'/0'/0/0");
// Create a signer with the keypair with a provider.
const signer = new RawSigner(
 keypair_ed25519, // or use keypair_secp256k1 for ECDSA secp256k1
 new JsonRpcProvider('<https://gateway.devnet.sui.io:443>')
);
// Get the address.
const address = signer.getAddress();
console.log('address', address);
// Sign some random data.
const signData = new Base64DataBuffer(
 new TextEncoder().encode('hello world')
);
const { signature, pubKey } = await signer.signData(signData)
console.log('signature', signature);
// Sign a typed data, i.e. a transfer object.
const transferTxn = await signer.transferObject({
 objectId: '0x5015b016ab570df14c87649eda918e09e5cc61e0',
 gasBudget: 1000,
 recipient: '0xd84058cb73bdeabe123b56632713dcd65e1a6c92',
});
console.log('transferTxn', transferTxn);


명령줄 인터페이스


# Import mnemonics to sui.keystore with a scheme and a derivation path. 
sui keytool import "SOME_MNEMONICS" ed25519 "m/44'/784'/0'/0'/0'" 
2022-09-13T20:34:31.672453Z  INFO sui::keytool: Key imported for address [SOME_ADDRESS]
sui keytool import "SOME_MNEMONICS" secp256k1 "m/54'/784'/0'/0/1"
2022-09-13T20:37:06.849647Z  INFO sui::keytool: Key imported for address [SOME_ADDRESS]
# Generate random mnemonics and save to sui.keystore with a scheme and a derivation path. 
sui client new-address ed25519 "m/54'/784'/0'/0'/1'"
Created new keypair for address with scheme Secp256k1: [SOME_ADDRESS]
Secret Recovery Phrase : [SOME_MNEMONICS]
sui client new-address secp256k1 "m/54'/784'/0'/0/1"
Created new keypair for address with scheme Secp256k1: [SOME_ADDRESS]
Secret Recovery Phrase : [SOME_MNEMONICS]
# Set the generated address to active in keystore.
sui client switch --address 0x8e2591958b19311ece3d748852f4693908be8b3c
# Get some gas objects.
sui client gas --address 0x8e2591958b19311ece3d748852f4693908be8b3c
                Object ID                  |  Gas Value
----------------------------------------------------------------------
0xba561fb82aa38075be60c0fad30e0c6b615c0f2e |  10000000
# Transfer an object to another address, signed with the active address in keystore. Success!
sui client transfer --gas-budget 1000 --to 0x1f7633037b5e185e162f51fca142fb6e8ebe50df --object-id 0xba561fb82aa38075be60c0fad30e0c6b615c0f2e
Transfer confirmed after 494589 us
----- Certificate ----
Transaction Hash: f4ntyDJrO7HfAiZtit1zprhqftyOj5nvpo+WitB5IEU=
Transaction Signature: AA==@G7ur/HpC3AuOmyeLBFtccptvstApuDEGChsHKzasF+JJvPg+B+jmRTvfkL8E2ACpW7DD4E83Hom8YOs2EzNXDw==@6TODHwm39WE6p+z1ulDzlbZdTA/i31ZHKIsAc5u7kNw=
Signed Authorities Bitmap: RoaringBitmap<[0, 1, 3]>
Transaction Kind : Transfer Object
Recipient : 0x1f7633037b5e185e162f51fca142fb6e8ebe50df
Object ID : 0xba561fb82aa38075be60c0fad30e0c6b615c0f2e
Version : SequenceNumber(2)
Object Digest : H60tIWie9FU/BfyYDmrMgrlltQA5A/4S5YP6lITbwqs=
----- Transaction Effects ----
Status : Success
Mutated Objects:
 - ID: 0xba561fb82aa38075be60c0fad30e0c6b615c0f2e , Owner: Account Address ( 0x1f7633037b5e185e162f51fca142fb6e8ebe50df )
 - ID: 0xbf8112a6abee9fd77fda6529aa0ec97fc735791a , Owner: Account Address ( 0x8e2591958b19311ece3d748852f4693908be8b3c )


최첨단 월렛 빌딩

지갑은 안전하면서도 소유자가 쉽게 액세스할 수 있어야 합니다. 저희는 업계 표준에 따라 사용자 지갑을 설계하는 한편, 다양한 서명 체계를 민첩하고 유연하게 탐색하고 있습니다.

현재 지원되는 지갑 사양 외에도, 저희는 Sui 와 더 안전하고 쉽게 상호작용할 수 있도록 지갑 디자인을 지속적으로 혁신하고 있습니다. 곧 지갑 사전 승인 거래에 대한 디자인을 공유할 예정입니다. Sui 지갑은 한 번에 하나씩 거래에 서명하는 대신 온체인 게임을 실용적으로 만들어 Sui 네트워크에서 빠른 실행의 잠재력을 최대한 발휘할 수 있도록 합니다.