
HIDEAGEM piattaforma sperimentale di steganografia.
888 888 8888888 8888888b. 8888888888 d8888 .d8888b. 8888888888 888b d888
888 888 888 888 "Y88b 888 d88888 d88P Y88b 888 8888b d8888
888 888 888 888 888 888 d88P888 888 888 888 88888b.d88888
8888888888 888 888 888 8888888 d88P 888 888 8888888 888Y88888P888
888 888 888 888 888 888 d88P 888 888 88888 888 888 Y888P 888
888 888 888 888 888 888 d88P 888 888 888 888 888 Y8P 888
888 888 888 888 .d88P 888 d8888888888 Y88b d88P 888 888 " 888
888 888 8888888 8888888P" 8888888888 d88P 888 "Y8888P88 8888888888 888 888
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄ ____ ______ ____ ▄ ▄
█ / / \ \ HIDEAGEM STEGANOGRAPHY PLATFORM █ . . █
█ /___ /________\ ___\ █ .-. .-. '.___.' █
█ \ \ / / ASTRAL SOFTWARE FROM THE FUTURE █ (_ \ / _) .' `. █
█ \ \ / / █ | : : █
█ \ \ / / COPYRIGHT 2024 WWW.CYBERGEM.NET █ | : : █
█ \ \ / / █ | `.___.' █
█ \/ LET'S DO COMPUTER STUFF ALL DAY █ █
█ █ █
█ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ._____. .--. █
█ MMMMMSSSSSSSSSSSSSSSSSSSSSSSSSSddMMMMMSSSSSSMSSSSSSSSSS; █ | | / _`. █
█ MMMMSSSSSSSSSSSSSSSSSMSSSSS; ;SSdMMMMSSSSSSMMSSSSSSSSSS, █ | | (_) ( ) █
█ MMSSSSSSSMSSSSSMSSSSMMMSS."-.-":MMMMMSSSSMMMMSSMSSSMMSS █ _|_|_ '. / █
█ MSSSSSSSMSSSSMMMSSMMMPTMM;"-/\":MMM^" MMMSSMMMSSMM █ ' ' `--' █
█ SSSSSSSMMSSMMMMMMMMMP-.MMM : ;.;P dMMMMMMMMMP' █ █
█ SSMSSSMMMSMMMMMMMMMP :M;`: ;.'+"""t+dMMMMMMMMMMP █ _ █
█ MMMSSMMMMMMMMPTMMMM"""":P `.\// ' ""^^MMMMMMMP' █ .--. ' `:--.--. █
█ MMMMMMPTMMMMP="TMMMsg, \/ db`c" dMMMMMP" █ ( ) | | |_ █
█ MMMMMM TMMM d$$$b ^ /T$; ;-/TMMMP' Let's █ (_) / | | | ) █
█ MMMMM; .^`M; d$P^T$$b : $$ ::MMMMP hide some █ (_, | | |/ █
█ MMMMMM .-+d$$ $$$; ;. $$ ;;MMMP, Gems ! █ (J █
█ MMMMMMb _d$$$ $$$$ :$$$; :MMMMMMp. █ █
█ MMMMMM" " T$$$._.$$$; T$P.'MMMSSSSSSb █ _ █
█ MMM`TMb -")T$$$$$$P' `._ "" :MMSSSMMP' █ __ ' `:--.--. █
█ MMM / \ ' "T$$P" / :MMMMMMP' █ ___.' '.___ | | | █
█ MMSb`. ; " :MMMMMM' █ ____________ | | | █
█ MMSSb_lSSSb. .___. MMMMMP ,d88b.d88b, █ | | | .., █
█ MMMMSSSSSSSSb. .MMMMMM. 88888888888 █ `--': █
█ MMMMMMMMMMMSSSb .dMMMMMMMP `Y8888888Y' █ █
█ MMMMMMMMMMMMMSS; .dMMMMMMMMMM' `Y888Y' █ ... _ █
█ MMMMGEMMAMMMMb`;"-. .dMMMMMMMMMMP' `Y' █ .': \ /_) █
█ MMMMMMMMMMMMMMb: `'--.___.dMMMMMMMMMPP' █ .' \ /`. █
█ MMMMMMMMMMMMMMMb; dMMMMMMMMPPR █ `..' \ / ; █
█ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █ .'`. \/ __.' █
█ █ █
█ ░░░░░░░░ ▒▒▒▒▒▒▒▒ ░░░░░░░░ █ █
█ ▓▓▓░░ ████████ ███▒▒ ▓▓▓▓▓▓▓▓ ▓▓▓░░ ████████ █ `-. .-' █
█ ▒▒▒▓▓ ░░ ██ ▒▒▒▒▒▒░░░██ ▒▒ ▓▓ ░░░░░░▒▒▒▓▓ ░░ ██+§¥µ██ █ .-"-._.-"-._.- : : █
█ ███▒▒ ▓▓ ░░░██ ▒▒ ▓▓▓░░ ██ ▒▒▒▓▓ ░░ ███▒▒ ▓▓ ░░░██$@¢¶██ █ .-"-._.-"-._.- --:--:-- █
█ ██ ▒▒ ▓▓▓▓▓▓███▒▒ ▓▓ ░░ ██████▓▓▓░░ ██ ▒▒ ▓▓▓▓▓▓████████ █ : : █
█ ██ ▒▒▒▒▒▒▒▒ ▒▒▒▓▓ ░░░░░░░░ ░░░██ ▒▒▒▒▒▒▒▒ █ .-' `-. █
█ ████████ ▓▓▓▓▓▓▓▓ ████████ CYBERGEM █ █
▀ ▀ ▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
HIDEAGEM è uno strumento sperimentale per nascondere file all'interno di immagini.
È scritto in C++ e può essere utilizzato tramite CLI Python e nodi personalizzati in ComfyUI per Stable Diffusion.
ATTENZIONE: HIDEAGEM è un software sperimentale! Potrebbe avere vulnerabilità o difetti sconosciuti. Usalo a tuo rischio!
ATTENZIONE: HIDEAGEM non è ancora stato studiato per determinarne la resistenza alla steganalisi (ad esempio, strumenti che calcolano la probabilità che un messaggio nascosto sia presente in un'immagine). Quindi presupponi che possa essere possibile per gli avversari rilevare se un'immagine è "sospetta".
Per una spiegazione approfondita degli algoritmi e del design di HIDEAGEM, si prega di leggere questo articolo.
Aggiornamenti dello sviluppo e supporto sono disponibili su Discord.
HIDEAGEM può ora essere utilizzato nel browser su WWW.HIDEAGEM.COM !
La steganografia riguarda il nascondere la presenza di un messaggio; si tratta di celare l'esistenza della comunicazione.
HIDEAGEM mira a essere una piattaforma di steganografia di nuova generazione, combinando tecniche crittografiche e steganografiche moderne per facilitare il nascondimento rapido, sicuro e robusto di informazioni in supporti di copertura.
Oltre a perseguire l'obiettivo tradizionale della steganografia (comunicazione furtiva), vengono esplorate altre proprietà di sicurezza del nascondere bit di messaggi in grandi collezioni di bit.
HIDEAGEM è progettato per essere espandibile e adattabile, una piattaforma dalla quale possono essere lanciati vari algoritmi e tecniche steganografiche per celare dati in una varietà di tipi di supporti di copertura.
Nuovi algoritmi stego possono essere incorporati nel programma nel tempo per supportare più tipi di file e sfruttare nuove tecniche.
Elenco delle caratteristiche generali e potenziali direzioni di sviluppo futuro.
Caratteristiche Correnti | Sviluppo Futuro
-------------------------------|---------------------------------------------------
Password Unicode | File di chiave
Dati Gem a prova di manomissione | App mobile
Chiave simmetrica a 512 bit | Più algoritmi stego
Gestione sicura della memoria | Più tipi di supporti di copertura
Più file per password | Dividi file tra immagini
Più password per immagine | App web (esecuzione locale)
Resistenza a brute-force offline | Estensione browser (es. estrazione Gem dal menu contestuale)
Usa qualsiasi carattere Unicode folle che vuoi nelle tue password: puoi anche usare le tue emoji preferite; nessuno può fermarti! 🐬
Nota: Le informazioni qui sotto si applicano solo agli attuali algoritmi del dominio spaziale di HIDEAGEM che sono compatibili solo con formati di immagine senza perdita come PNG, TIFF e BMP.
Se una Gem viene estratta con successo e ha l'hash Gem corretto, allora è virtualmente garantito che sia bit per bit la stessa Gem che hai nascosto nell'immagine.
Se anche un solo bit di un Pixel Gem (un pixel che contiene Dati Gem al suo interno) viene corrotto, l'estrazione della Gem fallirà.
La prova di manomissione ha il costo della fragilità: Piccole modifiche alle Immagini Gem possono rendere i dati irrecuperabili. Sono fragili e possono essere danneggiate ridimensionando, ritagliando o mutando un pixel che contiene Dati Gem.
HIDEAGEM utilizza un sistema di chiave simmetrica sperimentale progettato per funzionare in concerto con i suoi algoritmi steganografici.
La chiave a 512 bit viene generata utilizzando la funzione di hashing delle password Argon2id di libsodium e la password fornita dall'utente.
Argon2id è stato scelto perché offre parametri configurabili di resistenza al brute-force (come i requisiti di memoria) e resistenza agli attacchi brute-force via GPU.
I Dati Gem vengono crittografati utilizzando una chiave a 256 bit derivata dalla chiave a 512 bit, e poi nascosti nel supporto di copertura utilizzando la chiave a 512 bit. La chiave a 512 bit deve essere prima utilizzata per estrarre l'intera Gem crittografata prima che la chiave a 256 bit possa essere utilizzata per decrittografare qualsiasi suo bit.
Puoi saperne di più sul sistema di chiavi qui.
NOTE: La forza finale della chiave è solo forte quanto la password. Per
sfruttare tutti i 512 bit della chiave è necessaria una password molto
lunga/casuale.
Per ottenere 512 bit di entropia con una password utilizzando il set di
caratteri ASCII, la password dovrebbe essere >= ~74 caratteri e ogni
carattere perfettamente casuale.
Per cercare di mitigare potenziali attacchi side-channel, vengono utilizzate le funzioni di gestione della memoria a basso livello di libsodium per cancellare in modo sicuro la memoria di chiavi, file Gem e altri dati sensibili generati durante i processi di incorporamento/estrazione.
Viene anche utilizzato per impedire che dati sensibili come le chiavi vengano scambiati su disco.
Puoi pensare alle immagini come a cartelle o archivi di file crittografati scrivibili una sola volta.
Puoi nascondere un numero qualsiasi di file in un'immagine usando una singola password, limitato solo dalla capacità di incorporamento dell'immagine. Verranno tutti estratti contemporaneamente quando viene inserita la password corretta.
Il Gem Stream ha un overhead di 52 byte, e ogni Gem File un overhead di 8 byte.
HIDEAGEM cerca di comprimere tutti i Gem File con miniz (zlib) prima di crittografarli, il che a volte può ridurre sostanzialmente il numero di byte incorporati.
La dimensione massima del file per Gem File e il numero massimo di byte che possono essere incorporati per Ocean è di 16 exabyte.
HIDEAGEM attualmente supporta il nascondimento di più set di file utilizzando più password e una singola immagine, ma non è ancora stata sviluppata un'interfaccia utente per utilizzare questa funzionalità.
Il modo in cui funziona è anche un po' peculiare in quanto è gerarchico: per accedere al set di file successivo sono necessarie tutte le password che lo hanno preceduto oltre alla password del set di file.
Quindi considera questa una funzionalità nascosta che probabilmente non è ancora utile.
La funzione di hashing delle password Argon2id viene utilizzata per generare chiavi utilizzando la password fornita dall'utente.
La Master Key viene generata utilizzando parametri di chiave INTERATTIVI, che offre una significativa resistenza al brute-force delle password rispetto all'utilizzo di una normale funzione hash per generare la chiave.
HIDEAGEM è scritto in C++ e può essere utilizzato in Python tramite una piccola API.
Sono disponibili nodi personalizzati per la piattaforma ComfyUI Stable Diffusion, che ne facilitano l'integrazione nei flussi di lavoro di IA generativa 2D.
Vengono utilizzate le seguenti librerie esterne:
Tutte le operazioni crittografiche, come la crittografia dei Dati Gem, l'hashing e la generazione di numeri casuali, vengono eseguite utilizzando le funzioni di libsodium.
Generazione della chiave: funzione di hashing BLAKE2b e algoritmo di hashing delle password Argon2id
Crittografia dei Dati Gem: algoritmo di crittografia simmetrica XChaCha20-Poly1305 (chiave a 256 bit + nonce a 192 bit)
Implementazione CSPRNG: hash BLAKE2b e cifrario a flusso XChaCha20 (seme a 256 bit + nonce a 192 bit)
Inoltre, le funzioni di gestione della memoria a basso livello di libsodium vengono utilizzate per gestire dati sensibili come chiavi e file Gem.
Una piccola libreria per la gestione di stringhe Unicode. Viene utilizzata per normalizzare le password Unicode in modo che funzionino in modo coerente tra sistemi diversi.
La compressione dei Dati Gem viene tentata con miniz (implementazione zlib) prima della crittografia.
Conserva le vecchie versioni di HIDEAGEM nel caso tu abbia bisogno di migrare i dati.
Piccole modifiche al codice di HIDEAGEM durante questa fase iniziale dello sviluppo possono rompere la retrocompatibilità. Le nuove versioni di HIDEAGEM potrebbero non essere in grado di estrarre Gem nascoste con versioni precedenti.
Questo non sarà un problema una volta che il codice sarà considerato stabile, poiché da quel momento in poi il sistema di versioni verrà utilizzato per fornire retrocompatibilità con tutte le versioni precedenti.
HIDEAGEM v.1 viene fornito con alcuni nodi per ComfyUI. Puoi usarli per nascondere Gem nelle tue immagini generate dall'IA, o in qualsiasi immagine salvata su disco.
🚨 ATTENZIONE: Il nodo predefinito di salvataggio immagini di ComfyUI rivelerà che HIDEAGEM è stato utilizzato nei metadati PNG !!!
È importante utilizzare il nodo SAVE IMAGE di HIDEAGEM, poiché non salva quei metadati nell'immagine Gem PNG di output.
I nodi vengono forniti con alcuni spazi di lavoro di esempio che mostrano come usarli.
Quando trovi Gem, la finestra della console richiederà l'input dell'utente per salvare le Gem su disco, quindi dopo aver iniziato una ricerca Gem passa alla console di ComfyUI per vedere qual è stato il risultato.
Come compilare HIDEAGEM e tutte le dipendenze dal sorgente:
HIDEAGEM\builds\visual_studio\2022I binari verranno prodotti in HIDEAGEM\bin
Per testare, installa Python poi:
pip install -r requirements.txt
python HIDEAGEM.py demo
Premi CTRL + C per uscire dalla demo.
Prima, installa cmake e make, poi:
git clone --recurse-submodules https://github.com/CYBERGEM777/HIDEAGEM
cd HIDEAGEM
make
I binari verranno prodotti in HIDEAGEM/bin
Per testare, installa python3 poi:
pip install -r requirements.txt
python HIDEAGEM.py demo
Premi CTRL + C per uscire dalla demo.
Dopo la compilazione, HIDEAGEM può essere utilizzato tramite HIDEAGEM.py:
cd HIDEAGEM
pip install -r requirements.txt
python HIDEAGEM.py [ args ]
HIDEAGEM può nascondere Gem (file) all'interno di qualsiasi altro file, che HIDEAGEM chiama bit Ocean.
HIDEAGEM.py cercherà di rilevare se l'Ocean di input è un file immagine e, in tal caso, utilizzerà solo i byte dei pixel dell'immagine come bit Ocean. Il resto del file immagine verrà completamente scartato e l'immagine Gem verrà salvata nella directory di output specificata come immagine .png con lo stesso nome del file dell'immagine di input.
Per nascondere una Gem, passa a HIDEAGEM un Ocean, uno o più Gem File e una password. Se non viene specificata una directory di output, il nascondimento della Gem procederà ma l'output non verrà salvato su disco.
python HIDEAGEM.py hide --ocean MORIA.JPEG --files RUBY.TXT EMERALD.TXT SAPPHIRE.TXT --output gem_images/ --password mellon
I file di testo Gem verranno nascosti all'interno dei byte dei pixel copiati da MORIA.JPEG, e l'immagine Gem risultante MORIA.PNG verrà salvata nella directory gem_images.
Se viene utilizzata un'immagine RGBA come Ocean, i byte del canale alfa e i byte RGB di eventuali pixel completamente trasparenti non verranno scritti.
Trovare Gem è semplice ( se hai la password ! ):
python HIDEAGEM.py find --ocean MORIA.PNG --output gem_images/ --password mellon
HIDEAGEM cercherà Gem nell'Ocean MORIA.PNG con la password "mellon" e, se ne trova, le salverà in gem_images.
Se la ricerca Gem viene eseguita senza una directory di output, i file Gem verranno estratti (se trovati) ma nulla verrà salvato su disco.
ATTENZIONE: Funzionalità sperimentale !!! Usala a tuo rischio !
HIDEAGEM può piazzare un incantesimo Time Trap sulle Gem in modo che sia più difficile forzare la password con brute force.
I Time Trap hanno un livello da 0 a 7 che cambia il tempo necessario per estrarre la Gem e verificare la password.
Il livello 0 non aggiunge tempo extra: l'incorporamento e l'estrazione della Gem richiedono lo stesso tempo che senza un Time Trap.
I livelli da 1 a 7 hanno tempi di estrazione più lunghi, con 1 il più breve e 7 il più lungo.
Quando viene inserita la password corretta, la Gem viene estratta utilizzando il livello Time Trap specificato al momento del nascondimento.
Quando viene inserita una password errata, un livello Time Trap casuale viene pescato dall'Ocean con un'alta probabilità di imbattersi in quello più lento:
LIVELLO 7 = 50% (1/2)
LIVELLO 6 = 25% (1/4)
LIVELLO 5 = 12.5% (1/8)
LIVELLO 4 = 6.25% (1/16)
LIVELLO 3 = 3.125% (1/32)
LIVELLO 2 = 1.5625% (1/64)
LIVELLO 1 = 0.78125% (1/128)
LIVELLO 0 = 0.39062% (1/256)
Circa la metà dei tentativi di brute-force della password selezionerà il livello 7, indipendentemente dal livello utilizzato per nascondere la Gem (anche livello 0).
È possibile nascondere Gem che richiedono meno di un secondo per essere estratte, ma che richiedono diversi minuti per un singolo tentativo di brute-force della password.
Il prezzo del Time Trap è la comodità: inserire accidentalmente la password sbagliata può costare molto tempo, quindi non è adatto per contesti in cui è necessario un feedback immediato sulla password errata.
Per aggiungere un Time Trap a una Gem, basta aggiungere il flag --timetrap, con un livello opzionale da 0 a 7 (se non specificato, viene selezionato 0):
python HIDEAGEM.py hide --ocean MORIA.JPEG --files DIAMOND.TXT --output gem_images/ --password mellon --timetrap [level]
Per trovare una Gem Time Trap, basta aggiungere il flag --timetrap (non è necessario includere il livello):
python HIDEAGEM.py find --ocean MORIA.PNG --output gem_images/ --password mellon --timetrap
Nota che HIDEAGEM find non cerca automaticamente le Gem Time Trap a meno che non gli venga chiesto.
Se vuoi vedere HIDEAGEM generare sigilli Gem casuali nascondendo dati casuali in un Ocean casuale, puoi eseguire la modalità demo:
python HIDEAGEM.py demo
Se vuoi vedere HIDEAGEM nascondere e trovare Gem il più velocemente possibile, puoi eseguire alcuni test unitari:
python HIDEAGEM.py unit
Premi CTRL + C per uscire da entrambe le modalità.
HIDEAGEM è concesso in licenza sotto una licenza permissiva + MAGIC AI LICENSE [ MAGIC-AL]