
packed attestation과 문서화된 Windows/Entra 상호운용성을 갖춘 실험적 RP2040 FIDO2/WebAuthn 인증기
Karaaslan Labs의 실험적 오픈소스 RP2040 FIDO2/WebAuthn 인증기 엔지니어링 및 상호운용성 프로젝트.
상태: 엔지니어링/연구 프로젝트. FIDO Alliance 인증을 받지 않았습니다. 상용 고보증 보안 토큰이 아닙니다.
KL Security Key는 polhenarejos/pico-fido의 선별된 파생 프로젝트입니다. 이 프로젝트는 저비용 RP2040 보드가 물리적 WebAuthn 인증기로서 어디까지 활용될 수 있는지 탐구하며, 동시에 아이덴티티, 증명(attestation), 검증 증거 및 신뢰 경계를 명확히 유지합니다.
| 영역 | 현재 엔지니어링 기준 |
|---|---|
| 하드웨어 | RP2040 USB 개발 보드 |
| 전송 | USB FIDO HID |
| CTAP/GetInfo 버전 | FIDO_2_0, FIDO_2_1, FIDO_2_3 |
| 사용자 존재 / 검증 | 물리 버튼 + PIN/UV 지원 |
| 증명(Attestation) | Packed ES256, x5c, 기기별 인증서 |
| AAGUID | d9359dc7-6938-5822-b951-006507247d8f |
| 상호운용성 | Windows WebAuthn + 테넌트 로컬 Microsoft Entra 검증 |
| 배포 | 소스 우선; KL 펌웨어 바이너리 릴리스 없음 |
| 보안 요소 | 없음 |
| 인증 | FIDO Alliance 인증 없음 |
이 프로젝트는 실용적인 질문에서 시작되었습니다: 저렴한 개발 보드가 엔지니어링 타협을 숨기지 않으면서 실제 WebAuthn 로그인에 사용할 수 있는 물리적 보안 키가 될 수 있을까?
흥미로운 작업은 단순히 RP2040에서 FIDO2를 실행하는 것이 아니었습니다. 더 어려운 부분은 인증기 아이덴티티, 물리적 사용자 존재, 증명(attestation), Windows 동작, 재현 가능한 소스 변경, 신뢰 당사자(relying-party) 상호운용성, 그리고 증거가 무엇을 증명하고 무엇을 증명하지 않는지 정확히 아는 것이었습니다.
MicrosoftCtapHidProvider.U2fProtocol=false로 관찰된 CTAP2 경로.Entra 결과는 상호운용성 결과이며, Microsoft 인증이나 전역 인증기 인정이 아닙니다. 정확한 경계는 docs/interoperability-case-study.md를 참조하십시오.
flowchart LR
RP["Relying party / Microsoft Entra"] --> WA["Browser + Windows WebAuthn"]
WA --> CTAP["CTAP2 over USB HID"]
CTAP --> KEY["KL Security Key<br/>RP2040"]
KEY --> AT["Packed ES256 attestation<br/>device-specific key + x5c"]
AT --> ROOT["KL Security Key Root CA"]
검증된 런타임은 의도적으로 좁습니다: FIDO HID가 보안 키 인터페이스이며, 관련 없는 키보드/CCID 스타일 런타임 인터페이스는 KL 레퍼런스 프로필의 일부가 아닙니다.
git clone --recurse-submodules https://github.com/karaaslanlabs/kl-security-key.git
cd kl-security-key
export PICO_SDK_PATH=/path/to/pico-sdk
export PICO_TOOLCHAIN_PATH=/path/to/arm-none-eabi-toolchain
./scripts/build-kl-reference.sh
빌드는 물리적 사용자 존재 강제, FIDO 전용 런타임 프로필 및 packed 증명 경로를 활성화합니다. 유효한 증명 키/인증서 자료는 별도로 프로비저닝해야 합니다; 개인 증명 키는 이 저장소에서 게시되거나 자동 프로비저닝되지 않습니다.
이 저장소는 다음을 주장하지 않습니다:
레퍼런스를 엔지니어링/연구 인증기 이상으로 취급하기 전에 THREAT-MODEL.md를 읽으십시오.
| 문서 | 목적 |
|---|---|
docs/architecture.md | 런타임 프로필, 소스 레이아웃 및 엔지니어링 경계 |
docs/attestation-and-pki.md | AAGUID, packed 증명 및 PKI 모델 |
docs/validation-evidence.md | 물리적 레퍼런스 및 선별된 소스 검증 증거 |
docs/interoperability-case-study.md | 신뢰 당사자 / Microsoft Entra 상호운용성 증거 및 한계 |
docs/windows-webauthn-debugging.md | 증거 기반 Windows/WebAuthn 디버깅 워크플로 |
THREAT-MODEL.md | 위협 모델 및 보안 비주장 사항 |
UPSTREAM.md | 업스트림 출처 및 파생 변경 사항 |
SECURITY.md | 취약점 보고 및 보안 정책 |
pico-keys-sdk 서브모듈은 알려진 업스트림 커밋에 고정되어 있습니다. KL 관련 SDK 변경은 scripts/apply-sdk-overlay.py에 의해 적용되며, 이 스크립트는 정확한 커밋에 고정되어 있고 예상치 못한 소스 상태에서 fail-closed 방식으로 동작합니다.
이 공개 저장소는 KL Security Key 레퍼런스 경로를 중심으로 의도적으로 선별되었습니다. 관련 없는 상속된 연구 산출물 및 레거시 릴리스 헬퍼는 게시된 KL 표면의 일부가 아닙니다; 업스트림 출처는 UPSTREAM.md 및 Git 이력에 계속 문서화되어 있습니다.
USB 아이덴티티/배포 요구 사항이 미해결 상태인 동안 바이너리 배포는 의도적으로 초기 게시 대상이 아닙니다. 소스, 문서 및 검증 방법론이 주요 산출물입니다.
공개 증명 루트 인증서는 certs/KL-Security-Key-Root-CA-v1.cert.pem에서 확인할 수 있습니다. 개인 루트/기기 키는 절대 게시되지 않습니다.
기여는 작고, 감사 가능하며, 보안 영향을 명확히 밝히는 경우 환영합니다. CONTRIBUTING.md부터 시작하십시오. 패치되지 않은 취약점에 대해서는 공개 이슈를 열지 마십시오; SECURITY.md를 따르십시오.
KL Security Key는 polhenarejos/pico-fido에서 파생되었으며 polhenarejos/pico-keys-sdk를 사용합니다. 소스는 GNU Affero General Public License v3.0에 따라 유지됩니다; LICENSE, NOTICE.md 및 UPSTREAM.md를 참조하십시오.
Karaaslan Labs는 업스트림 Pico FIDO / Pico Keys SDK 작업의 저작권을 주장하지 않습니다. 원본 고지는 보존되며 KL 관련 수정 사항은 별도로 문서화됩니다.
범위가 정해진 WebAuthn/passkey 디버깅 또는 FIDO2 인증기/증명 엔지니어링 문의는 [email protected]으로 연락하십시오.
유료 디버깅 서비스: https://www.upwork.com/services/product/development-it-get-expert-webauthn-passkey-and-fido2-authentication-debugging-2106330281996723797. 이 서비스는 소프트웨어/인증 엔지니어링을 다룹니다; 물리적 KL Security Key는 판매용으로 제공되지 않습니다.
Karaaslan Labs: https://karaaslanlabs.com