Latchwire
한국어

오픈 소스 · WireGuard® 호환

VPN 키를 복사할 수 없게 만드세요.

Latchwire는 WireGuard 개인 키를 YubiKey 안에 보관합니다. 키는 카드에서 생성되며 카드를 벗어나지 않습니다. 프로토콜과 서버는 그대로입니다. 카드가 없으면 터널도 없습니다.

사전 출시 버전: macOS 및 Linux용 명령줄

작동 방식

  1. YubiKey에서 키 생성

    펌웨어 5.7 이상의 YubiKey로 keygen을 실행합니다. 키는 카드의 PIV 예비 슬롯(82–95)에 생성되고 다른 슬롯은 그대로 유지됩니다. 공장 설정 상태의 카드는 먼저 PIN과 PUK를 새로 설정합니다.

  2. 공개 키를 서버에 추가

    서버에는 일반 WireGuard 피어로 보이므로 플러그인이나 업데이트가 필요 없습니다. Latchwire는 OPNsense, pfSense, Linux, MikroTik 같은 표준 서버를 위해 만들어졌습니다. 지금까지 종단 간 테스트는 Linux 컨테이너의 테스트 서버로만 진행했습니다.

  3. PIN을 입력하고 연결

    PIN은 카드로 전달되며 저장되지 않습니다. 보통 한 번만 입력하지만, 절전 후나 다른 프로그램이 카드를 초기화하면 다시 묻습니다. 카드를 뽑으면 터널이 닫힙니다. 목표는 2초이며, 모의 카드 테스트에서는 약 1초가 걸렸습니다.

기존 WireGuard와 Latchwire 비교

질문기존 WireGuardLatchwire
개인 키는 어디에 있나요?컴퓨터의 파일YubiKey 안
복사할 수 있나요?예, 흔적 없이아니요. 키를 카드에서 꺼낼 수 없습니다
카드 없이 노트북을 도난당하면?모든 서버에서 키를 교체해야 합니다디스크의 어떤 것으로도 핸드셰이크를 완료할 수 없습니다
컴퓨터에 악성 코드가 있다면?키를 훔쳐 나중에 사용할 수 있습니다카드가 꽂혀 있는 동안 터널을 사용할 수 있지만 키를 가져갈 수는 없습니다
백업파일 사본두 번째 YubiKey를 서버에 두 번째 피어로 추가
서버 측표준 WireGuard동일: 표준 WireGuard
성숙도검증됨, 공식 클라이언트 있음사전 출시 버전

하드웨어

현재 코드에 있는 것은 아래 첫 번째 카드뿐입니다. 라벨이 각각의 상태를 알려 줍니다.

YubiKey 5

v1

X25519를 지원하는 PIV, 펌웨어 5.7 이상. 키는 카드에서 생성되며 카드를 벗어나지 않습니다. 지금까지의 테스트는 모의 카드를 사용했으며, 실제 카드 확인은 아직 끝나지 않았습니다.

OpenPGP 카드

곧 지원

v1 직후로 계획되어 있습니다. 구현되지 않았습니다.

PKCS#11 및 HSM

곧 지원

v1 직후로 계획되어 있으며 X25519 지원 장치용입니다. 구현되지 않았습니다.

TPM, Secure Enclave, FIDO2

로드맵

더 약한 등급으로 v1에 포함되지 않습니다. 키는 하드웨어로 암호화되지만 사용 중에는 메모리에 노출되므로, 이들에는 키를 복사할 수 없다는 주장을 절대 적용하지 않습니다.

보안

이 주장은 키를 가져가는 것에 관한 것이며, 키를 사용하는 것에 관한 것이 아닙니다. 해당하는 범위는 다음과 같습니다.

방어하는 위협

  • 디스크나 백업에서 키 복사: 개인 키는 그곳에 기록되지 않습니다
  • 카드 없이 도난당하거나 디스크 이미지가 복제된 노트북
  • 개인 키가 들어 있는 설정 파일: Latchwire가 거부합니다
  • 카드에서 생성되지 않은 키: Latchwire가 거부합니다
  • 킬 스위치(kill switch)가 켜져 있을 때 트래픽이 터널 밖으로 나가는 것. 한계는 위협 모델을 참고하세요

방어하지 못하는 위협

  • 카드가 꽂혀 있고 PIN이 입력된 동안 사용자 권한으로 실행되는 악성 코드: 카드와 터널을 사용할 수 있습니다. 터치는 필요하지 않습니다
  • PIN 입력 후 카드에 접근할 수 있는 다른 프로그램. 일부 시스템에서는 다른 로컬 사용자도 포함됩니다
  • 침해된 root 계정이나 커널
  • 카드와 PIN까지 함께 도난당한 노트북
  • 프로세스 메모리 읽기: 세션 키와 캐시된 비밀 값이 메모리에 있으며 스왑에 기록될 수 있습니다. 이들은 개인 키가 아니며 카드 없이는 핸드셰이크를 완료할 수 없습니다
  • 위조 토큰: Latchwire는 카드가 보고하는 내용을 신뢰하며 증명(attestation)은 아직 검증하지 않습니다

알아 둘 점

  • PIN은 저장되지 않지만 입력하는 동안 메모리를 거칩니다.
  • 기본 PIN은 절대 시도하지 않습니다.
  • 사전 공유 키를 사용하면 디스크에 저장되며 하드웨어로 보호되지 않습니다.
  • 위협 모델은 각 보호 기능의 근거가 되는 코드를 알려 줍니다. 둘이 다르면 코드가 맞고 문서에 오류가 있는 것입니다.

프로젝트 현황

Latchwire는 사전 출시 소프트웨어입니다. 현재 있는 것과 확인된 것은 다음과 같습니다.

  • Linux 명령줄과 네트워크

    권한 있는 컨테이너에서 소프트웨어 키와 테스트 서버로 종단 간 테스트를 마쳤습니다.

    테스트됨
  • macOS 명령줄과 네트워크

    구현되었습니다. 수동 확인은 아직 끝나지 않았습니다.

    미검증
  • 실제 YubiKey 동작

    자동 테스트는 모의 카드를 사용합니다. 실제 카드 확인은 아직 끝나지 않았습니다.

    미검증
  • Windows

    구현되지 않았습니다. Windows 빌드는 아직 컴파일되지 않습니다.

    준비 안 됨
  • 데스크톱 앱

    개발 중입니다. 현재는 명령줄만 있습니다.

    준비 안 됨
  • 서명된 릴리스와 패키지

    릴리스가 없습니다. 소스에서 빌드합니다.

    아직 없음
  • 독립적인 보안 검토

    독립적인 검토는 이루어지지 않았습니다.

    아직 없음

설치

소스에서 빌드합니다. 패키지나 서명된 바이너리는 아직 없으며, 이 설치는 테스트용입니다.

Go 1.25 이상과 펌웨어 5.7 이상의 YubiKey 5가 필요합니다. Linux에서는 빌드에 C 컴파일러와 libpcsclite-dev, 실행에 pcscd도 필요합니다.

빌드

git clone https://github.com/Kodviva/latchwire
cd latchwire
go build -o latchwire ./cmd/latchwire
sudo install -o root -m 0755 latchwire /usr/local/bin/latchwire

데몬과 에이전트를 각각 별도의 터미널에서 시작

sudo latchwire daemon
latchwire agent

키를 만들고 연결

latchwire devices
latchwire keygen --serial <serial> --address <tunnel-ip>
sudo latchwire add office office.conf
latchwire up office

keygen은 서버용 [Peer] 블록을 출력합니다. 터널 파일은 일반 WireGuard 파일이며 PrivateKey 대신 KeyRef와 PublicKey를 사용합니다.

Homebrew, .deb, .rpm, Microsoft Store 패키지를 계획하고 있습니다. 아직 어느 것도 없습니다.

로드맵

  1. 코어구현됨

    macOS 및 Linux용 명령줄 클라이언트

  2. 전체 네트워크 기능구현됨

    전체 터널, DNS, 킬 스위치, 온디맨드, 허용 사용자. Linux에서 테스트됨, macOS는 확인 예정

  3. 실제 하드웨어 확인미완료

    공개 체크리스트로 실제 YubiKey와 macOS 네트워크 확인

  4. Windows진행 중

    서비스, 네트워크 계층, 킬 스위치

  5. 데스크톱 앱과 번역진행 중

    macOS, Windows, Linux용 데스크톱 앱

  6. 서명된 릴리스계획됨

    Homebrew, 직접 다운로드, .deb, .rpm, Microsoft Store