---------------------[ 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 ]----------------------