
opennhp v1.0.1
암호화 기반 제로 트러스트 툴킷으로, NHP 및 DHP 프로토콜을 구현하여 네트워크 인프라를 숨기고, 데이터를 암호화하며, 애플리케이션과 인프라에 기본 거부(default-deny) 접근 제어를 적용합니다.

인터넷을 공격자에게 보이지 않게 만들기
OpenNHP는 서버, 포트, 도메인을 공용 인터넷에서 숨깁니다. 클라이언트가 단일 암호화 패킷으로 자신의 신원을 증명하기 전까지는 아무것도 응답하지 않으므로, 스캐너, 봇, AI 기반 공격자는 공격할 대상을 찾지 못합니다.
OpenNHP는 인프라, 애플리케이션, 데이터를 위한 제로 트러스트 보안을 구현하는 경량의 암호화 기반 오픈소스 툴킷입니다. Cloud Security Alliance (CSA)의 *Network-infrastructure Hiding Protocol (NHP) specification*의 참조 구현이며, 두 가지 핵심 프로토콜을 제공합니다:
- Network-infrastructure Hiding Protocol (NHP): 서버 포트, IP 주소, 도메인 이름을 숨겨 애플리케이션과 인프라를 무단 접근으로부터 보호합니다.
- Data-content Hiding Protocol (DHP): 암호화와 기밀 컴퓨팅을 통해 데이터 보안과 프라이버시를 보장하여 데이터를 "사용 가능하지만 보이지 않게" 만듭니다.
웹사이트 · 비전 · 라이브 데모 · 문서 · Discord
OpenNHP를 선택하는 이유
현대의 인터넷은 어두운 숲입니다. 자율 취약점 악용을 통해 기계 속도로 스캔하고, 핑거프린팅하고, 악용하는 LLM의 지원을 점점 더 많이 받는 공격자들은 접근 가능한 모든 서비스를 공격 대상으로 취급합니다. Gartner는 예측합니다 AI 기반 사이버 공격이 빠르게 증가할 것이라고. 전통적인 방어 체계는 네트워크가 사용자를 들여보낸 후에 인증을 수행하므로, 노출된 포트, IP, 도메인이 영구적인 공격 표면으로 남습니다.
AI 시대에는 가시성 = 취약성입니다.
OpenNHP는 이 모델을 뒤집습니다: 신뢰받기 전까지는 보이지 않습니다. 모든 포트, IP, 호스트 이름은 기본 거부 게이트 뒤에 위치합니다. 접근은 암호학적으로 서명된 노크가 대역 외에서 인증되고 권한이 부여된 후에만 허용됩니다. 공격자는 발견할 수 없는 것을 악용할 수 없습니다.
3세대 네트워크 은닉 프로토콜
NHP는 "서비스를 먼저 숨긴다"는 설계 계보의 다음 단계입니다:
| 세대 | 프로토콜 | 한계 |
|---|---|---|
| 1 | 포트 노킹 | 평문, 재전송 공격에 취약 |
| 2 | 단일 패킷 인증(SPA) | 공유 비밀, 단방향, 일반적으로 포트만 숨김, 일반적으로 C/C++ |
| 3 | NHP | 현대적 암호화, 상태를 포함한 양방향, 도메인 + IP + 포트 숨김, 무상태 및 수평 확장 가능, 메모리 안전 Go |
NHP는 기존 IAM, DNS, FIDO, 제로 트러스트 정책 엔진을 대체하는 것이 아니라 그와 나란히 자리합니다 — 스택을 분기시키는 대신 확장합니다.
아키텍처
OpenNHP는 NIST 제로 트러스트 아키텍처에서 영감을 받은 세 가지 핵심 구성 요소를 갖춘 모듈식 설계를 따릅니다:

| 핵심 구성 요소 | 역할 |
|---|---|
| NHP-Agent | 접근 권한을 얻기 위해 암호화된 노크 요청을 보내는 클라이언트 |
| NHP-Server | 요청을 인증하고 권한을 부여하며, 별도로 실행되고 보호 대상 호스트와 아키텍처적으로 분리됨 |
| NHP-AC | 보호 대상 서버의 방화벽 규칙을 관리하는 접근 제어기 |
| 애드온 구성 요소 | 역할 |
|---|---|
| NHP-Relay | 브라우저 기반 에이전트가 HTTPS를 통해 NHP 노크를 보낼 수 있게 하는 HTTP-to-UDP 브리지 |
| NHP-KGC | ID 기반 암호화(IBC)를 위한 키 생성 센터 |
프로토콜 흐름
등록(기기당 한 번). 에이전트는 자체 키 쌍을 생성한 다음 공개 키를 등록합니다:
- 에이전트가 일회용 비밀번호(
NHP_OTP)를 요청하고, 서버의 인증 플러그인이 이를 사용자에게 전달합니다(예: 이메일). - 에이전트가 OTP와 공개 키(
NHP_REG)를 보내고, 서버가 키를 사용자에게 바인딩한 뒤 응답합니다(NHP_RAK).
개인 키는 절대 기기를 떠나지 않습니다.
노크(접근할 때마다).
- 에이전트가 서버로 암호화된 노크(
NHP_KNK)를 보냅니다. - 서버가 노크를 검증하고 AC로 작업 요청(
NHP_AOP)을 보냅니다. - AC가 방화벽을 열고 서버에 응답합니다(
NHP_ART). - 서버가 에이전트에 접근 정보와 함께 확인 응답(
NHP_ACK)을 반환합니다. - 에이전트가 AC를 통해 보호 대상 리소스에 도달합니다.
원시 UDP를 보낼 수 없는 브라우저 에이전트는 HTTPS를 통해 NHP-Relay를 거쳐 서버에 도달하며, 릴레이는 각 패킷을 인증된 NHP_RLY 봉투 안에 담아 전달합니다.
암호화
OpenNHP는 두 가지 상호 교환 가능한 암호 제품군과 함께 제공됩니다:
CIPHER_SCHEME_CURVE— Curve25519 + AES-256-GCM + BLAKE2sCIPHER_SCHEME_GMSM— SM2 + SM4-GCM + SM3
둘 다 Noise Protocol Framework에 의해 구동됩니다. ID 기반 암호화(IBC) 모드는 키 생성 센터(KGC)를 통해 사용할 수 있습니다.
프로토콜 세부 사항, 배포 모델, 암호화 설계는 문서를 참조하세요.
저장소 구조
opennhp/
├── nhp/ # Core protocol library (Go module)
│ ├── core/ # Packet handling, cryptography, Noise Protocol, device management
│ ├── common/ # Shared types and message definitions
│ ├── keystore/ # Sealed (encrypted-at-rest) private key storage
│ ├── ebpf/ # eBPF/XDP programs (AC enforcement, Server ingress filter)
│ ├── plugins/ # Plugin handler interfaces
│ ├── utils/ log/ metrics/ audit/ etcd/
│ └── ...
├── endpoints/ # Daemons and SDKs (Go module, depends on nhp)
│ ├── agent/ # NHP-Agent daemon, plus the iOS/Android SDK (agent/iossdk)
│ ├── js-agent/ # JavaScript agent SDK for browsers (via NHP-Relay)
│ ├── server/ # NHP-Server daemon
│ ├── ac/ # NHP-AC (access controller) daemon
│ ├── relay/ # NHP-Relay daemon (HTTPS-to-UDP bridge)
│ ├── db/ # NHP-DB (Data Broker for DHP)
│ ├── kgc/ # NHP-KGC (Key Generation Center)
│ └── keystorecli/ # `seal` / `unseal` key subcommands shared by every daemon
├── examples/ # Server auth plugins and client SDK samples
├── demoapp/ # Example web app with NHP-protected login
├── docker/ # Docker Compose full-stack environment
└── docs/ # Documentation site (docs.opennhp.org)
빠른 시작
사전 요구 사항
- Go 1.26+
make- Docker 및 Docker Compose (전체 스택 데모용)
빌드
# Build all components
make
# Build individual daemons
make agentd # NHP-Agent
make serverd # NHP-Server
make acd # NHP-AC
make db # NHP-DB
make relayd # NHP-Relay
make kgc # NHP-KGC
테스트
cd nhp && go test ./...
cd endpoints && go test ./...
Docker로 실행하기
cd docker && docker-compose up --build
빠른 시작 튜토리얼을 따라 Docker 환경에서 전체 인증 워크플로를 시뮬레이션하세요.
에이전트 등록
OTP 흐름을 통해 서버에 디바이스 키를 등록합니다. 명령은 생략한 항목에 대해 입력을 요청합니다:
./nhp-agentd register --email [email protected] --asp-id <auth-service-id> --res-id <resource-id>
에이전트는 로컬에서 키 쌍을 생성하고, 서버에 일회용 비밀번호 전송을 요청한 뒤, 코드를 입력하면 공개 키를 등록합니다. nhp-agentd seal을 사용하여 개인 키를 저장 시 암호화된 상태로 유지하세요.
클라이언트, SDK 및 라이브 데모
| 클라이언트 | 위치 |
|---|---|
| 네이티브 에이전트 데몬 | make agentd로 빌드하는 nhp-agentd |
| iOS / Android SDK | make iosagentsdk / make androidagentsdk |
| JavaScript (브라우저) SDK | endpoints/js-agent, NHP-Relay를 통해 knock 전송 |
브라우저에서 사용해 보기: