---------------------[ previous ]---[ index ]---[ next ]----------------------

==============================================================================
------------[ BFi numero 7, anno 2 - 25/12/1999 - file 14 di 22 ]-------------
==============================================================================


-[ CRYPT0GRAPHY ]-------------------------------------------------------------
---[ VLV-CRYPT v1.0b 32BiT SiNGLEKEY ENGiNE EDiTi0N - Valvoline


,---------------------------------------------------------------------------,
|VlV-Crypt v1.0b - 32Bit SingleKey Engine Edition                           |
|(c) 1999/2000 Valvoline's CReW LABS.                                       |
|...........................................................................|
|CODING:  valv{0}                                                           |
|...........................................................................|
|CONTACT: http://valvoline.cjb.net                                          |
|...........................................................................|
|VERSION: 1.0.16 - 07/12/1999                                               |
|...........................................................................|
|Public Release for BFi #7 Ezine (http://www.s0ftpj.org)                    |
|...........................................................................|
|This program is free software; you can redistribute it and/or modify       |
|it under the terms of the GNU General Public License as published by       |
|the Free Software Foundation; either version 2 of the License, or          |
|(at your option) any later version.                                        |
|                                                                           |
|This program is distributed in the hope that it will be useful,            |
|but WITHOUT ANY WARRANTY; without even the implied warranty of             |
|MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              |
|GNU General Public License for more details.                               |
|                                                                           |
|You should have received a copy of the GNU General Public License          |
|along with this program; if not, write to the Free Software                |
|Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  |
|                                                                           |
|The author of this program may be contacted at valvoline@3isecurity.com    |
'---------------------------------------------------------------------------'
|Tabella Contenuti:                                                         |
|..................                                                         |
|o. Introduzione                                                            |
|o. Breve Descrizione Algoritmi Criptazione                                 |
|o. Funzionamento VlV-Crypt e Breve Manuale D'uso                           |
|o. Future Versioni                                                         |
|o. Ringraziamenti e Crediti                                                |
'---------------------------------------------------------------------------'

,---------------------------------------------------------------------------,
|Introduzione                                                               |
'---------------------------------------------------------------------------'
Tempo fa (Circa 1 Anno), avevo pubblicato su questa stessa ezine un
algoritmo di criptazione a Doppia Chiave (DoubleKey) con fattore di
Criptazione a 32Bit.
Il mio lavoro e ricerca non si e' mai fermato. Nel frattempo, sono cambiati
gli standard, sono cambiati i programmi alla radio, sono cambiate le VeeJay
di MTv (!), ma soprattutto sono cambiati i miei rapporti con il mio docente
di Criptazione Pubblica!

In realta' penso ancora (nell'imparare non c'e' mai fine), che il programma
sia ancora in stato embrionale e che di lavoro da fare ce n'e'(e ce ne sara').

Sono riuscito pero' a fondere tutto quello che ho fatto sin'ora, e di 
miscelarlo in una bella (spero) soluzione grafica sotto Windows. In questi
giorni mi e' girata per le mani l'ultima beta3 di Win2k (Grazie MARK) e
anche compilando e lavorando a grossi regimi sotto quest'ultimo non sembrano
essersi verificati grossi problemi (a parte quelli che mi hanno costretto ad
apportare qualche modifica lampo al CheckSum).

Voglio anche sottolineare (come spiega la "storiella" in testa a questo
articolo), che questo programma e' stato concepito e realizzato per BFi,
ED E' FREEWARE.
Potete farci quello che volete. Io ho poco tempo. Attualmente sto' lavorando
all'ultima beta del nuovo sistema di amministrazione remota (S.I.D.E Winder).
Sto' studiando come un porko e cosa ancora piu' grave sto' collaborando per
l'apertura di un portale Internet... quindi di lavoro ne ho gia' troppo...
...come si dice: ho lanciato l'esca, speriamo che qualcuno abbocchi
all'amo (!).

I sorgenti sono ampiamente documentati ed il codice non è dei piu' ostili.
Insomma: chi vuole lavorarci (ed ha buona volonta') puo' farlo.
Per consigli e suggerimenti sono sempre reperibile ai soliti indirizzi e-mail:

valvoline@s0ftpj.org
valvoline@3isecurity.com

oppure WEB:

http://valvoline.cjb.net

Piantatevi davanti al monitor, prendetevi una birra, accendete una sigaretta
(di quelle buone pero', Marlboro Lights ad esempio). Adesso si inizia...

,---------------------------------------------------------------------------,
|Breve Descrizione Algoritmi Criptazione                                    |
'---------------------------------------------------------------------------'
Si fa' un gran parlare di algoritmi di criptazione. Oltretutto, corregetemi
se sbaglio, questo argomento non è assolutamente nuovo neanche a questa
rivista. Non avro' quindi la pretesa (anche perke' mi fanno male le mani) di
illustrarvi un trattato sulla criptazione. Cercherò soltanto di darvi le
basi di partenza per un futuro (spero), VlV-Crypt v2.0 .

Gli Algoritmi di criptazione, in larga analisi, possono essere divisi in 
due grosse categorie:

o1. Algoritmi di Criptazione a Chiave/i Privata/e
o2. Algoritmi di Criptazione a Chiave Pubblica

Quali sono le differenze?

Gli algoritmi del tipo [o1] si basano sulla segretezza della/e chiave/i
utilizzata/e per la codifica del messaggio.
In questo tipo di sistema NON E' PERMESSA LA DIVULGAZIONE DELLA/E CHIAVE/I,
PENA LA PERDITA DI SICUREZZA DI TUTTO IL SISTEMA.
Il sistema si basa sull'utilizzo della chiave come perno di codifica
del messaggio. I sistemi utilizzati sono di vario tipo. Si passa dalla
semplice somma di matrici N-dimensionali (i bytes della chiave con i bytes
del messaggio originale), a complicati sistemi di XOR con checksum della
chiave.

Gli algoritmi del secondo tipo [o2] sono algoritmi che sfruttano nella
stragrande maggioranza dei casi un sistema di generazione di chiavi con
metodi di fattorizzazione. In pratica viene creata una chiave privata da cui
e' estrapolata una chiave pubblica, da distribuire, ed infine si cripta il
messaggio. L'input del nostro algoritmo di criptazione allora, oltre al BODY,
sarà la nostra chiave privata e la chiave pubblica del/i destinatario/i.
Una volta criptato il messaggio, esso potrà essere decriptato soltanto dai
corrispettivi utenti abilitati durante la fase di cripting, in possesso della
nostra chiave pubblica.
In pratica viene aggiunta una firma elettronica NON CONTRAFFABILE
al messaggio.
La desiderabile proprieta' di cui godono questi sistemi è che questa firma
puo' essere facilmente (e velocemente) verificata da chiunque, ma
difficilmente (in alcuni casi questo e' impossibile) contraffatta e/o
modificata da qualcuno.

Tutto questo è racchiuso in una semplice parola: FATTORIALI.

Proprietà matematica di sicuro conosciuta dai piu' smaliziati lettori (io
personalmente ne ho fin sopra le orecchie di Analisi Matematiche, calcoli
di probabilita', matrici e statistiche), viene utilizzata per la sua
enorme differenza tra la facilita' di trovare numeri primi grandi e la
difficolta' di scomporre in fattori il prodotto di due numeri primi grandi.

Facciamo un esempio per rendere chiaro il concetto.
In un sistema a chiave pubblica, i partecipanti sono in possesso delle
rispettive chiavi Pubbliche (P) e Private (S).

                    Rossi   Bianchi
-----------------+--------+---------+                   
Chiave Pubblica  |   Pr   |   Pb    |
Chiave Privata   |   Sr   |   Sb    |
-----------------+--------+---------+                   

I nostri due partecipanti potranno divulgare la chiave pubblica, ma
NON DOVRANNO MAI CEDERE LA CHIAVE PRIVATA.

Per qualunque nostro messaggio avremo che:

Mex = Sr(Pr(Mex))   <-->  Mex = Pr(Sr(Mex))

Trasformando cioè il messaggio Mex, con le due chiavi Pr e Sr 
successivamente in entrambi i versi, si ottiene lo stesso messaggio.

IN UN SISTEMA DI CRITTOGRAFIA A CHIAVE PUBBLICA, E' ESSENZIALE CHE NESSUNO
TRANNE IL PROPRIETARIO, SIA CAPACE DI CALCOLARE LA FUNZIONE Sr() IN UNA
QUANTITA' DI TEMPO RAGIONEVOLMENTE BASSA. 

Ovviamente, l'ipotesi appena fatta deve valere anche se ogni utente
conosca Pr e possa colcolare Pr() (la funzione inversa di Sr).
La difficolta' maggiore, allora, risiede nel trovare un sistema che
permetta di divulgare la chiave Pr senza per questo rivelare come
calcolare la porzione di codice Sr segreta. Di seguito, vengono illustrati
l'idea ed i passi necessari per implementare il sistema di codifica pubblica
RSA.

Nel sistema RSA, un partecipante crea le sue chiavi nel modo seguente:

o. Seleziona a caso due numeri primi p e q grandi (~1*10^1000000).
o. Calcola n dall'equazione: n = p*q
o. Seleziona un intero piccolo dispari 'e' tale che:
   'e' e O(n) siano primi tra di loro.
   Con: O(n) = (p-1)(q-1)
o. Calcola d, il reciproco di e, modulo O(n)
o. Pubblica la coppia P=(e,n)        <-- Chiave Pubblica RSA
o. Tiene Segreta la coppia S=(d,n)   <-- Chiave Segreta RSA

La trasformazione del messaggio a cui si accennava prima diventa allora:

P(Mex) = (Mex ^ e) mod n

La trasformazione di un messaggio criptato diventa:

S(Cripted) = (Cripted ^ e) mod n

Di seguito espongo un semplice algoritmo conosciuto con il nome
di ELEVAMENTO A POTENZA MODULARE, CHE CALCOLA dati A, B, N: (A ^ B) mod N


long elevamento_a_potenza_modulare(long a,int b[MAX_ELEM],long n) {
  long i, c, d;
  int k=MAX_ELEM;

  for(i=k; i>0; i--) {
    c = 2*c;
    d = (d*d) mod n;
    if (b[i] == 1) {
      c = c+1;
      d = (d*a) mod n;
    }
  }
  return d;
}

Ovviamente, alcune cose, per lavorare su messaggi da criptare, vanno
ritoccate. Ad esempio, quello che nel codice viene dichiarato come array di
interi B dovrebbe essere sostituito da una stringa e la restante porzione
di codice andrebbe modificata di conseguenza, per lavorare sui BIT.

,---------------------------------------------------------------------------,
|Funzionamento VlV-Crypt e Breve Manuale D'uso                              |
'---------------------------------------------------------------------------'
Il VlV-Crypt, nella sua più semplice implementazione, si basa su di un sistema
del tipo [o1] (a chiave privata). Il sistema utilizza una chiave di ingresso
fornita dall'utente a 32Bit (32*8 = 256Bytes [2048 bits]).
La chiave di ingresso viene successivamente passata ad un controllo di
CheckSum e viene XOR/ROR "ata", per criptare BYTE-per-BYTE il file.

.............................................<-\
.............................................  |
	mov	ebp,[chunk_location]           |
	add	ebp,offset chunk_buffer        |
	mov	dl,[ebp]                       |
	xor	dl,[key_check_sum]             |
	xchg	[key_check_sum2],cl            |
	ror	dl,cl                          |
	xchg	[key_check_sum2],cl            |
	rol	dl,cl                          | Checksum Rolling Test
	add	dl,cl                          | ---------------------
	ror	bl,3                           |
	xor	dl,bl                          |
	and	al,ah                          |
	xor	dl,al                          |
	neg	dl                             |
	pop	eax                            |
	xor	dl,al                          |
	mov	[ebp],dl                       |
	jmp	next_byte                  <---/
.............................................
............................................. <--\
	mov	ax,word ptr [current_position]   |
	mov	cx,ax                            |
	mov	bx,ax                            |
	and	al,ah                            |
	xor	dl,al                            |
	ror	bl,3                             |
	xor	dl,bl                            |Inizio Cripting
	add	cl,ch                            |---------------
	sub	dl,cl                            |
	ror	dl,cl                            |
	xchg	[key_check_sum2],cl              |
	rol	dl,cl                            |
	xchg	[key_check_sum2],cl              |
	xor	dl,[key_check_sum]               |
	mov	[ebp],dl                         |
.............................................    |
.............................................<---/

,---------------------------------------------------------------------------,
|Future Versioni                                                            |
'---------------------------------------------------------------------------'
Come gia' detto: IL TEMPO E' TIRANNO.
Non so se e quando riusciro' a ritornare su questo progetto...

Comunque, in cantiere (IL CODICE LO PREVEDE GIA') c'e' l'estensione
del programma ad una doppia chiave (con relativo DOUBLE-Checksum) di codifica
e l'adozione del sistema RSA, con modifiche opportune anti-cracking
(RANDOM SALTING, penso...).

,---------------------------------------------------------------------------,
|Ringraziamenti e Crediti                                                   |
'---------------------------------------------------------------------------'
I miei piu' sentiti ringraziamenti vanno a:

\sPIRIT\     - ola' fratello
MarkB        - cool & ever green Windoze Support
BBK          - Internet Supporter

Tutto s0ftpr0ject, spippolatori, Attila Hack, Quequero, AIS
...e tutti quelli che non mi tornano in mente!

Valvoline's Researching LABS e' raggiungibile via:

EMAIL: - valvoline@s0ftpj.org
       - valvoline@3isecurity.com
       

WEB:   - http://valvoline.cjb.net


==============================================================================
--------------------------------[ EOF 14/22 ]---------------------------------
==============================================================================

---------------------[ previous ]---[ index ]---[ next ]----------------------