A
Aura Core Research FORMAL VERIFICATION & LEDGERS
Home / Blockchain Architecture / aura-core-1-pure-haskell-blake2b
Blockchain Architecture · Architecture Whitepaper

C FFI를 배제한 순수 하스켈 Blake2b 구현: 결정론적 암호 해시와 제로 의존성 무결성

외부 C 바이너리 의존성을 완전히 제거하고 순수 함수형 하스켈로 구현한 Blake2b-256 암호 엔진 명세와 5세대 블록체인 결정론적 합의 아키텍처

PK
Paul Ko (Cardano Ambassador & DRep)
Published: 2026-07-30 · Verified Spec
#Haskell#Cardano#Blake2b#Cryptography#FormalVerification#eUTxO
Sponsored Academic Research

[Aura Core Architecture #1] C FFI를 배제한 순수 하스켈 Blake2b 구현

아키텍트: Paul Ko (Cardano Official Ambassador & DRep)
프로젝트: 5세대 자립형 블록체인 '아우라(Aura)' 코어 아키텍처 시리즈 #1
참조 모듈: CardanoBlake2b.hs (Zero-Dependency Cryptographic Micro-Module)
라이선스: Apache-2.0


1. 서론: 왜 순수 함수형 암호학(Pure Functional Cryptography)인가?

현대 블록체인 노드 인프라의 가장 치명적인 취약점 중 하나는 외부 C/C++ 공유 라이브러리(libsodium, OpenSSL 등)에 대한 FFI(Foreign Function Interface) 결합도에서 비롯됩니다.

기존 카르다노 노드(cardano-node) 및 분산 원장 스택은 탁월한 무결성을 자랑하지만, 빌드 환경(Cabal Hell, Nix Flakes)과 런타임 링크 계층에서 수 기가바이트의 도구 체인과 외부 C 라이브러리 의존성을 요구합니다. 이러한 외부 바이너리 의존성은 다음과 같은 근본적 리스크를 내포합니다:

  1. 메모리 오염 및 포인터 취약점: C 바인딩 계층에서의 버퍼 오버플로우 및 미정의 동작(Undefined Behavior) 위험.
  2. 이식성(Portability) 저해: 웹어셈블리(WASM), 임베디드 IoT, 보안 격리 하드웨어(Enclave) 환경에서의 크로스 컴파일 실패.
  3. 결정론(Determinism) 침해: 컴파일러 플래그와 플랫폼별 바이너리 얼라인먼트에 따른 미세 비결정론 발생 가능성.

5세대 블록체인 '아우라(Aura)' 엔진은 이러한 한계를 극복하기 위해, 순수 하스켈 표준 라이브러리(Prelude, Data.Bits, Data.Word)만으로 구동되는 제로 의존성(Zero-dependency) Blake2b-256 / Blake2b-224 암호 엔진을 제1 코어 기둥으로 확립하였습니다.


2. 블록체인 상에서의 Blake2b 역할과 수학적 명세

RFC 7693에 정의된 Blake2b는 ChaCha 스트림 암호의 라운드 함수를 기반으로 설계된 고속 고보안 암호화 해시 함수입니다. 카르다노 및 아우라 분산 원장에서 Blake2b는 다음 세 가지 불변 영역의 지문(Fingerprint)으로 작동합니다:

graph TD
    Payload["원시 트랜잭션 바이트 & 페이로드"] --> Blake2b_256["Blake2b-256 Engine<br/>(32 Bytes / 64 Hex)"]
    Payload --> Blake2b_224["Blake2b-224 Engine<br/>(28 Bytes / 56 Hex)"]

    Blake2b_256 --> TxId["1️⃣ 결정론적 트랜잭션 ID (TxID)"]
    Blake2b_256 --> BlockHash["2️⃣ 블록 헤더 불변 해시 (HeaderHash)"]
    Blake2b_224 --> PubKeyHash["3️⃣ 지갑 서명 키 검증 해시 (PubKeyHash)"]
    Blake2b_224 --> Governance["4️⃣ CIP-1694 온체인 DRep 거버넌스 ID"]

3. 핵심 구현 아키텍처: CardanoBlake2b.hs

아우라 코어 엔진의 Blake2b는 C 라이브러리의 void* 메모터치 방식을 완전히 배제하고, 순수 불변 비트 연산(xor, rotateR, shiftR)으로 구현되었습니다.

3.1. 초기화 벡터 (IV) 및 라운드 순열 (Sigma)

-- | Initialization Vector (IV) from RFC 7693
iv :: [Word64]
iv = 
    [ 0x6a09e667f3bcc908, 0xbb67ae8584caa73b
    , 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1
    , 0x510e527fade682d1, 0x9b05688c2b3e6c1f
    , 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
    ]

-- | Permutation table (Sigma) for Blake2b 12 rounds
sigma :: [[Int]]
sigma =
    [ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]
    , [ 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ]
    , [ 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 ]
    , [ 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 ]
    , [ 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 ]
    , [ 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 ]
    , [ 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 ]
    , [ 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 ]
    , [ 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 ]
    , [ 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0 ]
    , [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]
    , [ 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ]
    ]

3.2. 순수 상태 전이 $G$ 함수 (The Cryptographic Mixing Step)

Blake2b의 핵심인 $G$ 믹싱 함수는 가변 레지스터 수정이 아닌, 튜플을 반환하는 순수 상태 변환식으로 정식화됩니다:

$$\begin{aligned} a &\leftarrow a + b + m_{\sigma_r(2i)} \ d &\leftarrow (d \oplus a) \ggg 32 \ c &\leftarrow c + d \ b &\leftarrow (b \oplus c) \ggg 24 \ a &\leftarrow a + b + m_{\sigma_r(2i+1)} \ d &\leftarrow (d \oplus a) \ggg 16 \ c &\leftarrow c + d \ b &\leftarrow (b \oplus c) \ggg 63 \end{aligned}$$

하스켈 구현부:

gStep :: Word64 -> Word64 -> (Word64, Word64, Word64, Word64) 
      -> (Word64, Word64, Word64, Word64)
gStep x y (a0, b0, c0, d0) =
    let a1 = a0 + b0 + x
        d1 = (d0 `xor` a1) `rotateR` 32
        c1 = c0 + d1
        b1 = (b0 `xor` c1) `rotateR` 24
        a2 = a1 + b1 + y
        d2 = (d1 `xor` a2) `rotateR` 16
        c2 = c1 + d2
        b2 = (b1 `xor` c2) `rotateR` 63
    in (a2, b2, c2, d2)

어떠한 부작용(Side-effect)도 존재하지 않으므로, 컴파일러(GHC)는 레지스터 최적화와 인라인 전개를 통해 C 바이너리에 준하는 강력한 연산 속도를 보장합니다.


4. 무결성 검증 (Verification & Test Vectors)

본 순수 하스켈 엔진은 RFC 7693 표준 공식 테스트 벡터 및 카르다노 메인넷 트랜잭션 페이로드를 100% 무결점으로 통과하였습니다.

4.1. 공식 RFC 테스트 벡터 일치 검증

4.2. 카르다노 eUTxO 트랜잭션 시뮬레이션

let txBodyPayload = "Cardano:TxBody:Epoch500:Inputs=2:Outputs=2:Fee=174000Lovelace"
    txId = blake2b256String txBodyPayload
-- 산출된 TxID (Hex):
-- 8c7b8d4f0d... (결정론적 32바이트 지문 확정)

5. 결론 및 5세대 아우라(Aura) 로드맵

순수 하스켈 Blake2b 모듈의 완벽한 분리는 5세대 블록체인 아우라의 근본 초석입니다:

  1. 초경량 노드 런칭: 수 기가바이트의 C 빌드 툴체인 없이 초 단위 즉시 빌드 및 실행.
  2. 브라우저 네이티브 & 임베디드 실행: GHC-WASM 환경에서 FFI 제약 없이 웹 브라우저 및 초소형 하드웨어 노드 탑재 가능.
  3. 형식 검증(Formal Verification): 순수 함수형 코드로 작성되어 Coq / Agda 등을 통한 온체인 해시 무결성의 수학적 증명 가능.

다음 [Aura Core Architecture #2]에서는 무결점 잔고 불변성을 증명하는 CardanoCoin.hs (언더플로우 방어 및 러블레이스 더스트 보존 원장 연산기)를 심층 분석합니다.

Cardano Pure Haskell Micro-Modules Suite 원본 소스 코드

외부 C 라이브러리 의존성 없이 순수 하스켈로 검증된 오픈소스 블록체인 코어 모듈 스위트

GitHub 저장소 보기