Newsgroup: it.comp.sicurezza.pgp
Titolo: Sono nuovo, mi servirebbe....

Salve, eccomi qui!... Questo NG mi mancava :)..
Mi hanno spedito qui da Java...
Cosa cerco:
Cerco... ma ho ho idea se sto scrivendo una cavolata impossibile... un
algoritmo "semplice" per rendere difficile (non dico impossibile..) la
decifratura di un testo ( composto principalmente da una serie di numeri, ma
anche delle stringhe testo ) e possibilmente comprimerlo in modo che almeno
non sia piu' grande del testo originale.
Mi servirebbe un vero algoritmo di calcolo che possa essere usato con
linguaggi diversi, principalmente Java e Perl. Quindi niente librerie
esterne (credo)
Grazie 1000 per qualsiasi aiuto.
Oxy

Ho trovato e provato un semplicissimo algoritmo di cryptazione, mi chiedo
per curiosita' (non e' un problema se viene decryptato) un sistema simile
quanto tempo richiederebbe per essere decifrato senza avere la password?...
secondi.. minuti.. ore?
Grazie
' Crypt Sample by Matt Hart - 
vbh...@matthart.com
' 
http://matthart.com
'
' I've updated this sample with better encryption.
' Before, my simple XOR encryption could actually
' show the password somewhere in the encrypted
' file (using the file encryption).  This method
' is more secure.  It builds a "key" from the password
' to encrypt and decrypt, rather than using the actual
' password itself for the algorithm.
'
' Note that if you use Crypt$ to decrypt a file's data
' with a single pass, you must uncomment the line
' in the loop, since the initial encryption would have
' been broken into 4096 byte chunks.
In Java:
String encrypt(String Strg, String Password) {
   String b, S = "";
   int i, j = 0, A1, A2, A3;
   for (i = 0; i < Strg.length(); i++) {
       A1 = (int)Password.charAt(j);
      j = ++j % Password.length();
      A2 = (int)Strg.charAt(i);
      A3 = A1 ^ A2;
      b = (A3 > 15 ? "" : "0") + Integer.toHexString(A3);
      S += b;
   }
   return S;
}
in VB:
Function EncryptINI$(Strg$, Password$)
   Dim b$, S$, i As Long, j As Long
   Dim A1 As Long, A2 As Long, A3 As Long, P$
   j = 1
   For i = 1 To Len(Password$)
     P$ = P$ & Asc(Mid$(Password$, i, 1))
   Next
   For i = 1 To Len(Strg$)
     A1 = Asc(Mid$(P$, j, 1))
     j = j + 1: If j > Len(P$) Then j = 1
     A2 = Asc(Mid$(Strg$, i, 1))
     A3 = A1 Xor A2
     b$ = Hex$(A3)
     If Len(b$) < 2 Then b$ = "0" + b$
     S$ = S$ + b$
   Next
   EncryptINI$ = S$
End Function

 secondi.. minuti.. ore?
Provo a fare un po' di crittoanalisi, ditemi dove sbaglio.
Dunque, da quello che ho capito l'algoritmo non fa altro che effettuare un
semplice XOR tra i caratteri della password ripetuta per tutta la lunghezza
della stringa da cifrare e la stringa stessa .
Es:
pwd (K) : pippo
testo (T) : ciao questa è una prova
K          p   i    p   p   o   p   i    p   p   o    p   i    p    p   o
p   i    p   p  o    p    i    p
T          c    i    a   o        q   u   e   s    t    a        è
u   n   a        p   r    o    v   a
C         52 58 53 5E 10 44 44 54 41 45 5E 12 D9 11 44 5F 50 12 41 42 5A 47
50
Facciamo un pochino di crittoanalisi:
Innanzitutto verifichiamo dove e se esistono doppioni nel testo cifrato (C).
ce ne sono 3    , e precisamente   44,50 e 12
Analizzando la distribuzione del testo nel cifrato notiamo che all'interno
sono presenti alcune coppie aventi un valore molto basso rispetto alle altre
in questo caso sono : 10  , 12,11 e ancora 12
E' logico in questo caso supporre che i valori 10,12,11 e 12 possano essere
degli spazi  (dall'algoritmo si evince infatti che l'operazione A1 xor A2
,nel caso A1 sia uno spazio ritorna un valore sempre molto più basso
rispetto a caratteri e numeri).
Abbiamo allora isolato le seguenti cose :   tre ripetizioni  (44,50,12) e 4
spazi (10,12,11,12)
                                                           *  *
*                   *        *     *                         *
                            52 58 53 5E   10   44 44 54 41 45 5E   12   D9
11   44 5F 50   12   41 42 5A 47 50
                             _   _   _   _    spc   _   _   _   _   _   _
spc   _     spc   _   _   _    spc  _   _   _    _   _
Il PRINCIPIO DI KERCKHOFF dice che : LA ROBUSTEZZA DI UN CRITTOSISTEMA NON
DEVE DIPENDERE DALLA SEGRETEZZA DELL'ALGORITMO
Per questo motivo, presupponiamo che l'algoritmo che tu utilizzi sia
conosciuto .
Allora , vediamo subito che il range di valori a nostra disposizione per le
lettere è compreso tra 41 e 5F . Tralasciamo per ora D9.
Dall'algoritmo se ne evince che si tratta di lettere minuscole (basta fare
due conticini).
Andiamo ad analizzare la parola composta da tre lettere      44 5F 50
In italiano potrebbe essere   CON ,PER ,TRA,FRA,UNA,UNO,TRE  (considerando
quelli più usati)
A nostro favore abbiamo la ripetizione  50
Siccome diamo per scontato che il testo sia in italiano possiamo dedurre che
difficilmente una parola finisce con la consonante R e difficilmente con la
consonante N,quindi potenzialmente ci rimangono  TRA,FRA,UNA,UNO,TRE    e
possiamo dedurre che quel 50 sia una A ,una O o una E.
Analiziamo adesso anche il carattere 44 e vediamo che in una parola si
presenta come  (44 44) 54 41 45 E5. Considerando le ipotesi per la terna
(TRA,FRA,UNA,UNO,TRE) vediamo subito che in italiano questa forma 44 44 è
possibile solo se il secondo 44 è una lettera U ,percio' la nostra terna è
UNA.
*                              *     *                         *
                            52 58 53 5E   10   44 44 54 41 45 5E   12   D9
11   44 5F 50   12   41 42 5A 47 50
                             _   _   _   _    spc   _   U  _   _   _   _
spc   _     spc   U  N  A    spc  _   _   _    _   A
Il D9 può essere solo un carattere di ordine elevato e nella tabella asci
standard generalmente sono lettere accentate (considerando un testo
italiano).
Quindi D9 potrebbe essere à,è,ò,ì   visto che è una lettera singola può
essere solo una è.
Il carattere 50 si ripete 2 volte all'interno del crittogramma, ragion per
cui è ovvio pensare (secondo la tabella di frequenze delle lettere italiane)
che sia una lettera a
Ovviamente potrete notare che anche 44 si ripete 3 volte ma si presenta
vicino ad un altro carattere 44 e in italiano non è possibile una forma
AA,OO,UU come inizio di parola
Quindi la terna di lettere potrebbe essere UNA,TRA o FRA
*                              *     *                         *
                            52 58 53 5E   10   44 44 54 41 45 5E   12   D9
11   44 5F 50   12   41 42 5A 47 50
                             _   _   _   _    spc   _   u   _   _   _   _
spc   è     spc   u   n   a    spc    _   _   _   _   a
La lunghezza della ripetizione corrisponde ovviamente anche alla lunghezza
della password,ragion per cui possiamo mettere il tutto su una bella matrice
                                    PWD :    1    2    3    4     5
                                                 52   58  53  5E  spc
                                                 44    u   54  41   45
                                                 5E  spc  è    spc  u
                                                 n      a   spc  41  42
                                                 5A   47   a
Adesso si potrebbe andare anche per tentativi scrivendo un piccolo codice
che provi tutte le combinazioni tali che
            X1 ^ "n" = 5F  , X2  ^ "a" = 50 , X3 ^ spc = 12 , X4 ^ spc = 11
, X5 ^ "u" = 44
e troviamo  X1 = p  X2 = i  X3 = p  X4 = p  X5 = o
                                    PWD :    p     i     p     p     o
                                                 52   58  53  5E  spc
                                                 44    u   54  41   45
                                                 5E  spc  è    spc  u
                                                 n      a   spc  41  42
                                                 5A   47   a
                              p   i    p   p     o     p   i    p   p   o
p      i      p     p     o   p    i      p     p   o   p    i    p
                            52 58 53 5E   10   44 44 54 41 45 5E   12   D9
11   44 5F 50   12   41 42 5A 47 50
                             c    i    a   o            q   u   e   s    t
a             è            u    n   a            p    r   o    v   a
Bene, probabilmente ho scritto parecchi strafalcioni ma ... mi sono
divertito a fare questa piccola analisi :)
La forza computazionale dell'algoritmo è molto bassa.
Una buona soluzione sarebbe quella di crittografare testi abbastanza lunghi
e di utilizzare una chiave lunga come tutto il testo (ad esempio utilizzando
 come chiave il testo di un libro).
Ma comunque a mio avviso rimane un algoritmo poco affidabile.
Ciao
Fabio


Provo a fare un po' di crittoanalisi, ditemi dove sbaglio.
Dunque, da quello che ho capito l'algoritmo non fa altro che effettuare un
semplice XOR tra i caratteri della password ripetuta per tutta la lunghezza
della stringa da cifrare e la stringa stessa .
Es:
pwd (K) : pippo
testo (T) : ciao questa è una prova
K          p i p p o p i p p o p i p p o p i p p o p i p
T          c i a o   q u e s t a   è   u n a   p r o v a
C          5258535E1044445441455E12D911445F501241425A4750
Facciamo un pochino di crittoanalisi:
Innanzitutto verifichiamo dove e se esistono doppioni nel testo cifrato (C).
ce ne sono 3    , e precisamente   44,50 e 12
Analizzando la distribuzione del testo nel cifrato notiamo che all'interno
sono presenti alcune coppie aventi un valore molto basso rispetto alle altre
in questo caso sono : 10  , 12,11 e ancora 12
E' logico in questo caso supporre che i valori 10,12,11 e 12 possano essere
degli spazi  (dall'algoritmo si evince infatti che l'operazione A1 xor A2
,nel caso A1 sia uno spazio ritorna un valore sempre molto più basso
rispetto a caratteri e numeri).
Abbiamo allora isolato le seguenti cose :   tre ripetizioni  (44,50,12) e 4
spazi (10,12,11,12)
               . .           .           .   .   .           .
5258535E  10  44445441455E  12  D9  11  445F50  12  41425A4750
Il PRINCIPIO DI KERCKHOFF dice che : LA ROBUSTEZZA DI UN CRITTOSISTEMA NON
DEVE DIPENDERE DALLA SEGRETEZZA DELL'ALGORITMO
Per questo motivo, presupponiamo che l'algoritmo che tu utilizzi sia
conosciuto .
Allora , vediamo subito che il range di valori a nostra disposizione per le
lettere è compreso tra 41 e 5F . Tralasciamo per ora D9.
Dall'algoritmo se ne evince che si tratta di lettere minuscole (basta fare
due conticini).
Andiamo ad analizzare la parola composta da tre lettere      44 5F 50
In italiano potrebbe essere   CON ,PER ,TRA,FRA,UNA,UNO,TRE  (considerando
quelli più usati)
A nostro favore abbiamo la ripetizione  50
Siccome diamo per scontato che il testo sia in italiano possiamo dedurre che
difficilmente una parola finisce con la consonante R e difficilmente con la
consonante N,quindi potenzialmente ci rimangono  TRA,FRA,UNA,UNO,TRE    e
possiamo dedurre che quel 50 sia una A ,una O o una E.
Analiziamo adesso anche il carattere 44 e vediamo che in una parola si
presenta come  (44 44) 54 41 45 E5. Considerando le ipotesi per la terna
(TRA,FRA,UNA,UNO,TRE) vediamo subito che in italiano questa forma 44 44 è
possibile solo se il secondo 44 è una lettera U ,percio' la nostra terna è
UNA.
               . .           .           .   .   .           .
5258535E  10  44445441455E  12  D9  11  445F50  12  41425A4750
- - - -   spc - - - - - -   spc è   spc u n a   spc - - - - a
Il D9 può essere solo un carattere di ordine elevato e nella tabella asci
standard generalmente sono lettere accentate (considerando un testo
italiano).
Quindi D9 potrebbe essere à,è,ò,ì   visto che è una lettera singola può
essere solo una è.
Il carattere 50 si ripete 2 volte all'interno del crittogramma, ragion per
cui è ovvio pensare (secondo la tabella di frequenze delle lettere italiane)
che sia una lettera a
Ovviamente potrete notare che anche 44 si ripete 3 volte ma si presenta
vicino ad un altro carattere 44 e in italiano non è possibile una forma
AA,OO,UU come inizio di parola
               . .           .           .   .   .           .
5258535E  10  44445441455E  12  D9  11  445F50  12  41425A4750
- - - -   spc - - - - - -   spc è   spc u n a   spc - - - - a
La lunghezza della ripetizione corrisponde ovviamente anche alla lunghezza
della password,ragion per cui possiamo mettere il tutto su una bella matrice
                        PWD :    1   2   3   4   5
                                52  58  53  5E  spc
                                44   u  54  41  45
                                5E  spc  è  spc u
                                 n   a  spc 41  42
                                5A  47   a
Adesso si potrebbe andare anche per tentativi scrivendo un piccolo codice
che provi tutte le combinazioni tali che
X1^"n" = 5F, X2^"a" = 50, X3^spc = 12, X4^spc = 11, X5^"u" = 44
e troviamo  X1 = p  X2 = i  X3 = p  X4 = p  X5 = o
                        PWD :    p   i   p   p   o
                                52  58  53  5E  spc
                                44   u  54  41  45
                                5E  spc  è  spc u
                                 n   a  spc 41  42
                                5A  47   a
p i p p    o  p i p p o p   i   p   p   o p i   p   p o p i p
5258535E  10  44445441455E  12  D9  11  445F50  12  41425A4750
c i a o       q u e s t a       è       u n a       p r o v a
Bene, probabilmente ho scritto parecchi strafalcioni ma ... mi sono
divertito a fare questa piccola analisi :)
La forza computazionale dell'algoritmo è molto bassa.
Una buona soluzione sarebbe quella di crittografare testi abbastanza lunghi
e di utilizzare una chiave lunga come tutto il testo (ad esempio utilizzando
 come chiave il testo di un libro).
Ma comunque a mio avviso rimane un algoritmo poco affidabile.
Ciao

 Ma comunque a mio avviso rimane un algoritmo poco affidabile.
Beh, dipende. Se cifri con XOR usando una chiave di lunghezza pari a
quella del messaggio e di tipo "usa-e-getta" (cioe' da non utilizzarsi mai
piu' per cifrare alti messaggi), hai realizzato un cifrario di Vernam in
configurazione one-time pad. In altre parole, hai realizzato l'unico
cifrario *sicuramente* inviolabile...
-- 
Carlo Luciano
GPG ElG/DSA 4096/1024 Key: 
http://web.tiscali.it/clbianco/clbianco.asc
ID: 0x5324A0DA - Fingerprint: 8B00C61034120506111B143DEDBF71B45324A0DA