Crypto (암호화)

← 메인 | English →


API


개요

Sigilaris crypto 패키지는 블록체인 애플리케이션을 위한 고성능 암호화 기본 요소를 제공합니다. secp256k1 타원곡선 암호화(ECDSA)와 Keccak-256 해싱을 지원하며, JVM과 JavaScript 플랫폼 모두에서 일관된 API로 동작합니다.

왜 crypto 패키지가 필요한가? 블록체인 시스템에서는 트랜잭션 서명, 서명 검증, 공개키 복구 등의 암호화 연산이 핵심입니다. 이 패키지는 타입 안전하고 성능 최적화된 방식으로 이러한 연산을 제공합니다.

주요 특징:

빠른 시작 (30초)

import org.sigilaris.core.crypto.*
import scodec.bits.ByteVector

// 키 쌍 생성
val keyPair = CryptoOps.generate()

// 메시지 해싱
val message = "Hello, Blockchain!".getBytes
val hash = CryptoOps.keccak256(message)

// 서명 생성
val signResult = CryptoOps.sign(keyPair, hash)
val signature = signResult.toOption.get

// 공개키 복구
val recovered = CryptoOps.recover(signature, hash)
val publicKey = recovered.toOption.get

// 복구된 공개키가 원본과 동일한지 확인
assert(publicKey == keyPair.publicKey)

이게 전부입니다! crypto 패키지가 자동으로:

문서

핵심 개념

주요 타입

CryptoOps

플랫폼별 암호화 연산 구현:

KeyPair

secp256k1 키 쌍을 나타내는 데이터 타입:

Signature

복구 가능한 ECDSA 서명:

Hash

타입 안전한 Keccak-256 해싱을 위한 타입 클래스:

import org.sigilaris.core.crypto.Hash
import org.sigilaris.core.crypto.Hash.ops.*
import org.sigilaris.core.datatype.Utf8

// UTF-8 문자열 해싱
val utf8Data = Utf8("hello")
val utf8Hash: Hash.Value[Utf8] = utf8Data.toHash

// 커스텀 타입 해싱
case class Order(from: Long, to: Long, amount: Long)
given Hash[Order] = Hash.build[Order]

val order = Order(1L, 2L, 100L)
val orderHash: Hash.Value[Order] = order.toHash

활용 사례

1. 트랜잭션 서명

import org.sigilaris.core.crypto.*
import org.sigilaris.core.codec.byte.ByteEncoder
import org.sigilaris.core.codec.byte.ByteEncoder.ops.*

case class Transaction(from: Long, to: Long, amount: Long, nonce: Long)

val keyPair = CryptoOps.generate()
val tx = Transaction(from = 1L, to = 2L, amount = 100L, nonce = 42L)

// 트랜잭션 인코딩 후 해싱
val txBytes = ByteEncoder[Transaction].encode(tx).toArray
val txHash = CryptoOps.keccak256(txBytes)

// 서명 생성
val signature = CryptoOps.sign(keyPair, txHash).toOption.get

2. 서명 검증

// 서명으로부터 공개키 복구
val recoveredPubKey = CryptoOps.recover(signature, txHash).toOption.get

// 복구된 공개키가 원본 공개키와 일치하는지 확인
val isValid = recoveredPubKey == keyPair.publicKey

3. 타입 안전한 해싱

import org.sigilaris.core.crypto.Hash
import org.sigilaris.core.crypto.Hash.ops.*
import org.sigilaris.core.datatype.Utf8

// UTF-8 문자열 해싱
val data = Utf8("important data")
val dataHash = data.toHash

// 해시 값은 원본 타입 정보를 유지
val hashValue: Hash.Value[Utf8] = dataHash

플랫폼별 구현

JVM (BouncyCastle)

JavaScript (elliptic.js)

보안 고려사항

Low-S 정규화

모든 서명은 자동으로 Low-S 형태로 정규화됩니다 (s ≤ n/2):

상수 시간 비교

비밀 데이터 비교 시 상수 시간 알고리즘 사용:

메모리 위생

비밀 데이터 사용 후 메모리 제로화:

성능 특성

JMH 벤치마크 결과

최근 최적화 결과 (Phase 5):

메모리 사용

확장성

타입 규약

바이트 표현

서명 형식

다음 단계

제한사항

참고자료


← 메인 | English →