Lantunnel
Lantunnel P2P 저지연·암호화·릴레이 폴백으로 포트포워딩 없이 LAN 원격 접근
SentinelSpread는 AES‑256‑GCM 암호화와 이미지·오디오 스테가노그래피 등으로 메시지와 전송 자체를 숨깁니다
Encryption hides what a message says. SentinelSpread also hides that it was sent: AES-256-GCM, a real GNU Radio spread-spectrum link, and steganography in ordinary images and audio. 20 working tools.
보안Python · JavaScriptGitHub @saihardhikreddy온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
SentinelSpread is a software-defined communication system featuring Direct Sequence Spread Spectrum (DSSS) covert transmission, an independent statistical/ML detector suite, and dynamic hardening mechanisms.
Encryption hides what a message says. SentinelSpread also hides that it was sent: the payload is sealed with AES-256-GCM, spread with a pseudo-noise code and carried through a real GNU Radio flowgraph, and can be folded into ordinary images and audio. The repository holds the DSP pipeline and a web app built on it.README 전문 보기 ↗SentinelSpread is a software-defined communication system featuring Direct Sequence Spread Spectrum (DSSS) covert transmission, an independent statistical/ML detector suite, and dynamic hardening mechanisms.
Encryption hides what a message says. SentinelSpread also hides that it was sent: the payload is sealed with AES-256-GCM, spread with a pseudo-noise code and carried through a real GNU Radio flowgraph, and can be folded into ordinary images and audio. The repository holds the DSP pipeline and a web app built on it.
sentinelspread/: the DSP pipeline (Python package).tests/: pytest suite for the pipeline.cli.py: command line tool for stage testing and execution.stego_crypto_api/: FastAPI backend for the web app (steganography, watermarking, cryptography). It also keeps an /api/radio transmitter that drives the GNU Radio flowgraph; the page does not use it.stego_crypto_frontend/: the web app (Three.js scroll story plus a 20-tool workbench), served by the API.steganography-and-watermarking/: submodule with the earlier steganography and watermarking client apps.input/: Text & audio input loading, saving, binary header type-tagging, and LSB image steganography.crypto/: AES-256 payload encryption & RSA key wrapping/exchange.dsss/: PN sequence generation, spreading, and correlator despreading.modem/: BPSK/QPSK modulation, RRC filtering, symbol timing & Costas loop carrier recovery.channel/: Simulated AWGN channel and swappable hardware SDR (Adalm Pluto / RTL-SDR) interface.gnuradio/: GNU Radio 3.10 blocks, the sentinelspread_flowgraph.grc transceiver, and the propagation verifier.eval/: BER benchmarking, processing gain, and PSD plot generation.detector/: key-free signal detectors — energy, spectral flatness, kurtosis, carrier-squaring and chip-autocorrelation statistics, each calibrated to a false-alarm budget, plus a random-forest detector over all of them and an evaluation sweep.harden/: FHSS (key-derived frequency hopping over the chips), Hamming(7,4) FEC with interleaving, an adaptive transmit-power policy, and an HKDF key ratchet for per-epoch session keys.adversary/: Stage 6 — a PyTorch CNN detector trained on raw I/Q, a detection-driven hardening loop that escalates FHSS then power backoff to push the CNN's confidence under a target, and a BER-vs-probability-of-detection benchmark. Needs PyTorch (optional; the rest of the pipeline and the Stage 6 tests run without it).| Stage | What it covers | State |
|---|---|---|
| 1 | Input, header tagging, AES-256-GCM + RSA-OAEP | done |
| 2 | BPSK/QPSK modem, RRC pulse shaping, AWGN, BER vs Eb/N0 | done |
| 3 | DSSS: PN generator, spreader, correlator, processing gain | done |
| 4 | GNU Radio software SDR loopback with timing and Costas recovery | done, see STAGE4_VERIFICATION_REPORT.md and VERIFY_GNURADIO_PROPAGATION_RESULTS.md |
| 5 | Detector suite and hardening | done, see STAGE5_DETECTOR_HARDENING.md |
| 6 | CNN adversary and the closed, detection-driven hardening loop | done, see STAGE6_ADVERSARY_LOOP.md |
--receiver despread, the default): finds the burst on its known preamble, estimates the carrier from it, despreads, then tracks phase on the despread symbols. Because it applies the processing gain before synchronising, it decodes below the noise floor — every trial in the numpy model recovers at σ 1.4 for SF 16 (−8.9 dB per sample) and σ 2.8 for SF 128 (−15 dB), confirmed through the real GNU Radio flowgraph at SF 64, σ 1.4–2.0.--receiver classic): symbol timing (Mueller & Müller) then a Costas loop on the raw chips, then despread. It locks before the processing gain, so it stops at about σ 0.3 (+4.4 dB) regardless of spreading factor. This is the chain the Stage 4 propagation verifier checks.pip install -r requirements.txt
python cli.py test-stage all # run every stage's tests
python -m pytest -q tests # or run the suite directly (GNU Radio tests skip without it)
python cli.py plot-ber # BER vs SNR -> eval/ber_vs_snr.png
python cli.py plot-psd # PSD flattening -> eval/psd_flattening.png
python cli.py benchmark-gain # processing gain across spreading factors
python cli.py detect-sweep # Stage 5: detection rate vs noise, per detector
python cli.py detect-sweep --fhss # same, with FHSS hardening applied to the signal
python cli.py attack-benchmark # Stage 6: train the CNN adversary, trade BER vs detection
Stage 6 needs PyTorch (CPU build is enough); the rest of the pipeline does not:
pip install torch --index-url https://download.pytorch.org/whl/cpu
GNU Radio parts need a Python with GNU Radio 3.10, for example radioconda. sdr-loopback launches it from C:\Users\csaih\radioconda\python.exe; the verifier is run with it directly:
python cli.py sdr-loopback
<radioconda>/python -m sentinelspread.gnuradio.verify_gnuradio_propagation
tests/test_gnuradio.py skips its GNU Radio checks when GNU Radio is not installed. MANUAL_TESTING_GUIDE.md walks through testing by hand.
The runner has a channel switch. --channel sim (the default) is the software channel model above. --channel pluto sends the same DSP chain through an ADALM-Pluto, TX1A cabled to RX1A. Only the channel changes: the Pluto sink and source take the channel model's place, and the RX side adds a DC blocker and an AGC.
Never fit antennas for this. The Pluto transmits at about +7 dBm at 0 dB attenuation, which is more than its receiver input can take. Use one of two cablings, and confirm it on the command line or the run refuses to transmit:
--attenuator-in-line: TX1A → ~30 dB SMA attenuator → RX1A. Defaults: TX attenuation 20 dB, RX gain 40 dB.--direct-cable: a bare SMA male-to-male cable. The Pluto's own TX attenuator is the only protection. The run sets it to maximum before starting and after finishing, and refuses anything below 60 dB. Defaults: TX attenuation 70 dB, RX gain 50 dB.<radioconda>/python -m sentinelspread.gnuradio.runner --channel pluto --direct-cable
It runs at 915 MHz and 2 MS/s (500 kchip/s, 4 samples per chip). With no --uri it uses the first Pluto that a USB scan finds. The run logs the device serial, RX power in dBFS, the DC offset before and after the DC blocker, and the carrier offset the Costas loop corrected. With no board attached, it stops before building the flowgraph with ADALM-Pluto not detected at <uri>.
pip install -r stego_crypto_api/requirements.txt
python -m uvicorn main:app --app-dir stego_crypto_api --port 8001
Then open http://localhost:8001. The API serves the frontend from stego_crypto_frontend/.
The page needs no GNU Radio: its 20 tools cover steganography, watermarking, encryption and measurement. Images, audio and keys are processed per request and not stored. Chapter 02 shows readings recorded in the Stage 4 GNU Radio verification run.
The backend still has /api/radio (transmit, receive, WAV, status) for running the flowgraph locally. POST /api/radio/transmit accepts "channel": "pluto" with direct_cable or attenuator_in_line, and optionally pluto_uri, pluto_freq_hz, tx_atten_db and rx_gain_db. A Pluto run transmits and decodes in one call. GET /api/radio/status reports whether a Pluto is attached. GNU Radio runs in a separate process, controlled by two environment variables:
SENTINEL_RADIO_PYTHON: the Python with GNU Radio (default C:\Users\csaih\radioconda\python.exe).SENTINEL_PROJECT_ROOT: where the sentinelspread package lives (default: this repository).python -m pytest tests # pipeline: 36 tests
python -m pytest stego_crypto_api # web API: 30 tests