9. 보안 설계

9.1 빌드 보안

최상위 빌드 스크립트에서 보안 플래그를 전역 설정하여, 하위 11개 모듈 전체에 자동 적용.

컴파일러 보안

  • 버퍼 오버플로우 런타임 탐지 — 표준 라이브러리 함수(memcpy, strcpy 등)의 버퍼 크기를 컴파일 타임에 파악하고, 런타임에 초과 시 프로세스를 즉시 중단

  • 스택 카나리 강화 — 함수 프롤로그에 무작위 값(카나리)을 삽입하여, 스택 버퍼 오버플로우 공격이 리턴 주소를 덮기 전에 탐지. strong 모드는 배열이나 주소 참조가 있는 함수에 모두 적용

  • 스택-힙 충돌 방지 — 스택을 한 번에 크게 키워서 힙 영역을 침범하는 Stack Clash 공격을 차단. 스택 확장 시 페이지 단위로 probe를 삽입하여 가드 페이지를 건너뛸 수 없게 한다

  • 제어 흐름 무결성 — 간접 호출(함수 포인터, 가상 함수)과 리턴 주소를 하드웨어 수준에서 검증하여 ROP/JOP 공격을 차단. Intel CET(Shadow Stack + IBT)를 활용

  • 위치 독립 코드 — 모든 코드를 PIC로 생성하여 ASLR(주소 공간 배치 무작위화)의 효과를 극대화. 공격자가 메모리 주소를 예측할 수 없게 한다

  • 포맷 스트링 보안 — printf 계열 함수에서 사용자 입력이 포맷 문자열로 사용되는 경우를 경고가 아닌 컴파일 에러로 처리하여, 포맷 스트링 공격을 빌드 단계에서 원천 차단

  • STL 컨테이너 범위 검사 — vector, string 등 STL 컨테이너의 인덱스 접근에 범위 검사를 활성화하여, 범위 초과 접근 시 즉시 abort

링커 보안

  • Full RELRO — GOT(Global Offset Table)를 읽기 전용으로 설정하고, 프로그램 시작 시 모든 심볼을 즉시 resolve함. GOT 덮어쓰기를 통한 함수 하이재킹 공격을 차단

  • 스택 실행 방지 — 스택 영역에 실행 권한을 제거하여, 스택에 주입된 셸코드가 실행되지 못하게 한다

  • 텍스트 재배치 차단 — 코드 세그먼트에 쓰기 가능한 재배치를 금지하여, 공유 라이브러리의 코드 영역이 변조되지 않도록 보호

  • 심볼 하이재킹 방지 — 여러 오브젝트에서 동일 심볼이 정의될 때 경고를 발생시켜, 악의적 심볼 교체를 탐지

릴리즈 빌드 추가 조치

  • 디버그 심볼 제거로 바이너리 역분석 난이도 상승

  • RPATH를 실행 파일 기준 상대 경로로 고정하여 라이브러리 경로 조작 방지

9.2 암호화 보안

RSA-4096 키 쌍              충분한 키 길이
SHA-256 이중 해싱            주소 생성 시
HMAC-SHA256                  메시지 인증
Base58Check                  체크섬으로 주소 오류 검출
Zip Bomb 방어                압축해제 64MB 제한

9.3 런타임 보안

Arith 오버플로 검사          금액 계산 시 uint64_t 범위 초과 방지
서명 중복 검사               윈도우 기반 서명 추적
TOCTOU 해소                  이중 지불 원자적 검사
globalSpentKeys              크로스-주소 이중소비 차단

9.4 직렬화 안전성

libubmstype.sodescribe() 자기서술 패턴은 직렬화와 역직렬화를 동일한 선언에서 자동 생성함. 이로 인해 역직렬화 경로에서 발생할 수 있는 보안 위협이 프레임워크 수준에서 차단.

벡터 크기 상한 검사          비정상 크기 패킷에 의한 메모리 폭주 방지
버퍼 경계 검사               읽기 범위를 초과하는 접근 차단
enum fallback 처리           정의되지 않은 값에 대한 안전한 기본값 적용
수동 파싱 코드 제거          개발자 실수에 의한 역직렬화 취약점 원천 차단

P2P 환경에서 악의적 패킷이 유입되는 것을 전제로 설계되었으며, 대부분의 프로젝트에서 사후 패치로 추가되는 역직렬화 안전성이 여기서는 구조적으로 내장되어 있다.

9.5 테스트 인프라

모듈별 단위 테스트가 GTest 기반으로 구성되어 있으며, 약 5,800줄 규모의 테스트 코드가 존재. 현재 대규모 리팩토링 진행으로 일부 테스트가 갱신 대기 상태이며, 코드 안정화에 따라 순차적으로 복구 예정.


10. 설계 장점 요약

10.1 캐시 설계

  • 3계층 캐시 + TX풀을 단일 잠금로 통합하여 원자적 상태 검사 보장

  • 롤백이 O(1) (차분 popBack 한 번)으로, 비트코인 DisconnectBlock과 다른 접근

  • 확정 데이터 커밋은 10블록마다 일괄 처리로 DB 쓰기 증폭 최소화

  • 블록차분으로 변경분만 격리하여 원자적 적용/취소가 가능

  • 소비 UTXO 사전수집으로 DB 이관 시 인덱스 고아 원천 방지

  • owner/miner/txaddr 3종 인덱스로 주소별 조회 O(N) 달성

  • TOCTOU 회피: 원자적 검사 함수 6종으로 이중지불을 구조적으로 차단

  • TX풀 전역 소비키로 크로스-주소 이중소비 공격 O(1) 탐지

10.2 I/O 설계

  • io_uring의 최신 기능(multishot, zero-copy, provided buffers)을 적극 활용

  • 참조 카운팅 + 세대 번호로 비동기 환경에서 안전한 메모리 관리

  • Backpressure 제어로 메모리 폭주 방지

10.3 동시성 설계

  • 공유 잠금으로 읽기 다중화, 조회 병목 제거

  • 공유 포인터 원자적 교체로 잠금 없는 읽기 (현재 블록, 블록풀 등)

  • 워커 큐 패턴으로 각 기능이 독립 스레드에서 동작

  • 신호-슬롯으로 모듈 간 느슨한 결합

10.4 데이터 설계

  • UTXO 모델로 잔액 계산이 명확하고 검증이 용이

  • describe() 기반 직렬화로 JSON/바이너리 이중 포맷 자동 지원

  • owner/miner/txaddr 역인덱스로 주소별 조회 최적화

  • txid가 타임스탬프 prefix라서 별도 시간 인덱스 없이 최신순 조회 가능

10.5 네트워크 설계 (특허 기술)

  • 결정론적 2D 격자 배치로 모든 노드가 동일 토폴로지를 재현

  • 아핀 편향 기반 3경로 라우팅으로 장애/혼잡/검열 내성 확보

  • 지향성 가십으로 전통 가십 대비 전송량 1/13 수준으로 감소

  • 전통 가십 대비 성능: 경로 전파 336 vs 전통 가십 399,000 (N=10,000)

  • 독자 DHT(아웃바운드 전용 버킷)로 중앙 서버 없이 피어 발견

  • 토폴로지 3초마다 재계산으로 네트워크 적응성

10.6 경제 설계 (토크노믹스)

  • Shifted Sigmoid 곡선 보상으로 대형 스테이커 독식 방지, 소액 스테이커 공정 보장

  • 채굴자 5% + 스테이커 95% 온체인 자동 분배

  • PoB 5단계 유통인 수수료 분배 (60/20/10/7/3%)로 네트워크 성장 인센티브

  • 동적 수수료: EF=v/v0×CFEF=v/v0​​×CF — 외부 시장가 기반 합리적 수수료

  • 소각(burn) 메커니즘: max⁡(0.01,min⁡(1,N/10,000))max(0.01,min(1,N/10,000))으로 공급 자동 조절

  • 2단계 반감기 스케줄 (초반 540블록 급감소 + 후반 210,240블록 4년 주기)


11. 데이터 구조 핵심

UBMS::S_BLOCK (블록)

hash, previousHash, merkleHash, height, nonce, difficulty
transaction[], stakeReward[]
.
.
.

UBMS::S_TRANSACTION (트랜잭션)

type (NONE/LOCK/UNLOCK/REFERRAL)
txid, address, signature, publicKey
in[], out[], referral
.
.
.

UBMS::S_UTXO (미사용 출력)

txid, index, amount, owner
stake (NONE/LOCK/UNLOCK + minerAddress)
ubms (메타, TTL, 조건)
.
.
.

UBMS::BlockDelta (블록차분)

height, hash, previousHash
addedUtxo{}, spentKeys{}, spentUtxoInfo{}
transactions[], addedReferrals[]
.
.
.