Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
punchline — Peer-to-Peer-verschlüsselter Messenger in Rust mit Noise IK und UDP-NAT-Lochbohren | Kitploit
Tools/GitHubGitHub/michal-pielka/punchline
Verschlüsselungs-/EntschlüsselungstoolsNetzwerksicherheitPrivatsphäreDienstprogramme & FrameworksAuthentifizierung
GitHubmichal-pielka/punchline

punchline

Peer-to-Peer-verschlüsselter Messenger in Rust mit Noise IK und UDP-NAT-Lochbohren

Repository anzeigen
19247vor 5 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

punchline

Ende-zu-Ende-verschlüsselter Peer-to-Peer-Chat über UDP. Keine Konten, kein zentraler Server, der Nachrichten weiterleitet/speichert, kein Mittelsmann. Nur zwei Peers, eine direkte Verbindung und Noise-Protokoll-Verschlüsselung.

https://github.com/user-attachments/assets/939e96d3-45e3-4484-9a27-28c3a0457b05

Inhaltsverzeichnis

  • Was es tut
  • Schnellstart
  • Wie es funktioniert
  • CLI-Referenz
  • Verwendung
    • Konfiguration
    • Peers verwalten
    • Statusprüfung
    • Server-Optionen
    • Theming
    • Shell-Vervollständigung
  • Kryptographie
    • IK-Handshake
    • Initiatorbestimmung
    • Schlüsselspeicherung
  • Drahtprotokoll
    • Hole-Punch-Protokoll
    • Transportprotokoll
    • Signalprotokoll
    • STUN-Protokoll
  • Projektstruktur
  • Installation
    • Von crates.io
    • Aus dem Quellcode erstellen
  • Tests ausführen
  • Technologie-Stack
  • Lizenz

Was es tut

Zwei Personen führen punchline connect <peer> auf ihren Maschinen aus. Punchline durchbricht ihre NATs, führt einen verschlüsselten Handshake durch und bringt sie in einen privaten Chat – alles in wenigen Millisekunden. Die enthaltenen STUN- und Signal-Server übernehmen die Erkennung und verschwinden dann. Unterhaltung


Schnellstart

root@kitploit:~
cargo build --release

Starte die Server (auf einer Maschine, die beide Peers erreichen können), oder verwende meine öffentlichen unter 64.225.107.28 (STUN: Port 3478, Signal: Port 8743):

root@kitploit:~
punchline-stund                  # STUN server - tells peers their public IP
punchline-signald                # Signal server - matches peers who want to talk
Server

Auf jedem Peer-Computer:

root@kitploit:~
# Generate your identity (X25519 keypair)
punchline keygen

# Share your public key with your peer
punchline pubkey

# Save their key
punchline peers add alice a1b2c3d4...64_hex_chars

# Connect (both peers run this, targeting each other)
punchline connect alice --stun <server>:3478 --signal <server>:8743

Die TUI startet mit einer Live-Ansicht des Verbindungsfortschritts:

  1. STUN-Erkennung – Ermittlung deiner externen Adresse über punchline-stund

  2. Signal-Server – Verbindung zu punchline-signald

  3. Warten auf Peer – Der Signal-Server bringt beide Peers zusammen

  4. Hole Punch – Herstellung des direkten UDP-Pfads

  5. Noise-Handshake – Verschlüsselter Schlüsselaustausch

    Dashboard

Sobald abgeschlossen, bist du im Chat. Tippe und drücke Enter. Drücke Esc, um zu beenden.


Wie es funktioniert

Das gesamte System besteht aus drei Binärdateien, die alle in diesem Repository enthalten sind:

BinaryRolleVerwendung

Nach der anfänglichen Einrichtung werden die STUN- und Signal-Server nicht mehr kontaktiert. Der gesamte Datenverkehr erfolgt direkt Peer-to-Peer.


CLI-Referenz

punchline

Globale Flags:

FlagBeschreibung
-vErhöht die Protokollausführlichkeit (-v = Debug, -vv = Trace).
-q, --quietUnterdrückt die gesamte Protokollausgabe.

punchline-stund

punchline-signald


Verwendung

Konfiguration

Anstatt jedes Mal --stun und --signal zu übergeben, erstelle ~/.config/punchline/config.toml:

root@kitploit:~
stun_server = "203.0.113.10:3478"
signal_server = "203.0.113.10:8743"

Peers verwalten

root@kitploit:~
punchline peers                              # list all
punchline peers add alice a1b2c3d4...        # add
punchline peers remove alice                 # remove

Die Aliase werden in ~/.punchline/known_peers.toml gespeichert. Du kannst auch direkt mit einem rohen 64-stelligen Hex-Schlüssel verbinden.

Statusprüfung

root@kitploit:~
punchline status

Zeigt deine Identität, Konfiguration, Servererreichbarkeit (sendet eine echte STUN-Abfrage und TCP-Verbindung) und die Anzahl der Peers.

Server-Optionen

Beide Server unterstützen -v (Debug), -vv (Trace), -q (Lautlos), --address und --port:

root@kitploit:~
punchline-stund -v --port 3478
punchline-signald -v --port 8743

Theming

Passe die TUI über ~/.config/punchline/style.toml an. Im Video verwendete Stile:

root@kitploit:~
[colors]
my_text = "#ebdbb2"
peer_text = "#bdae93"
input_text = "#ebdbb2"
border = "#ebdbb2"
sidebar_key = "#ebdbb2"
sidebar_value = "#bdae93"

[padding]
chat_horizontal = 2
chat_vertical = 1

Alle Farben sind hex RGB. Wenn die Datei fehlt, werden die Standardfarben des Terminals verwendet.

Shell-Vervollständigung

root@kitploit:~
punchline completions bash > ~/.local/share/bash-completion/completions/punchline
punchline completions zsh > ~/.zfunc/_punchline
punchline completions fish > ~/.config/fish/completions/punchline.fish

Kryptographie

Vollständiger Protokollname: Noise_IK_25519_ChaChaPoly_SHA256

KomponenteRolle

IK-Handshake

Das IK-Muster bedeutet, dass der Initiator den statischen öffentlichen Schlüssel des Responders kennt, bevor der Handshake beginnt. Beide Peers haben bereits die Schlüssel des jeweils anderen (out-of-band oder über die Peer-Registry ausgetauscht), sodass kein Trust-on-First-Use erforderlich ist.

  1. Initiator -> Responder: Sendet eine verschlüsselte Nachricht mit seinem statischen öffentlichen Schlüssel, verschlüsselt mit dem bekannten Schlüssel des Responders. Bietet Identitätsschutz gegen passive Beobachter.
  2. Responder -> Initiator: Entschlüsselt, verifiziert und antwortet. Beide Seiten wechseln in den Transportmodus mit gemeinsam genutzten Sitzungsschlüsseln.

Initiatorbestimmung

Punchline wählt den Initiator deterministisch aus, indem die ersten 8 Bytes des öffentlichen Schlüssels jedes Peers als Big-Endian-u64 verglichen werden. Der Peer mit dem kleineren Wert wird zum Initiator. Beide Seiten berechnen dies unabhängig.

Schlüsselspeicherung

Die Identität ist ein 32-Byte-X25519-Geheimschlüssel unter ~/.punchline/id_x25519 mit Unix-Berechtigungen 0600. Der öffentliche Schlüssel wird beim Laden abgeleitet. Die Schlüsselerzeugung verwendet x25519-dalek mit OsRng.


Drahtprotokoll

Das erste Byte jedes UDP-Pakets identifiziert seinen Typ:

Hole-Punch-Protokoll

Beide Peers führen gleichzeitig denselben Algorithmus aus:

  1. Sende alle 200 ms PROBE (0x00) an die externe Adresse des Peers.
  2. Beim Empfang eines PROBE wechsle zum Senden von ACK (0x01).
  3. Beim Empfang eines ACK sende ein letztes ACK und erkläre den Erfolg.
  4. Sicherheits-Timeout: 2 Sekunden Senden von ACKs ohne Antwort gehen davon aus, dass der Peer fertig ist.

Transportprotokoll

Nachrichten (0x02) enthalten Noise-verschlüsselte UTF-8-Nutzlasten. Keepalives (0x03) sind verschlüsselte leere Nutzlasten, die alle 10 Sekunden gesendet werden, um die Nonce-Synchronisation der Chiffre aufrechtzuerhalten. 30 Sekunden ohne ein Paket führen zur Trennung.

Signalprotokoll

JSON über WebSocket:

root@kitploit:~
// PairRequest (client -> server)
{ "external_addr": "203.0.113.5:48291", "public_key": "a1b2...", "target_public_key": "d4e5..." }

// PairResponse (server -> client)
{ "target_external_addr": "198.51.100.7:51003", "target_public_key": "d4e5..." }

STUN-Protokoll

Folgt RFC 5389 (vereinfacht): Binding-Request/Response mit XOR-MAPPED-ADDRESS. Nur IPv4.


Projektstruktur

Cargo-Workspace mit vier Crates:

root@kitploit:~
crates/
├── proto/      # Gemeinsame Bibliothek: Krypto, STUN, Signal-Typen, Transport-Trait
├── client/     # P2P-Client: CLI, TUI, Verbindungslogik, Peer-Verwaltung
├── signald/    # Signal-Server: WebSocket-Peer-Zuordnung
└── stund/      # STUN-Server: Erkennung externer Adressen

Installation

Von crates.io

root@kitploit:~
cargo install punchline           # TUI client
cargo install punchline-signald   # Signal server
cargo install punchline-stund     # STUN server

Aus dem Quellcode erstellen

Voraussetzungen: Rust 2024 Edition (rustc 1.85+)

root@kitploit:~
git clone https://github.com/michal-pielka/punchline.git
cd punchline
cargo build --release

Binärdateien befinden sich in target/release/:

  • punchline
  • punchline-signald
  • punchline-stund

Tests ausführen

root@kitploit:~
cargo test

Tests decken kryptografische Operationen, STUN-Codierung/-Decodierung, Signalprotokoll-Serialisierung, Konfigurationsparsing, Peer-Verwaltung, Style-Theming und den Noise-IK-Handshake ab.


Technologie-Stack


Lizenz

MIT – siehe LICENSE.

Tool herunterladen
punchline-stundSTUN-Server (UDP) – antwortet mit der externen IP:Port des ClientsNur während der Einrichtung
punchline-signaldSignal-Server (WebSocket) – vermittelt Peers und tauscht Adressen ausNur während der Einrichtung
punchlineDer Messenger selbst – CLI, TUI, Krypto, Hole PunchingImmer
BefehlBeschreibung
keygen [--force] [-i Pfad]Neues X25519-Identitätsschlüsselpaar generieren. Verwende --force, um ohne Nachfrage zu überschreiben. Verwende -i, um den Ausgabepfad anzugeben.
pubkey [-i Pfad]Deinen öffentlichen Schlüssel (64 Hex-Zeichen) ausgeben. Verwende -i, um von einer bestimmten Schlüsseldatei abzuleiten.
connect <peer> [-i Pfad] [--stun Adresse] [--signal Adresse]Verbindung zu einem Peer per Alias oder rohem Hex-Schlüssel herstellen. Verwende -i, um den Identitätsschlüssel anzugeben. Startet die TUI.
peersAlle bekannten Peers auflisten.
peers add <Name> <Schlüssel>Öffentlichen Schlüssel eines Peers unter einem Spitznamen speichern.
peers remove <Name>Peer per Spitznamen entfernen.
config pathPfad der Konfigurationsdatei ausgeben.
config showAktuelle Konfigurationswerte anzeigen.
statusIdentität, Konfiguration, Servererreichbarkeit und Anzahl der Peers anzeigen.
completions <shell>Shell-Vervollständigungen generieren (bash, zsh oder fish).
FlagBeschreibung
--address <Adresse>Bindeadresse (Standard: 0.0.0.0).
--port <Port>Binde Port (Standard: 3478).
-v / -vvDebug / Trace Logging.
-qLautlos-Modus.
FlagBeschreibung
--address <Adresse>Bindeadresse (Standard: 0.0.0.0).
--port <Port>Binde Port (Standard: 8743).
-v / -vvDebug / Trace Logging.
-qLautlos-Modus.
Noise IKHandshake-Muster – Initiator kennt den öffentlichen Schlüssel des Responders. Abgeschlossen in 2 Nachrichten.
X25519Elliptische-Kurven-Diffie-Hellman-Schlüsselaustausch (RFC 7748). 128-Bit-Sicherheit, konstante Laufzeit.
ChaCha20-Poly1305AEAD-Chiffre für Nachrichtenverschlüsselung (RFC 8439). Dieselbe Chiffre wird in TLS 1.3 und WireGuard verwendet.
SHA-256Wird intern von Noise für Schlüsselableitung und Handshake-Hashing verwendet.
PräfixTypPhaseBeschreibung
0x00PROBEHole PunchWird alle 200 ms gesendet, um ein NAT-Pinhole zu öffnen
0x01ACKHole PunchBestätigt den Empfang eines PROBE
(keines)HandshakeHandshakeRohe Noise-verschlüsselte Handshake-Nutzlast
0x02MessageTransportVerschlüsselte Chat-Nachricht
0x03KeepaliveTransportVerschlüsselte leere Nutzlast (Herzschlag)
CrateZweck
snowNoise-Protokoll-Framework (Handshake + Transportverschlüsselung)
x25519-dalekX25519-Schlüsselerzeugung und -Ableitung
ratatuiTerminal-UI-Framework
crosstermTerminal-Ereignisbehandlung
clapCLI-Argumentparsing + Shell-Vervollständigung
tungsteniteWebSocket-Client/Server
tracingStrukturiertes Logging