Programma di criptazione/decriptazione (Parte 2)

Pubblicità

M1n021

Utente Attivo
Messaggi
213
Reazioni
92
Punteggio
42
Il topic, come si evince dal titolo, vuole essere una continuazione (si spera più serena e ragionata) della seguente discussione chiusa un po' di tempo fa: https://forum.tomshw.it/threads/programma-di-criptazione-decriptazione.932244/

Il fatto che il metodo ideato da @piergiac-1, stando alle sue sperimentazioni, sembrasse funzionare, mi ha incuriosito, e quindi ho deciso di approfondire la questione cercando di capire cosa avvenisse matematicamente dietro le quinte, in modo da poter giungere alla fine ad una sua dimostrazione o confutazione.



Il primo passo è stato quello di inquadrare meglio e formalizzare il metodo proposto dall'autore, che più o meno dovrebbe essere il seguente.
Sia p un numero primo e siano e1 > e2 e b degli interi positivi. Sia poi z = p^[(e1+e2)/2] (dove le parentesi quadre indicano in questo caso la divisione intera), mentre p1 e p2 sono due generici numeri primi appartenenti rispettivamente agli intervalli [p^e1 + 1 ; p^e1 + 2^b] e [p^e2 + 1 ; p^e2 + 2^b] . Si afferma che determinati valori di p, e1, e2 e b individuano una famiglia di semiprimi s = p1*p2 (costituiti cioè dal prodotto di due primi prelevati da ciascuno dei suddetti due intervalli) per cui la formula MCD(s , s mod z) fornisce la fattorizzazione del semiprimo (restituendo il MCD o p1 o p2 ). Fine.



Non starò qui a tediarvi con tutti i passaggi, mi limito quindi a dire che, ragionando matematicamente su quanto appena scritto, ho dedotto che il suddetto MCD non può restituire il maggiore dei due numeri primi (ossia p1), quindi qualora il metodo fosse corretto dovrà per forza essere

a) MCD(s , s mod z) = MCD(p1*p2 , p1*p2 mod z) = p2

Inoltre dalla a) si deduce che p1*p2 mod z deve essere un multiplo di p2 , che in matematichese si può scrivere come

b) (p1*p2 mod z) mod p2 = 0

In seguito, facendo alcuni test su uno degli esempi numerici forniti dall'autore, mi sono reso conto che la proprietà b) non riguarda esclusivamente i numeri primi, ma sussiste per ogni coppia di numeri prelevata dai due intervalli; inoltre essa persiste anche oltre i limiti degli intervalli da lui fissati.
Alla fine, ragionando su questi presupposti, credo di aver capito cosa avviene matematicamente dietro le quinte:
mcd.webp
Dove la 14) dovrebbe essere proprio la proprietà riscontrata sperimentalmente dall'autore.

Per chiarire il senso della mia dimostrazione provo a fare un esempio numerico relativo alla 14).
Innanzitutto scegliamo due valori qualsiasi a e b (con a>b), per esempio a=8361 e b=207 . Il massimo valore della chiave c sarà c_max = a-1 = 8360 = 2^3*5*11*19; gli altri valori assumibili dalla chiave c sono i divisori di a-1 maggiori di b , come per esempio c_1 = 2^2*5*19 = 380 o c_2 = 5*11*19 = 1045 .
A questo punto siamo in grado di definire precisamente gli intervalli da cui prelevare i numeri primi, ossia [a ; a+i] e [b ; b+j) , con i e j definiti rispettivamente dalla 5) e dalla 6) (da cui si può notare che j dipende da i ). Volendo però si può semplificare il tutto riducendo gli intervalli a [a ; a+m] e [b ; b+m] , con m ricavabile dalla 8), da cui peraltro si deduce che al diminuire della chiave c diminuisce anche m ; quindi il massimo valore di m , e di conseguenza gli intervalli più ampi, si ottengono per c = c_max , e facendo i conti nel nostro caso si ottiene m=33 .
Quindi in definitiva la formula MCD(A*B , A*B mod c_max) = B sarà valida per tutti i numeri primi A e B prelevati rispettivamente dagli intervalli [8361 ; 8361+33] e [207 ; 207+33] .



In seguito poi si potrà anche approfondire la parte del metodo sviluppato dall'autore più legata alla crittografia, ma per il momento mi vorrei soffermare sulla parte più matematica, anche perché mi sembra di ricordare che c'erano alcuni utenti interessati alla questione.
Ovviamente eventuali osservazioni o correzioni relative alla dimostrazione matematica sono ben accette.
 
Ultima modifica:
mi fido della parte matematica!
In seguito poi si potrà anche approfondire la parte del metodo sviluppato dall'autore più legata alla crittografia
quella parte non può semplicemente funzionare: la "(de)cifratura" la fa in 3 soli passi:

a = s mod chiave dove s è il semiprimo, con s=x*y con x,y primi, e appare "chiave magica"
b = s - a
p = MCD(a,b)
dove s dovrebbe essere primo

innazitutto la chiave nel codice non è definita, non ci sono istruzioni che la esplicitino né funzioni che la calcolino, ma su questo ci torno dopo. Con questa premessa la chiave è arbitraria, dal punto di vista matematico potrebbe perfino coincidere con uno tra x ed y, in tal caso se sostituisci x (o y) alla chiave ottieni

a = 0
b = s
p = MCD(0,s) = s

cioè s si fattorizza in sé stesso 🤣

l'obiezione sarebbe che la chiave non va scelta così, e allora come? va calcolata, e qui casca l'asino;
spulciando Internet tra i 1000 thread che ha aperto l'autore, la chiave magica se la calcola a parte e (parole sue) richiede anche giorni di lavoro per il PC 🤣🤣🤣 ma come! non doveva essere O(1) l'algoritmo?
Per tacer del fatto che MCD non è certo O(1) e che in generale un MCD non restituisce affatto un numero primo!

Alla fin della fiera esce fuori che la "chiave" prima se la "calcola" con tempi noti solo a lui, gli esce fuori un numero magico buono SOLO per un certo intervallo, LO INSERISCE HARD-CODED nel codice 🤣 e poi "decifri"!
Se cambi il semiprimo/intervallo), a seconda di quanto è grande ci vuole un'altra chiave, da ricalcolare (con giorni di lavoro...) come sopra.
Quindi cosa fa? calcola a parte e mette in un file di testo tutte le chiavi secondo lui possibili (in chiaro, ma è un dettaglio) 😮 incommentabile! Fai prima ad andare in vacanza per 6 mesi e lasciare porte e finestre spalancate a chiunque passi di là.
Non va bene letteralmente nulla di nulla, né matematicamente, né nei tempi né dal punto di vista sw, né della sicurezza.

Ma che non funzioni te lo dice la precedente discussione:
  • gli hanno dato da fattorizzare un semiprimo e non c'è riuscito, bastava quello;
  • gli hanno fornito 2 primi da moltiplicare e poi fattorizzare, invece di usare quelli li ha cambiati
Che un dilettante prenda una cantonata ci sta, le non-risposte perniciose che fornisce rendono impossibile discuterci.

Vai nel sito dell'autore a questa pagina: https://www.gc57crypto.net/presentazione-gc57eal
cito testualmente:
Codice:
Quando si parla di Byte e bit è facile cadere nella incomprensione più totale.
Il Byte è un carattere  o un simbolo rappresentato in bit: per esempio ‘!’ è un Byte e viene rappresentato con 6 bit  100001
e il suo codice decimale è 33.  ‘a’  è un Byte e viene rappresentato con 7 bit 1100001
e il suo codice decimale è 97.
‘©’ è un Byte e viene rappresentato con 8 bit 10101001 e il suo codice decimale è 169.
bit-byte.webp
byte da 6 bit, byte da 7 bit... 🤬
 
Pubblicità
Pubblicità
Indietro
Top