업데이트로 돌아가기
New releaseSep 19, 2026

wolfCOSE v2.0.0

임베디드 시스템을 위한 빠르고, 이식성이 뛰어나며, 가벼운 COSE + CBOR 구현체입니다. PQC, FIPS 140-3, DO-178 및 MISRA C를 지원합니다. wolfSSL 기반입니다.

공유

wolfCOSE

wolfCOSE는 핵심 CBOR 및 COSE 표준을 구현한 경량 고속 C 라이브러리로, 암호화를 위해 wolfSSL을 기반으로 합니다.

지원 표준 및 RFC

  • 핵심 사양:
    • RFC 8949 - Concise Binary Object Representation (CBOR)
    • RFC 9052 - CBOR Object Signing and Encryption (COSE)
    • RFC 9053 - COSE algorithms
    • RFC 9864 - Fully-Specified Algorithms for JOSE and COSE
    • RFC 9338 - COSE Countersignatures
  • 양자 내성 암호:
  • 증명(Attestation):
    • RFC 9783 - PSA Attestation Token Profile of EAT

주요 기능

  • 완전한 COSE 제품군 (RFC 9052): COSE_Sign1, COSE_Encrypt0, COSE_Mac0을 포함한 6가지 메시지 유형 모두를 완벽하게 지원합니다.
  • V2 카운터서명 (RFC 9338): 6가지 태그된 COSE 메시지 유형 모두에 대해 전체 및 축약형 인플레이스 카운터서명을 지원합니다.
  • 양자 내성 암호:
    • 모든 보안 수준에서의 ML-DSA (FIPS 204 / RFC 9964).
    • HSS/LMS 상태 기반 해시 서명 (RFC 8778 / CNSA 2.0).
  • 빠른 성능: Intel i9-11950H에서 엔드투엔드 COSE_Sign1은 ES256으로 66,538 sign/s 및 26,437 verify/s에 도달하며, ML-DSA-44로 21,986 sign/s 및 53,686 verify/s를 기록합니다. 성능 및 풋프린트 세부 정보와 wolfCOSE vs. The Field를 참조하세요.
  • PSA 증명: 위임된 HSM 서명 지원을 통한 EAT / PSA 토큰 발급 및 검증.
  • 41가지 암호화 알고리즘: 서명, 암호화, MAC, 키 분배 전반에 걸친 폭넓은 알고리즘 지원.
  • 임베디드 우선 설계: 동적 메모리 할당 없음(힙 없음, .data/.bss 제로). 호출자가 제공한 버퍼에서 동작하며 스택 사용량이 제한적입니다.
  • FIPS 140-3 경로: wolfCrypt (FIPS Certificate #4718)를 유일한 암호화 의존성으로 사용합니다.
  • STM32 통합: STM32CubeMX / IDE용 드롭인 STM32Cube 팩(I-CUBE-wolfCOSE) 제공 (세부 정보).

지원 알고리즘

  • 디지털 서명:
    • 클래식: ESP256, ESP384, ESP512, Ed25519, Ed448, PS256, PS384, PS512
    • 양자 내성: ML-DSA-44, ML-DSA-65, ML-DSA-87
    • 상태 기반 해시: HSS-LMS
  • 암호화 (AEAD):
    • AES-GCM (128 / 192 / 256)
    • AES-CCM (변형)
    • ChaCha20-Poly1305
  • 메시지 인증 (MAC):
    • HMAC-SHA256, HMAC-SHA384, HMAC-SHA512
    • AES-MAC
  • 키 분배:
    • Direct
    • AES Key Wrap
    • ECDH-ES + HKDF

COSE 메시지 유형 (RFC 9052)

wolfCOSE는 모든 RFC 9052 메시지의 단일 액터 및 다중 액터 변형을 모두 구현했습니다:

MessageRFC 9052APIPurpose
COSE_Sign1Sec. 4.2wc_CoseSign1_Sign / wc_CoseSign1_Verify단일 서명자 서명
COSE_SignSec. 4.1wc_CoseSign_Sign / wc_CoseSign_Verify다중 서명자 (동일 페이로드에 대한 독립적 서명)
COSE_Encrypt0Sec. 5.2wc_CoseEncrypt0_Encrypt / wc_CoseEncrypt0_Decrypt단일 수신자 AEAD
COSE_EncryptSec. 5.1wc_CoseEncrypt_Encrypt / wc_CoseEncrypt_Decrypt다중 수신자 (하나의 암호문, Direct / AES-KW / ECDH-ES를 통한 다수 수신자)
COSE_Mac0Sec. 6.2wc_CoseMac0_Create / wc_CoseMac0_Verify단일 수신자 MAC
COSE_MacSec. 6.1wc_CoseMac_Create / wc_CoseMac_Verify다중 수신자 MAC (공유 MAC 키를 수신자에게 분배)
COSE_Key / COSE_KeySetSec. 7wc_CoseKey_Encode / wc_CoseKey_Decode모든 키 유형에 대한 키 직렬화

RFC 9338 카운터서명은 이 표의 모든 태그된 메시지에 첨부할 수 있습니다. wc_Cose_AddCounterSignature() 또는 wc_Cose_AddCounterSignature0()를 사용하여 추가한 다음, 대응하는 wc_Cose_VerifyCounterSignature*() API로 독립적으로 검증하세요.

의존성 (wolfSSL)

wolfCOSE는 암호화 백엔드로 wolfSSL을 필요로 합니다. 최소 지원 버전: v5.8.0-stable. 일부 선택적 알고리즘은 더 최신 릴리스를 필요로 합니다. 기능별 의존성 하한 및 빌드 지침은 시작하기를 참조하세요. HSS/LMS (RFC 8778)는 v5.9.2-stable 이상이 필요합니다.

필요한 알고리즘에 따라 빌드 구성을 선택하세요.

최소 빌드 (ECC + AES-GCM)

COSE Sign1 (ESP256/384/512) 및 Encrypt0 (AES-GCM)을 사용할 수 있습니다:

cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-aesgcm \
            --enable-sha384 --enable-sha512 --enable-keygen
make && sudo make install
sudo ldconfig

활성화되는 알고리즘: ESP256, ESP384, ESP512, AES-GCM-128/192/256

더 작은 wolfCrypt 풋프린트를 원한다면 --enable-cryptonly를 추가하여 TLS 스택을 제거하고 Sign1 + Encrypt0 빌드에서 절대 사용하지 않는 알고리즘을 비활성화하세요:

./configure --enable-cryptonly --enable-ecc --enable-aesgcm \
            --enable-sha384 --enable-sha512 --enable-keygen \
            --enable-lowresource \
            --disable-dh --disable-rsa --disable-aescbc \
            --disable-sha --disable-md5 --disable-chacha --disable-poly1305 \
            --disable-errorstrings

MCU에서 wolfCOSE와 wolfCrypt를 더욱 압축하는 방법은 크기 최적화 및 속도 최적화를 참조하세요.

최소 빌드 (양자 내성 / ML-DSA 전용)

ML-DSA-44/65/87을 사용한 순수 양자 내성 서명의 경우:

cd wolfssl
./autogen.sh
./configure --enable-cryptonly --enable-mldsa
make && sudo make install
sudo ldconfig

활성화되는 알고리즘: ML-DSA-44, ML-DSA-65, ML-DSA-87 (SHAKE-128/256은 --enable-mldsa에 의해 자동으로 포함됩니다. wc_MlDsaKey API는 v5.9.1-stable보다 새로운 wolfSSL이 필요합니다.)

전체 빌드 (모든 알고리즘)

cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-ed25519 --enable-ed448 \
            --enable-curve25519 --enable-aesgcm --enable-aesccm \
            --enable-sha384 --enable-sha512 --enable-keygen \
            --enable-rsapss --enable-chacha --enable-poly1305 \
            --enable-mldsa --enable-lms \
            --enable-hkdf --enable-aeskeywrap
make && sudo make install
sudo ldconfig

빌드

# Core library (libwolfcose.a)
make

# Run unit tests
make test

# Build and run CLI tool round-trip tests (all algorithms)
make tool-test

# Run lifecycle demo (11 algorithms)
make demo

빌드 타겟

TargetDescription
make alllibwolfcose.a 빌드 (핵심 라이브러리만)
make sharedlibwolfcose.so 빌드
make testCBOR 및 COSE 단위 테스트 빌드 + 실행
make pkg-config-testwolfSSL 패키지 검색 및 재정의 확인
make eat-psa-test명시적 전체 RFC 9783 PSA/EAT 적합성 제품군 빌드 + 실행
make eat-psa-min-buffers-testWOLFCOSE_MIN_BUFFERS 제한 타겟 한도로 전체 PSA/EAT 제품군 실행
make eat-psa-config-checkPSA/EAT가 기본적으로 없음을 확인하고 기능 게이트 조합 검증
make psa-eat-lean-verify전체 #tfm 검증 전용 PSA/EAT RFC 벡터 예제 빌드 + 실행
make psa-eat-demo현재 RFC 9783 디바이스 온보딩 토큰 발급, 검증 및 평가
make toolCLI 도구 빌드 (tools/wolfcose_tool)
make tool-test17가지 알고리즘 모두에 대한 왕복 자체 테스트
make demo라이프사이클 데모 빌드 + 실행 (11가지 알고리즘)
make clean모든 빌드 산출물 제거

빠른 시작

예제

완전한 동작 코드는 examples/를 참조하세요:

  • sign1_demo.c, encrypt0_demo.c, mac0_demo.c: 알고리즘 데모
  • lifecycle_demo.c: 전체 엣지-투-클라우드 워크플로
  • comprehensive/: 알고리즘 매트릭스 테스트
  • scenarios/: 펌웨어 서명, 증명, 플릿 구성
  • psa_eat_demo.c: 측정 평가를 포함한 RFC 9783 디바이스 온보딩
  • psa_eat_verify_lean.c: 린 빌드에서의 RFC 9783 현재 프로필 Sign1 검증

CI / 테스트

모든 푸시 및 PR에서 실행됩니다:

  • 빌드 + 테스트: Ubuntu, macOS, GCC 10-14, Clang 14-18
  • 종합 테스트: 약 240가지 알고리즘 조합 테스트
  • 정적 분석: cppcheck, Clang analyzer, GCC -fanalyzer
  • MISRA C 2012: 모든 wolfCOSE 코드 경로를 검사하는 cppcheck --addon=misra
  • MISRA C 2023: 엄격한 GCC 경고 및 clang-tidy (bugprone-*, cert-*, clang-analyzer-*, misc-*)
  • Coverity Scan: 야간 결함 분석
  • 내부 정적 분석: Fenrir wolfssl 고급 정적 분석 도구
  • 코드 커버리지: 모든 wolfCOSE 소스 파일에 대해 100% 라인 커버리지 강제
make coverage                  # Run tests with gcov
make coverage-force-failure    # Include crypto failure path testing

카테고리