Sui는 암호화의 유연성을 염두에 두고 기본 기술을 설계했습니다. 이 시스템은 여러 암호화 알고리즘과 암호화 프리미티브(암호화 프리미티브)를 지원하며 이들 간에 빠르게 전환할 수 있습니다. 개발자는 시스템에 대해 최상의 암호화(공개 키 암호화)를 선택할 수 있을 뿐만 아니라 최신 알고리즘(사용 가능한 알고리즘)을 구현할 수도 있습니다.
Sui는 공개 키, 서명, 집계 서명 및 해시 함수와 같은 암호화 프리미티브를 저장소 전체에서 공유되는 통합 유형 별칭 또는 열거형 래퍼 아래에서 정의합니다. 이러한 프리미티브를 변경하면 애플리케이션의 모든 구성 요소에 영향을 미칩니다. 개발자는 애플리케이션 암호를 신속하게 업데이트하고 통합 보안을 보장할 수 있습니다.
현재 Sui는 실행 트랜잭션 끝점을 통해 다음 사용자 트랜잭션 서명 체계를 지원합니다.
1.Pure Ed 25519
2.Secp 256 k 1 ECDSA
사용자 계정 키 쌍의 인터페이스 구현
아래는 Sui의 키 쌍 표현 데모입니다. 새로운 서명 체계로 확장하는 것은 쉽습니다.
1. enum(enum 클래스)에 추가
2. fastcrypto 라이브러리에 정의된 KeyPair 특성 구현

사용자 서명은 연결된 서명 체계를 식별하는 추가 1바이트 플래그를 확장하여 직렬화됩니다. Sui 팀은 Multiformats(자체 설명 데이터를 위한 프로토콜) 사용을 고려했지만 가변 플래그 길이 특성으로 인해 직렬화 문제가 발생했습니다. 대신 Sui는 싱글바이트 제로 시작 플래그 모델을 사용합니다. 서명 체계 및 해당 플래그는 다음과 같이 정의됩니다.

사용자가 서명된 트랜잭션을 제출하면 트랜잭션 실행에서 다음 매개변수를 지정합니다.
BSC(Binary Canonical Serialization)는 트랜잭션 바이트를 Base 64로 직렬화합니다.
"ed 25519" 또는 "secp 256 k 1"로 전달할 수 있는 서명 체계 플래그(서명 체계 식별)
공개 키의 Base 64 형식
체계에 해당하는 서명의 Base 64
다음 코드는 서명된 트랜잭션을 실행하고 curl은 성공하면 인증서와 트랜잭션 결과를 반환합니다.

다음 코드는 Sui의 전체 노드가 API 요청 필드를 직렬화된 서명 플래그 || 서명 || pubkey로 어셈블하고 실행 전에 확인 확인을 수행하는 방법을 보여줍니다.

Sui가 서로 다른 서명 체계를 지원하는 이유 분석
secp 256k 1 타원 곡선을 사용하는 ECDSA는 비트코인, 이더리움 및 기타 암호화폐에서 널리 채택됩니다. 사용자는 임계값 서명(국내 암호화에서 "임계값 암호 시스템의 임계값 서명"으로 번역됨) 및 다중 서명과 같은 기존 지갑 및 에스크로 키 관리 도구를 활용하기를 원하기 때문에 이 서명 체계를 선호할 수 있습니다. 또한 클라우드 인프라 및 하드웨어 보안 모듈(암호화 시스템 영국 하드웨어 지갑 등과 같은 일반적인 것)과 더 나은 호환성을 가지며 메시지 및 서명 페이로드에서 공개 키 복구를 지원합니다.
한편, Ed 25519는 결정론적 빠른 서명과 단순화된 수학을 특징으로 하는 보다 현대적인 서명 체계입니다. Typescript SDK는 두 서명 체계를 모두 지원하지만. 그러나 Sui는 권장 Sui 지갑 알고리즘으로 여전히 Ed 25519를 선택합니다.
Sui는 다양한 서명 체계를 지원하기 때문에 현재 네이티브 모바일 및 미래 암호화의 핵심인 secp 256 r 1 곡선(NIST-P 256이라고도 함)을 사용하여 나중에 ECDSA와 같은 체계를 추가하는 데 거의 노력이 필요하지 않습니다. 반드시 지원되어야 하는 곡선이며 커뮤니티에서 일반적으로 요청하는 기능이기도 합니다.
이 유연한 서명 체계에 대한 지원은 또한 Sui 시스템이 안전하지 않은 null 서명 체계에 대해 벤치마킹될 수 있도록 합니다. Sui와 같이 빠르게 실행되는 시스템의 경우 서명 및 확인의 병렬 설계는 블록 수준뿐만 아니라 트랜잭션 수준에서도 발생하며 암호화 유연성을 통해 Sui는 암호화 작업이 시스템에 가져오는 오버헤드를 확인할 수 있습니다. 이러한 벤치마크 결과를 통해 Sui는 병목 현상과 최적화 방향을 식별할 수 있었습니다.
권한 부여 키 쌍
Sui(유효성 검사자 세트)에 대한 권한은 세 가지 다른 키 쌍을 보유합니다.
프로토콜 키 쌍 프로토콜 키 쌍
계정 키 쌍 계정 키 쌍
네트워크 키 쌍 네트워크 키 쌍
프로토콜 키 쌍 프로토콜 키 쌍
프로토콜 키 쌍은 사용자가 서명한 트랜잭션이 확인되면 인증된 서명을 제공합니다. Sui는 사용자 트랜잭션에 대한 서명을 제공하는 기관의 비율이 요구되는 2/3 임계값을 초과할 때 트랜잭션을 실행합니다. BLS 12381 체계는 현재 지정된 수의 기관에 대한 집계 서명을 신속하게 확인하기 위해 선택됩니다. 특히 각 개별 공개 키가 96바이트이고 서명이 48바이트인 minSig BLS 모드를 사용하기로 결정했습니다. 후자는 일반적으로 유효성 검사기가 각 에포크가 시작될 때 키를 한 번 등록한 다음 지속적으로 트랜잭션에 서명하기 때문에 중요합니다. 따라서 Sui는 최소 서명 크기를 최적화합니다.
알아채다! BLS 체계를 사용하여 독립적인 서명을 집계하여 단일 BLS 서명 페이로드를 생성할 수 있습니다. Sui는 또한 서명의 검증자를 나타내기 위해 서명을 비트맵(비트맵)과 함께 집계합니다. 이는 기관의 서명 크기를 (2f + 1) × BLS_sig 크기에서 단 하나의 BLS_sig 페이로드로 효과적으로 줄이며, 결과적으로 유효성 검사기 세트 크기와 관계없이 트랜잭션 인증서를 압축하는 네트워크 오버헤드 이점이 있습니다.
키 자료 유형 별칭은 리포지토리 전체에서 사용되는 단일 위치에 중앙 집중화됩니다. 실제로 별칭 변경(매개변수 직렬화 및 전달 시 집계 서명 코드에서 별칭 매개변수 변경)만으로 프로토콜 키의 Sui가 Ed 25519에서 BLS 12381로 전환되었습니다.

BLS 12381 집계 서명에 대한 잠재적인 악성 키 공격을 해결하기 위해 기관 등록 중에 KOSK(키 지식 증명)가 사용됩니다. 소유권 증명은 권한이 유효성 검사기 집합에 추가되도록 요청할 때 제출되고 확인됩니다. 프로토콜 키 kosk || 프로토콜 공개 키 || sui 주소를 확인합니다. 대부분의 표준과 달리 Sui의 지식 증명 체계는 주소에도 적용되어 다른 악의적인 유효성 검사기에서 유효성 검사기의 BLS 키를 악의적으로 재사용하는 것에 대한 추가 보호를 제공합니다.
집계된 서명은 다음 두 가지 상황에서 유용합니다.
쿼럼 드라이버가 여러 기관에서 반환된 SignedTransactions에서 CertifiedTransaction을 형성하는 경우
기관이 SignedCheckpointSummary를 형성하면 각 기관은 체크포인트 콘텐츠에 서명합니다.
계정 키 쌍 계정 키 쌍
규제 기관에서 스테이킹 보상 지급을 받는 데 사용하는 계정은 Ed 25519를 서명 체계로 사용하는 계정 키 쌍으로 보호됩니다.
네트워크 키 쌍 네트워크 키 쌍
프라이빗 키는 Narwhal 기본 및 해당 작업자 네트워크 인터페이스에 대해 QUIC에서 요구하는 TLS 핸드셰이크를 수행하는 데 사용됩니다. 공개 키는 노드 ID를 확인하는 데 사용되며 Ed 25519는 서명 체계로 사용됩니다.
해싱 및 인코딩 유연성
현재 Sui의 기본 해시 함수는 sha 3256이며 벤치마크는 sha 256 및 blake 2/blake 3 제품군과 비교하기 위해 실행되고 있습니다. 인코딩 유연성을 지원하기 위해 Base 64 및 Hex는 fastcrypto의 인코딩 기능을 base 64 ct::Base 64 및 hex와 해당 사용자 지정 직렬화 및 유효성 검사를 둘러싼 래퍼로 정의합니다. 특히, a) 일정한 시간이고 b) 디코딩 시 가단성 공격을 방지하기 위해 깨진 인코딩을 명시적으로 거부하기 때문에 가장 인기 있는 기본 64 Rust 크레이트 대신 기본 64ct 크레이트가 선택되었습니다. Sui의 연구 팀 구성원은 최근 대부분의 base 64 디코더 라이브러리에서 놀라운 확장성 문제를 보고하여 암호화 및 보안 분야 최고의 컨퍼런스 중 하나인 AsiaCCS 2022에서 Best Poster Award를 수상했습니다.
다음 코드 스니펫은 래퍼 구조가 fastcrypto에서 구현되는 방식을 보여줍니다.

암호화의 유연성은 암호화 추세를 따릅니다.
키 쌍, 서명 및 해시 함수 측면에서 암호화 유연성을 갖춘 Sui는 라이브러리 선택, 기본 서명 체계, 인코딩 및 해시 함수에 편리합니다. 이를 통해 라이브러리에 발견된 취약점이 있거나 스키마에 버그가 있는 경우 Sui를 신속하게 업데이트할 수 있을 뿐만 아니라 선택한 암호화 프리미티브를 매개변수로 기반으로 전체 시스템을 벤치마킹할 수 있습니다.


