Cos'è Cyphersol?
Cyphersol è un sistema innovativo di codifica e decodifica, estremamente versatile.
Il sistema si basa sulla suddivisione di un testo da codificare in due elementi distinti e univoci in ogni loro parte.
Per ricostruire il testo originale, sarà necessario disporre di entrambi gli elementi, poiché singolarmente non hanno alcuna utilità.
Grazie alla sua struttura e al suo sistema di codifica, offre un altissimo livello di sicurezza in diversi ambiti.
Il sistema si basa sulla suddivisione di un testo da codificare in due elementi distinti e univoci in ogni loro parte.
Per ricostruire il testo originale, sarà necessario disporre di entrambi gli elementi, poiché singolarmente non hanno alcuna utilità.
Grazie alla sua struttura e al suo sistema di codifica, offre un altissimo livello di sicurezza in diversi ambiti.
La matrice e il codice
Per poter codificare un testo con Cyphersol, è necessario, innanzitutto, generare una matrice univoca, che rappresenta il primo dei due elementi indispensabili.
Successivamente, utilizzando questa matrice, si potrà ottenere il secondo elemento, il codice univoco.
Questi due elementi, matrice e codice, sono strettamente collegati.
Potrà ricostruire il testo originale, solo chi li possiede entrambi.
Univocità delle matrici e dei codici
Le matrici e i codici generati da Cyphersol sono sempre univoci, cioè praticamente impossibili da duplicare.
La probabilità che vengano creati anche solo due elementi identici è virtualmente nulla.
Le ragioni dettagliate di questa unicità saranno approfondite più avanti.
Questa caratteristica rende matrici e codici indecifrabili e inviolabili, garantendo la massima sicurezza.
Successivamente, utilizzando questa matrice, si potrà ottenere il secondo elemento, il codice univoco.
Questi due elementi, matrice e codice, sono strettamente collegati.
Potrà ricostruire il testo originale, solo chi li possiede entrambi.
Univocità delle matrici e dei codici
Le matrici e i codici generati da Cyphersol sono sempre univoci, cioè praticamente impossibili da duplicare.
La probabilità che vengano creati anche solo due elementi identici è virtualmente nulla.
Le ragioni dettagliate di questa unicità saranno approfondite più avanti.
Questa caratteristica rende matrici e codici indecifrabili e inviolabili, garantendo la massima sicurezza.
Il sistema di codifica
Una parola, una frase, un capitolo di un libro, insomma un qualsiasi documento di testo, sono composti da una serie di elementi.
Questi elementi, lettere, numeri, simboli, spazi, punteggiature e ritorni a capo, sono tutti riconoscibili e identificabili, perché possiedono una loro identità, ed è proprio grazie a questa identità che possiamo leggere e comprendere il contenuto.
Prendiamo come esempio la frase:
Ciao!
Come stai?
Al suo interno troviamo:
2 lettere C maiuscole
2 lettere i minuscole
2 lettere a minuscola
2 lettera o minuscola
1 lettera m minuscola
1 lettera e minuscola
1 lettera s minuscola
1 lettera t minuscola
! = 1
? = 1
spazi = 1
ritorni a capo = 1
In tutto, la frase è composta da 16 elementi, ciascuno con una precisa identità.
Tutti questi elementi, nella loro sequenza, sono ciò che ci permette di identificare e capire la frase.
Questo perché ogni elemento ripetuto, anche in posizioni diverse, ha una precisa identità.
Una a minuscola sarà sempre una a minuscola, e noi la riconosceremo sempre come tale, così come uno spazio sarà uno spazio in qualsiasi posizione lo troviamo.
Ora immaginiamo di inserire questi elementi in 16 box
Questi elementi, lettere, numeri, simboli, spazi, punteggiature e ritorni a capo, sono tutti riconoscibili e identificabili, perché possiedono una loro identità, ed è proprio grazie a questa identità che possiamo leggere e comprendere il contenuto.
Prendiamo come esempio la frase:
Ciao!
Come stai?
Al suo interno troviamo:
2 lettere C maiuscole
2 lettere i minuscole
2 lettere a minuscola
2 lettera o minuscola
1 lettera m minuscola
1 lettera e minuscola
1 lettera s minuscola
1 lettera t minuscola
! = 1
? = 1
spazi = 1
ritorni a capo = 1
In tutto, la frase è composta da 16 elementi, ciascuno con una precisa identità.
Tutti questi elementi, nella loro sequenza, sono ciò che ci permette di identificare e capire la frase.
Questo perché ogni elemento ripetuto, anche in posizioni diverse, ha una precisa identità.
Una a minuscola sarà sempre una a minuscola, e noi la riconosceremo sempre come tale, così come uno spazio sarà uno spazio in qualsiasi posizione lo troviamo.
Ora immaginiamo di inserire questi elementi in 16 box
(RC = Ritorno a capo, SP = Spazio)
Fatto questo svuotiamo i box e al loro posto inseriamo delle stringhe univoche e casuali.
In questo modo eliminiamo l'identità degli elementi.
Ogni elemento essendo univoco e casuale non potrà più essere un riferimento utile a permettere l'identificazione tramite confronto con altri elementi .
Per esempio, analizzando questo risultato, potremo notare che le due stringhe corrispondenti alle C maiuscole sono:
Om
Rk
Uniamo la sequenza delle stringhe, che d'ora in poi chiameremo minicodici, ed otteniamo il seguente codice completo:
OmKy3#yKo#5lEi3Fu&QokRkC9h&Z1u#yLt*UoUgqwaZrtzBch?rC0%lsO*t
Ogni elemento essendo univoco e casuale non potrà più essere un riferimento utile a permettere l'identificazione tramite confronto con altri elementi .
Per esempio, analizzando questo risultato, potremo notare che le due stringhe corrispondenti alle C maiuscole sono:
Om
Rk
Uniamo la sequenza delle stringhe, che d'ora in poi chiameremo minicodici, ed otteniamo il seguente codice completo:
OmKy3#yKo#5lEi3Fu&QokRkC9h&Z1u#yLt*UoUgqwaZrtzBch?rC0%lsO*t
La matrice
Ovviamente ora vi starete chiedendo da dove nascono i minicodici.
Cosa significa che sono univoci.
Come si può dimostrare che il codice è indecifrabile.
E come si fa, partendo dal codice, a risalire alla frase in chiaro.
Un minicodice può essere presente una sola volta all'interno del codice completo.
Diventa chiaro che, in questo modo, non sarà possibile risalire agli elementi in chiaro corrispondenti, se possediamo solamente il codice completo.
Il segreto è l'elemento chiave del sistema Cyphersol: la Matrice.
Cosa significa che sono univoci.
Come si può dimostrare che il codice è indecifrabile.
E come si fa, partendo dal codice, a risalire alla frase in chiaro.
Un minicodice può essere presente una sola volta all'interno del codice completo.
Diventa chiaro che, in questo modo, non sarà possibile risalire agli elementi in chiaro corrispondenti, se possediamo solamente il codice completo.
Il segreto è l'elemento chiave del sistema Cyphersol: la Matrice.
Struttura della matrice
La matrice è un file *.json che conterrà come chiavi tutti gli elementi codificabili, attualmente 215 tra caratteri maiuscoli, minuscoli, numeri, simboli, caratteri accentati, punteggiature, spazio e ritorno a capo.
Ad ognuno di essi assegnerà un numero di minicodici determinato dall'utente (nelle versioni gratuite delle app il numero è predefinito).
Cosa significa in pratica.
Prendiamo come esempio una matrice creata con 100 minicodici per elemento.
A tutti i 215 elementi codificabili verranno assegnati 100 minicodici univoci.
Il che significa un determinato minicodice sarà presente, nella matrice, tassativamente una sola volta.
Una matrice simile di fatto conterrà 21500 minicodici univoci.
Ad ognuno di essi assegnerà un numero di minicodici determinato dall'utente (nelle versioni gratuite delle app il numero è predefinito).
Cosa significa in pratica.
Prendiamo come esempio una matrice creata con 100 minicodici per elemento.
A tutti i 215 elementi codificabili verranno assegnati 100 minicodici univoci.
Il che significa un determinato minicodice sarà presente, nella matrice, tassativamente una sola volta.
Una matrice simile di fatto conterrà 21500 minicodici univoci.
Fase di codifica
Durante la fase di codifica, le app che utilizzano il sistema Cyphersol come Codix, Cypass e Cyphy, assegnano ad ogni elemento un minicodice casuale preso dalla matrice corrispondente al determinato elemento.
Ognuno di questi minicodici viene poi inserito in sequenza basandosi sulla posizione dell’elemento codificato e l’insieme di questi minicodici inseriti in sequenza forma il codice completo e univoco esso stesso.
All'interno del codice un minicodice potrà essere presente una sola volta.
Per farvi comprendere questo concetto usiamo un esempio semplice.
L'utente crea una matrice limitata a 5 minicodici per elemento.
Immaginiamo ora di voler codificare solamente l’elemento A maiuscola
Vediamo quali sono I 5 minicodici assegnati alla A maiuscola nella matrice
"A": ["Mpro", "Ikne", "Nmikm", "C6v#e", "Lg@" ],
Codifica AAA
Risultato: C6v#eNmikmIkne (l'insieme dei minicodici: C6v#e Nmikm Ikne)
Codifica AAAA
Risultato: Lg@NmikmC6v#eMpro (l'insieme dei minicodici: Lg@ Nmikm C6v#e Mpro)
Codifica AAAAA
Risultato: MproNmikmC6v#eIkneLg@ (l'insieme dei minicodici: Mpro Nmikm C6v#e Ikne Lg@)
Se ora l’utente provasse a codificare AAAAAA.
Riceverebbe un errore eloquente:
Codici insufficienti.
Non ci sono abbastanza minicodici per codificare il carattere A
Il sistema, infatti, non prevede la possibilità di riutilizzare uno dei minicodici già utilizzati.
Questo per far si che nessun minicodice all’interno del codice possa essere un riferimento per altri elementi presenti.
Ognuno di questi minicodici viene poi inserito in sequenza basandosi sulla posizione dell’elemento codificato e l’insieme di questi minicodici inseriti in sequenza forma il codice completo e univoco esso stesso.
All'interno del codice un minicodice potrà essere presente una sola volta.
Per farvi comprendere questo concetto usiamo un esempio semplice.
L'utente crea una matrice limitata a 5 minicodici per elemento.
Immaginiamo ora di voler codificare solamente l’elemento A maiuscola
Vediamo quali sono I 5 minicodici assegnati alla A maiuscola nella matrice
"A": ["Mpro", "Ikne", "Nmikm", "C6v#e", "Lg@" ],
Codifica AAA
Risultato: C6v#eNmikmIkne (l'insieme dei minicodici: C6v#e Nmikm Ikne)
Codifica AAAA
Risultato: Lg@NmikmC6v#eMpro (l'insieme dei minicodici: Lg@ Nmikm C6v#e Mpro)
Codifica AAAAA
Risultato: MproNmikmC6v#eIkneLg@ (l'insieme dei minicodici: Mpro Nmikm C6v#e Ikne Lg@)
Se ora l’utente provasse a codificare AAAAAA.
Riceverebbe un errore eloquente:
Codici insufficienti.
Non ci sono abbastanza minicodici per codificare il carattere A
Il sistema, infatti, non prevede la possibilità di riutilizzare uno dei minicodici già utilizzati.
Questo per far si che nessun minicodice all’interno del codice possa essere un riferimento per altri elementi presenti.
Spazi e Ritorno a capo
Ciò che, tuttavia, rende tutto il sistema a prova di bomba è un altro fattore.
Anche gli spazi e i ritorno a capo sono riconosciuti come elementi alla stregua di tutti gli altri caratteri.
Analizziamo questo esempio:
a
b
Ovviamente spazi e ritorni a capo non si vedono e noi potremo pensare che il sistema codificherà solamente i caratteri minuscoli a e b.
Ma io so che prima della a minuscola ho inserito 3 spazi e ne inseriti 2 anche dopo. Poi ho inserito 2 ritorni a capo, altri 2 spazi e la b minuscola.
In totale 11 elementi
Anche gli spazi e i ritorno a capo sono riconosciuti come elementi alla stregua di tutti gli altri caratteri.
Analizziamo questo esempio:
a
b
Ovviamente spazi e ritorni a capo non si vedono e noi potremo pensare che il sistema codificherà solamente i caratteri minuscoli a e b.
Ma io so che prima della a minuscola ho inserito 3 spazi e ne inseriti 2 anche dopo. Poi ho inserito 2 ritorni a capo, altri 2 spazi e la b minuscola.
In totale 11 elementi
Ecco un risultato possibile della codifica:
K0UoTdBjKvhL8efQwo!mToa5Pcx5rYswQo4
K0UoTdBjKvhL8efQwo!mToa5Pcx5rYswQo4
Considerando spazi e ritorni a capo come elementi, esattamente come tutti gli altri caratteri, otterremo sempre un singolo codice univoco, formato da decine, centinaia o migliaia di minicodici a loro volta univoci e frutto di una matrice essa stessa univoca.
Questo ci permette di avere una certezza.
Il codice senza la matrice è un file assolutamente indecifrabile dato che non esisterà mai un modo di associare un minicodice ad un qualsiasi elemento senza la matrice stessa.
E non sarà mai possibile, tramite il codice, identificare il numero di parole presenti nella frase codificata.
Questo ci permette di avere una certezza.
Il codice senza la matrice è un file assolutamente indecifrabile dato che non esisterà mai un modo di associare un minicodice ad un qualsiasi elemento senza la matrice stessa.
E non sarà mai possibile, tramite il codice, identificare il numero di parole presenti nella frase codificata.
Ecco le regole
1 - Il minicodice deve essere formato da un minimo di 2 ad un massimo di 5 caratteri
2 – Per la costruzione del minicodice si possono usare:
Maiuscole (massimo 1)
minuscole, numeri e simboli (massimo 4) in ordine casuale
3 - Il carattere di apertura del minicodice deve essere una lettera maiuscola
2 – Per la costruzione del minicodice si possono usare:
Maiuscole (massimo 1)
minuscole, numeri e simboli (massimo 4) in ordine casuale
3 - Il carattere di apertura del minicodice deve essere una lettera maiuscola
Fase di decodifica
Ciò che permette alle varie app basate sul sistema Cyphersol, ma anche all’utente, manualmente, la ricostruzione del testo originale, oltre naturalmente al possesso della matrice e del codice, è proprio la natura stessa dei minicodici.
L’elemento chiave sono le regole riguardanti la lettera maiuscola.
Il fatto che il primo carattere è tassativamente una lettera maiusocla e che all’interno di un minicodice può esserci solo una lettera maiuscola, permette al sistema di identificare facilmente I vari minicodici.
Dopodiché si tratta solo di estrarre il minicodice e cercarlo all’interno della matrice.
Ovviamente le app eseguono questa operazione in maniera immediata ma tutto questo, volendo, si può eseguire anche manualmente.
L’elemento chiave sono le regole riguardanti la lettera maiuscola.
Il fatto che il primo carattere è tassativamente una lettera maiusocla e che all’interno di un minicodice può esserci solo una lettera maiuscola, permette al sistema di identificare facilmente I vari minicodici.
Dopodiché si tratta solo di estrarre il minicodice e cercarlo all’interno della matrice.
Ovviamente le app eseguono questa operazione in maniera immediata ma tutto questo, volendo, si può eseguire anche manualmente.
🧪 Verifica dell'unicità dei minicodici da terminale
Abbiamo già visto nell'esempio precedente della codifica della A maiuscole come verificare l'univocità dei minicodici.
Tuttavia come possiamo verificare l'univocità su matrici con un numero di minicodici molto più alto?
Premessa: nelle varie app ci sarà una funzione apposita che permette tale verifica.
Ora vediamo come farlo tramite il terminale Linux.
Esempio:
Matrice con 1000 minicodici × 215 elementi = 215000 minicodici
Obiettivo: verificare che siano tutti univoci e pertanto diversi tra loro.
Tuttavia come possiamo verificare l'univocità su matrici con un numero di minicodici molto più alto?
Premessa: nelle varie app ci sarà una funzione apposita che permette tale verifica.
Ora vediamo come farlo tramite il terminale Linux.
Esempio:
Matrice con 1000 minicodici × 215 elementi = 215000 minicodici
Obiettivo: verificare che siano tutti univoci e pertanto diversi tra loro.
🔧 Comandi su Linux (matrix.json)
Assicurati di essere nella directory giusta ed esegui questi comandi
jq -r '.[] | .[]' matrix.json | wc -l
jq -r '.[] | .[]' matrix.json | sort | uniq | wc -l
jq -r '.[] | .[]' matrix.json | sort | uniq | wc -l
Sostituire nome_della_matrice.json con il nome vero della matrice
📌 Cosa fanno questi comandi:
Il primo comando conta il numero totale di minicodici nella matrice
Il secondo comando conta invece il numero di minicodici univoci
Se tutto è corretto, i due numeri devono essere identici.
Esempio:
215000
215000
Se volete un ulteriore conferma potrete eseguire un test modificando la matrice inserendo dei duplicati, supponiamo 5, otterrete un risultato simile a questo:
215000
214995
❗ Questo significa che 5 minicodici sono duplicati, e quindi la matrice non è più valida per Cyphersol.
Conclusioni
Ogni elemento è univoco
Ogni elemento che viene creato da Cyphersol è univoco.
La matrice è univoca.
Il codice è univoco e formato da decine, centinaia o migliaia di ulteriori minicodici a loro volta univoci.
Non esisterà mai un solo elemento duplicato.
In pratica la codifica di uno stesso testo eseguita anche un infinità di volte darà risultati sempre diversi.
Il sistema assegna un minicodice univoco a ogni lettera (maiuscola, minuscola, accentata o speciale), numero, simbolo, spazio e ritorno a capo.
Questo processo trasforma qualsiasi testo in un unico grande codice complessivo, anch’esso univoco, che può essere decodificato esclusivamente tramite una matrice altrettanto univoca.
È proprio questa caratteristica che rende il sistema totalmente sicuro e inviolabile.
Il primo comando conta il numero totale di minicodici nella matrice
Il secondo comando conta invece il numero di minicodici univoci
Se tutto è corretto, i due numeri devono essere identici.
Esempio:
215000
215000
Se volete un ulteriore conferma potrete eseguire un test modificando la matrice inserendo dei duplicati, supponiamo 5, otterrete un risultato simile a questo:
215000
214995
❗ Questo significa che 5 minicodici sono duplicati, e quindi la matrice non è più valida per Cyphersol.
Conclusioni
Ogni elemento è univoco
Ogni elemento che viene creato da Cyphersol è univoco.
La matrice è univoca.
Il codice è univoco e formato da decine, centinaia o migliaia di ulteriori minicodici a loro volta univoci.
Non esisterà mai un solo elemento duplicato.
In pratica la codifica di uno stesso testo eseguita anche un infinità di volte darà risultati sempre diversi.
Il sistema assegna un minicodice univoco a ogni lettera (maiuscola, minuscola, accentata o speciale), numero, simbolo, spazio e ritorno a capo.
Questo processo trasforma qualsiasi testo in un unico grande codice complessivo, anch’esso univoco, che può essere decodificato esclusivamente tramite una matrice altrettanto univoca.
È proprio questa caratteristica che rende il sistema totalmente sicuro e inviolabile.




