Applicativo che consente di criptare e decriptare testi utilizzando l'algoritmo AES con chiavi a 256 bit e in modalità GCM (Galois/Counter Mode)
Algoritmo Utilizzato: AES-256-GCM
Gestione degli IV: Ogni IV generato casualmente (utilizzando la classe SecureRandom) viene inserito aggiungendo 16 bytes all'inizio dei dati cifrati
Formato del KeyStore: BCFKS
Compressione: GZip
ECDH: ECC-384
Il software per poter criptare e/o decriptare ha bisogno di accedere ad un KeyStore (BCFKS) da cui preleva la chiave scelta.
- Appena avviato il software verifica la presenza di un KeyStore con nome "KeyStore.bcfks", se non trovato provvede a crearne uno chiedendo una password (password generale del KeyStore)
- è possibile specificare un keystore diverso da "KeyStore.bcfks" avviando il programma nel modo seguente:
java -jar HackerInsideTextEncryptionUtility.jar <keystore>
- è possibile specificare un keystore diverso da "KeyStore.bcfks" avviando il programma nel modo seguente:
- Per poter aggiungere una chiave ad un KeyStore è possibile utilizzare l'apposita scheda nelle impostazioni (FILL) oppure utilizzare uno dei tanti KeyStore explorer disponibili (consigliato https://keystore-explorer.org/)
- Se non viene specificato un keystore differente il file "KeyStore.bcfks" deve rimanere dentro la stessa cartella dove risiede l'eseguibile
Per criptare un file procedere come segue:
- Avviare il programma e sbloccare il KeyStore utilizzando la propria password
- Selezionare dal menù a tendina la chiave che si desidera utilizzare
- Inserire il testo da criptare (o caricarlo da un file tramite l'apposita funzione nel menù contestuale)
- Premere il bottone ENCRYPT Il testo scritto sarà ora criptato, codificato e formattato sulla base delle opzioni da noi scelte.
Per criptare un file procedere come segue:
- Avviare il programma e sbloccare il KeyStore utilizzando la propria password
- Selezionare dal menù a tendina la chiave che si desidera utilizzare
- Inserire il testo criptato (o caricarlo da un file tramite l'apposita funzione nel menù contestuale)
- Premere il bottone DECRYPT
-
ENCODING: Codifica che viene utilizzata per la rappresentazione del testo criptato, sono supportate:
- Base64
- Base58
- Esadecimale (Hex)
- PGP Word list
- Base36
- Base32
- Base32-C (Versione modificata di Base32 che utilizza il carattere '9' per il padding)
-
SPACING: Aggiunge uno spazio dopo "n" caratteri (Disabilitato con codifica PGP Word list)
-
TextArea Wrapping: Opzione di "a capo automatico" della textArea
-
GZIP Compression: abilità / disabilità la compressione dei dati (comprime e poi cripta)
Queste informazioni vengono memorizzate attraverso le "Java Preferences API"
Questa funzionalità presente nelle impostazioni consente a due utenti di "mettersi d'accordo" mediante un mezzo non sicuro su una chiave che si desidera utilizzare.
- Aprire le impostazioni e selezionare l'apposita scheda (ECDH)
- Premere il bottone "1 - INIT" per generare la propria coppia di chiavi (pubblica e privata)
- Inviare al proprio interlocutore la propria chiave pubblica (MY PUBLIC KEY)
- Copiare e incollare nella casella di testo OTHER PUBLIC KEY la chiave pubblica che il tuo interlocutore ti ha inviato
- Premre il bottone "2 - CALC" per calcolare la chiave condivisa (KEY)
- Verificare ora con il proprio interlocutore che i valori KCV (Key Check Value) siano identici da entrambe le parti
- Premere il bottone "3 - ADD" e seguire la procedura guidata per aggiungere la chiave al proprio KeyStore
ATTENZIONE!
- Ogni qualvolta si preme il bottone "1 - INIT" o si riavvia il programma tutte le informazioni relative alla funzione ECDH vengono resettate, occore quindi sincronizzarsi con il proprio interlocutore per assicurare il corretto scambio delle chiavi!
- È buona norma verificare SEMPRE che i valori KCV siano equivalenti al fine di evitare chiavi corrotte (o semplicemente diverse).
- Verificare sempre l'identità del proprio interlocutore al fine di evitare MiTM
In caso di emergenza è possibile premere il bottone rosso ZEROIZE che provvederà ad CORROMPERE PERMANENTEMENTE IL KEYSTORE (viene sovrascritto con bytes casuali generati sul momento)
Procedura di Zeroize:
- Premere il bottone ZEROIZE.
- Prendere nota del codice che viene generato.
- Inserire il codice ed attendere il messaggio di conferma.
- Generare la chiave di 256 bit in modo completamente casuale (possibilmente usando dispositivi RNG hardware e macchine "air-gapped").
- Non archiviare mai la chiave in chiaro e/o su supporti di memoria non sicuri.
- Comunica sempre al tuo interlocutore l'alias della chiave da utilizzare.
- Comunica sempre al tuo interlocutore le tue intenzioni riguardo la codifica da utilizzare e l'eventuale uso della compressione
- Evita di utilizzare la funzione per visulizzare la chiave se non sei in un luogo sicuro con dispositivi sicuri.
- Riavviare il programma dopo aver inserito una nuova chiave.
Questo software è a puro scopo di divertimento, non deve essere preso in considerazione come punto di riferimento.
Non mi assumo nessuna responsabilità di eventuali danni provocati da questo codice o da suoi possibili usi impropri.
Data encryption icons created by kerismaker - Flaticon
Libreria utilizzata per la codifica PGP Word List
- https://it.wikipedia.org/wiki/Advanced_Encryption_Standard
- https://en.wikipedia.org/wiki/Galois/Counter_Mode
- https://github.com/multiformats/java-multibase/blob/master/src/main/java/io/ipfs/multibase/Base58.java
- https://neilmadden.blog/2016/05/20/ephemeral-elliptic-curve-diffie-hellman-key-agreement-in-java/
- https://en.wikipedia.org/wiki/Base36