Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
USTP-Secure — USTP의 보안(AEAD 적용) 버전으로, USTP-Secure(ustps://)라고 합니다. | Kitploit
도구/GitHubGitHub/x1colegal/ustp-secure
Encryption/Decryption ToolsScripting & AutomationNetwork SecurityCryptographyUtilities & Frameworks
GitHubx1colegal/ustp-secure

USTP-Secure

USTP의 보안(AEAD 적용) 버전으로, USTP-Secure(ustps://)라고 합니다.

저장소 보기
141232개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

USTP

USTP는 UDP Speedy Transmission Protocol을 의미합니다.

USTP는 동일한 인증 전송 모델을 유지하지만, 프로젝트 이름은 이제 다시 단순히 USTP입니다.

기본적으로 USTP는 DATA에 AEAD를 사용합니다.

또한 DATA에 대해 선택적으로 협상되는 cleartext + HMAC 모드도 지원하며, 이 모드에서는 페이로드 바이트가 전송 중에 노출되지만 변조는 감지되어 거부됩니다.

USTP는 이제 USTP Congestion이라는 선택적 혼잡 제어기를 지원합니다. 여전히 UDP 우선이지만, 경로에서 혼잡 신호가 나타나기 시작하면 선택적으로 속도를 늦추고 다시 끌어올릴 수 있습니다.

상태: Beta

USTP는 더 이상 단순한 개념 증명이 아닙니다. 현재 Beta 단계에 있습니다.

USTP는 다양한 종류의 애플리케이션과 전송에 사용될 수 있습니다.

그러나 이 저장소는 특히 USTP를 통한 스트리밍에 초점을 맞추고 있습니다.

뉴스

  • 02/08/2026: USTP-Secure가 이제 다시 USTP로 돌아왔습니다.
    • USTP-Secure는 오래된 프로젝트 이름이었으며 더 이상 프로젝트에 적합하지 않습니다.
    • 더 짧은 USTP 이름이 이제 다시 선호됩니다.
    • 전체 이름은 이제 UDP Speedy Transmission Protocol이며, 제목에 Secure가 없습니다.
  • 2026-07-18: USTP/2 Beta가 현재 트리에서 제거되었습니다.
    • 실제 환경에서의 동작이 손실 상황에서 USTP/1.1보다 덜 안정적이었습니다.
    • 현재 안정적인 전송 경로는 USTP/1.1뿐입니다.
    • 전송 핸드셰이크는 이제 평문 ASCII 레코드를 사용합니다.

빌드 참고

  • GPT-5.4 (Low)를 사용하여 Codex로 빌드되었습니다.
  • --loss 33에서 멈춤 없이 검증되었습니다.
  • 테스트 경로: Brazil -> Canada, 약 140ms RTT.

보안 모델

  • 전송은 UDP로 유지됩니다 (TCP 터널 없음)
  • AEAD 암호:
    • chacha20 = CHACHA20_POLY1305
    • aes-256-gcm = AES_256_GCM
    • aes-128-gcm = AES_128_GCM
  • 기본 AEAD 암호: chacha20
  • 기본 DATA 보호 모드는 AEAD입니다.
  • 선택적 DATA 보호 모드는 cleartext + 패킷별 HMAC입니다.
  • cleartext 모드에서는 페이로드 바이트가 암호화되지 않지만, 수정이 감지되고 유효하지 않은 패킷은 폐기됩니다.
  • 전송 제어 패킷(HELLO, ACK, RETRANSMIT_REQUEST, CLOSE)은 의도적으로 평문으로 유지됩니다.
  • 제어 패킷은 ASCII 전송 레코드로 직렬화됩니다.
  • ACK 및 NACK/RETRANSMIT_REQUEST는 평문으로 유지되지만, 세션별 HMAC 태그로 인증됩니다.
  • 이는 보안 세션이 설정된 후 경로 외부에서 위조된 ACK/NACK 제어 패킷이 ACK 공격이나 재전송 DoS를 강제하는 것을 방지합니다.
  • DATA 패킷은 UPACK(UPAK on the wire)이라는 바이너리 프레임 형식을 사용합니다.
  • 정적 PSK는 사용되지 않습니다.
  • 각 클라이언트는 참여할 때 X25519 키 교환을 수행합니다.
  • 각 클라이언트는 별도의 AEAD 세션 키를 받습니다.
  • 서버는 여러 클라이언트를 지원합니다.
  • 서버는 소스 IP:port에서 챌린지 왕복을 통해 클라이언트를 검증합니다.
  • 서버에 --cipher가 설정된 경우, 서버는 해당 정확한 암호를 사용합니다.
  • --cipher가 생략되거나 auto로 설정된 경우, 서버는 클라이언트가 요청한 암호를 사용합니다.
  • 클라이언트는 예상치 못한 암호 협상을 거부합니다.
  • DATA 보호 모드는 암호 선택과 별도로 협상됩니다:
    • 서버: --cleartext auto|on|off
    • 클라이언트: --cleartext on|off
    • 서버 기본값: auto
    • 클라이언트 기본값: off
  • 서버가 auto인 경우, 서버는 클라이언트 요청을 따릅니다.
  • 서버가 on인 경우, 서버는 cleartext + HMAC을 강제합니다.
  • 서버가 off인 경우, 서버는 AEAD를 강제합니다.
  • TOFU(Trust On First Use)는 첫 연결 후 예상치 못한 서버 키 변경을 감지하기 위해 클라이언트에서 활성화됩니다.
  • 서버는 기본적으로 ~/.ustps_host_key에 영구 X25519 호스트 키를 유지하여 TOFU가 재연결 및 재시작 전반에 걸쳐 안정적으로 유지되도록 합니다.
  • 일반적인 서버 재시작은 호스트 키를 변경하지 않습니다.
  • 해당 호스트 키를 의도적으로 교체하려는 경우에만 서버에서 --regen-key를 사용하십시오.

패킷 매직 값

  • ACK:, NACK:, HELLO:, CLOSE:는 평문 제어 레코드 접두사입니다.
  • USS1은 UDP Speedy Secure, 버전 1을 의미합니다.
  • USC1은 UDP Speedy Clear, 버전 1을 의미합니다.
  • UPAK은 바이너리 UPACK DATA 프레임 마커입니다.
  • USTP에서 평문 제어는 ACK: 10, NACK: 42, HELLO: ..., CLOSE:와 같이 사람이 읽을 수 있는 ASCII입니다.
  • USTP에서 UPAK은 복호화 후 바이너리 DATA 패킷을 식별합니다.
  • USTP에서 USS1은 외부 보안 AEAD 봉투 형식입니다.
  • USTP에서 USC1은 외부 평문+HMAC DATA 봉투 형식입니다.
  • 따라서 실제 전송 시에는 일반적으로 다음과 같이 보입니다:
    • AEAD로 보호된 DATA의 경우 USS1...
    • 평문+HMAC DATA의 경우 USC1...
    • 전송 제어를 위한 읽을 수 있는 제어 라인

전송 모델

  • USTP는 핸드셰이크 중 협상되는 선택적 USTP Congestion과 함께 실행될 수 있습니다.
  • 패킷은 전송 seq와 애플리케이션 측 stream_pos를 모두 포함합니다.
  • seq는 ACK, 손실 감지, 재전송, RTT 샘플링에 사용됩니다.
  • stream_pos는 애플리케이션에 페이로드가 논리적 바이트 스트림의 어디에 속하는지 알려줍니다.
  • 현재 구현에서 seq는 각 새 세션마다 1에서 시작하는 32비트 카운터입니다.
  • 현재 구현에서 stream_pos는 각 새 논리적 스트림마다 0에서 시작하는 64비트 바이트 카운터입니다.
  • 수신자는 하나의 누락된 패킷 뒤에 전달을 차단하는 대신 패킷을 즉시 수락합니다.

핸드셰이크 및 세션 모델

  • 클라이언트는 X25519 공개 키, 요청 암호, 요청 혼잡 제어 모드(on 또는 off), 요청 DATA 보호 모드(cleartext on|off)를 담은 평문 전송 HELLO로 시작합니다.
  • 서버는 미디어를 즉시 전송하지 않습니다. 먼저 다음을 포함하는 평문 챌린지를 전송합니다:
    • 무작위 재시도 토큰
    • 생성된 Base64 session_id
    • 선택된 암호
    • 협상된 혼잡 제어 모드
    • 협상된 DATA 보호 모드
    • 서버 공개 키
  • 클라이언트는 정확히 동일한 토큰과 세션 메타데이터로 응답해야 합니다.
  • 해당 토큰 왕복이 성공한 후에만 서버가 세션을 생성하고 DATA 전송을 시작합니다.
  • 검증 후 세션은 챌린지를 완료한 소스 IP:port에 바인딩됩니다.
  • session_id는 여전히 세션 레이블로 사용되지만, 다른 IP:port에서는 수락되지 않습니다.

재시도 토큰

  • USTP는 암호화된 미디어 세션이 수락되기 전에 평문 재시도 토큰 단계를 사용합니다.
  • 흐름:
    • 클라이언트가 HELLO 전송
    • 서버가 token, session_id, 선택된 암호, 협상된 혼잡 제어 모드, 협상된 DATA 보호 모드, 서버 공개 키를 담은 USTPS-CHALLENGE1로 응답
    • 클라이언트가 USTPS-CHALLENGE-REPLY1에서 해당 토큰을 그대로 반환
    • 그 후에만 서버가 세션을 생성하고 USTPS-SESSION1 전송
  • 목적:
    • 해당 소스 IP:port의 발신자가 실제로 그곳에서 패킷을 수신할 수 있음을 증명
    • 검증되지 않은 소스 주소로 암호화된 미디어를 즉시 전송하는 것을 방지
    • 최종 세션 생성을 왕복을 완료한 엔드포인트에 바인딩
  • 재시도 토큰은 세션 키가 아닙니다.
  • 이는 실제 USTP 세션이 생성되기 전의 도달 가능성 증명 및 핸드셰이크 게이트일 뿐입니다.
  • 또한 nonce로 사용되지 않고, 그 자체로 ACK/NACK MAC 키로 사용되지 않으며, 패킷 페이로드 상태로 재사용되지 않습니다.

역사적 프로토콜 식별자

  • 프로젝트 이름은 이제 USTP이지만, 여러 온와이어 ASCII 식별자는 여전히 역사적 USTPS-* 접두사를 사용합니다.
  • 이는 기존 구현, 캡처, 로그, 구형 배포와의 하위 호환성을 위해 의도된 것입니다.
  • 현재 구현에서 다음 제어 식별자는 여전히 온와이어에 남아 있습니다:
    • USTPS-KEX1
    • USTPS-CHALLENGE1
    • USTPS-CHALLENGE-REPLY1
    • USTPS-SESSION1
    • USTPS-RESUME1
    • USTPS-RTT1
  • 프로젝트/문서 이름은 USTP로 다시 변경되었지만, 해당 역사적 온와이어 식별자는 프로토콜 바이트에서 이름이 변경되지 않았습니다.

MTU, PMTU 및 단편화

  • 현재 UPACK DATA 페이로드 제한: 900 바이트.
  • UPACK 고정 헤더: 20 바이트.
  • AEAD 모드에서 외부 USS1 보안 봉투 오버헤드:
    • 4 바이트 매직
    • 1 바이트 암호 id
    • 12 바이트 AEAD 논스
    • 16 바이트 AEAD 태그
  • 따라서 암호화된 USTP DATA 데이터그램은 UDP/IP 헤더 이전에 약 953 바이트입니다.
  • 클리어텍스트 모드에서 외부 USC1 클리어텍스트 봉투 오버헤드:
    • 4 바이트 매직
    • 16 바이트 HMAC 태그
  • 따라서 클리어텍스트 USTP DATA 데이터그램은 UDP/IP 헤더 이전에 약 940 바이트입니다.
  • IPv4 + UDP 헤더를 포함하면 AEAD 모드에서 약 981 바이트, 클리어텍스트 모드에서 약 968 바이트가 됩니다.
  • IPv6 + UDP 헤더를 포함하면 AEAD 모드에서 약 1001 바이트, 클리어텍스트 모드에서 약 988 바이트가 됩니다.
  • USTP는 현재 전송 계층 단편화를 구현하지 않습니다.
  • USTP는 현재 PMTU 탐색을 구현하지 않습니다.
  • 대신 구현은 고정된 보수적 페이로드 상한을 사용합니다.
  • 하위에서 여전히 IP 단편화가 발생하고 한 단편이 손실되면, 전체 UDP 데이터그램이 손실되며 USTP는 일반적인 선택적 재전송으로 이를 복구합니다.

오래된 패킷 및 중복 패킷

  • 현재 세션 내의 중복 패킷은 해당 seq가 이미 수락된 후에는 무시됩니다.
  • 매우 오래된 패킷은 수신자 이력 윈도우에서 밀려나 만료된 것으로 무시될 수 있습니다.
  • 재전송 버퍼에서 이미 제거된 데이터에 대한 오래된 ACK/NACK 패킷은 무시됩니다.
  • 오래된 제어 패킷은 송신자에서 이미 완료된 패킷을 다시 생성하지 않습니다.

논스 동작

  • DATA 암호화는 암호화된 각 패킷마다 새롭게 무작위로 생성된 12 바이트 AEAD 논스를 사용합니다.
  • 논스는 무작위로 생성되며 seq에서 파생되지 않습니다.
  • 동일한 세션 키로 논스를 재사용하는 것은 금지됩니다.
  • seq는 전송 신뢰성을 위한 것입니다.
  • stream_pos는 논리적 애플리케이션 순서를 위한 것입니다.
  • nonce는 오직 AEAD 패킷 보호만을 위한 것입니다.
  • 클리어텍스트+HMAC 모드는 DATA에 AEAD 암호화를 사용하지 않으므로 AEAD 논스를 사용하지 않습니다.

USTP 혼잡 제어

  • USTP Congestion은 선택 사항입니다.
  • 이는 USTP를 순서 보장 전송으로 바꾸지 않으며 TCP 스타일의 HoL 블로킹을 추가하지도 않습니다.
  • 이는 송신자가 네트워크에 패킷을 주입하는 공격성만 변경합니다.
  • 협상 모델:
    • 서버: --congestion-control auto|on|off
    • 클라이언트: --congestion-control on|off
  • 기본 동작:
    • 서버 기본값은 auto
    • 클라이언트 기본값은 off
    • 서버가 auto이면 서버는 클라이언트가 요청한 것을 따릅니다
    • 서버가 on이면 클라이언트가 off를 요청했더라도 혼잡 제어가 강제로 켜집니다
    • 서버가 off이면 클라이언트가 on을 요청했더라도 혼잡 제어가 강제로 꺼집니다
  • 런타임 동작:
    • 정상 전송 속도에서 시작합니다
    • 경로가 건강하게 유지되는 동안 유효 전송 윈도우와 버스트 크기를 점진적으로 증가시킵니다
    • 측정된 RTT, 재전송 타임아웃 이벤트(RTO), 명시적 재전송 요청(NACK)을 관찰합니다
    • RTT가 증가하거나, RTO가 발생하기 시작하거나, 손실/재전송 압력이 높아지면 후퇴합니다
    • 경로가 다시 안정화되면 천천히 다시 증가시킵니다
  • 송신자는 여전히 누락된 패킷에 대해서만 선택적 재전송을 사용합니다.
  • USTP Congestion은 속도 압력을 제어하며, 신뢰성 의미론을 제어하지 않습니다.

네트워크 변경 지원

  • 자동 네트워크/경로 마이그레이션은 이 구현에서 제거되었습니다.
  • 클라이언트가 네트워크를 변경하여 소스 IP:port가 바뀌면, 현재 세션은 종료되는 것으로 간주되며 클라이언트는 깔끔하게 재연결해야 합니다.
  • 마이그레이션 구현은 실질적인 신뢰성 및 보안 문제를 일으켰기 때문에 제거되었습니다:
    • NAT 또는 모바일 네트워크가 경로를 빠르게 변경할 때 반복적인 마이그레이션 폭주
    • 복구된 것처럼 보이지만 더 이상 미디어를 전달하지 않는 오래된 세션
    • 긴 무응답 기간 후 GAP만 발생하는 동작
    • 실제 로밍 클라이언트와 기존 session_id를 주장하는 스푸핑된 패킷 간의 모호성
    • 잘못된 시점에 스트림 순서나 재전송 상태를 초기화할 수 있는 복잡한 복구 상태
  • 현재 모델은 의도적으로 더 단순합니다: 현재 IP:port에서 챌린지로 도달 가능성을 증명하고, 세션을 해당 엔드포인트에 바인딩하며, 엔드포인트가 변경되면 재연결합니다.

전송 형식

  • ACK는 ACK: 10 MAC:<tag> 또는 배치 형태인 ACK: 10 11 12 ... MAC:<tag>로 직렬화됩니다.
  • RETRANSMIT_REQUEST는 NACK: 42 MAC:<tag> 또는 배치 형태인 NACK: 42 43 44 ... MAC:<tag>로 직렬화됩니다.
  • HELLO는 HELLO: <base64-payload>로 직렬화됩니다.
  • CLOSE는 CLOSE:로 직렬화됩니다.
  • DATA는 미디어 페이로드 패킷의 비대화를 피하기 위해 ASCII 대신 바이너리 UPACK 프레임 형식을 사용합니다.
  • AEAD 모드에서 캡처는 일반적으로 읽을 수 있는 제어 라인과, 복호화하면 UPAK... DATA 프레임이 되는 암호화된 USS1... 데이터그램으로 구성됩니다.
  • 평문 모드에서 캡처는 일반적으로 읽을 수 있는 제어 라인과, 보이는 UPACK 바이트 및 HMAC 태그를 담은 인증된 USC1... 데이터그램으로 구성됩니다.
  • MAC:<tag> 값은 세션 키로부터 계산되며, 패킷이 전송 상태 머신에 도달하기 전에 검증 후 제거됩니다.
도구 다운로드