Newsgroup: it.comp.java
Titolo: Problema con la crittografia in Java...

Salve a tutti,
   volevo sottoporre alla vostra attenzione un grosso, e a mio avviso
importante, problema nel quale mi sono imbattuto.
Sto studiando la parte di crittografia in Java e un po' non ho ancora le
idee molto chiare in merito (come si usa in Java)...
Vi racconto quello che voglio fare...
Mi piacerebbe generare in qualche modo un file di properties contenente una
serie di informazioni in chiaro (ad esempio nome del programma, nome
dell'autore, data di scadenza programma, IP della macchina, ecc...) e una
informazione codificata che "riassuma" tutte le informazioni
di sopra (una sorta di stringa di autorizzazione).
Diciamo che fino a qui, ci sono...
ora mi piacerebbe che questa properties, insieme al mio prg, venga portato
su un altro PC e che ogni tanto il mio prg verifichi la validità della
properties...
Quello che non voglio ottenere è che sull'altro PC qualcuno, prendendo la
properties, cambia ad esempio qualche valore in chiaro, ricalcoli la stringa
di autorizzazione e...
avete capito che succede! ;-)
Da quello che ho potuto capire, per fare ciò devo generare una chiave e
distribuirla per rendere possibile il gioco...
Ma se faccio così chiunque prende la chiave e rigenera il codice...
So che la soluzione del problema è nella cifratura con una coppia di chiavi
(publica + privata) ma non sono riuscito a far funzionare nulla!!! :(
Qualcuno potrebbe aiutarmi?!
Sto utilizzando la jdk1.3.1_06 + jce1.2.2 (con il provider della SUN) su
piattaforma w2k!
Help me, please...
Grazie a tutti in anticipo.
Amedeo.

 piattaforma w2k!
Inizia ad usare jdk 1.4.
In questa versione vengono forniti anche altri algoritmi di cod/decod
all'interno del pacchetto jce (incluso in jdk1.4).
Ciao, GiAnt.

 E' piů difficile "intercettare" qualcosa che cambia sempre.


(publica + privata) ma non sono riuscito a far funzionare nulla!!! :(
Non sono un esperto di crittografia, ma qualche idea ce l'ho :-)
Una cosa che potresti fare è la seguente (che è poi quello che si 
racconta di solito sulla firma elettronica):
- assumo tu abbia a disposizione il file da proteggere, un algoritmo di 
hashing, una coppia di chiavi crittografiche
- dato il file da proteggere, ne calcoli un hash
- codifichi l'hash con la chiave privata e alleghi il risultato al file
- distribuisci con il tuo programma, il file con le configurazioni da 
proteggere, l'hash crittato e la chiave pubblica
Quando vuoi verificare:
- prendi il file e ne calcoli l'hash (con lo stesso algoritmo ;-)
- prendi l'hash che hai distribuito e lo decodifichi con la chiave 
pubblica
- confronti i due hash: se sono uguali ok, altrimenti c'è stata 
manomissione e i dati non sono più validi
Ti sembra soddisfacente? :-)
-- 
Ciao
	Fabrizio C.

Quello che dici è a mio avviso MOLTO soddisfacente, anche se restano dei
punti oscuri :
1) Non ho idea di come fare una coppia di chiavi
2) Non so come decriptare l'hash con la chiave pubblica.
Ho provato con la classe KeyPairGenerator, con il KeyGenerator e la Cipher
(per criptare / decriptare)
Risultato?!?!
Una serie infinita di Exception :'(
L'unica cosa che ho capito è che non devo usare il KeyGenerator in quando
non produce una coppia di chiavi, ma solo una chiave... giusto?!


Hai provato a usare codice come questo?
try{
byte[] chiave={0xA0, 0x0B, 0x02, 0x10, 0x05, 0x19, 0x5A, 0x01};//la chiave
di partenza in esadecimale
DESedeKeySpec theKeySpec=new DESedeKeySpec(chiave);
SecretKeyFactory theSkf=SecretKeyFactory.getInstance("DESede");
SecretKey theDesKey=theSkf.generateSecret(theKeySpec);
Cipher desCipher=Cipher.getInstance("DESede");
desCipher.init(Cipher.ENCRYPT_MODE,theDesKey);
byte daCrittare[]={0x95, 0x00, 0x50, 0x51, 0x20, 0x45, 0x0C, 0xA0};//i dati
da crittare
byte[] crittati=desCipher.doFinal(daCrittare);
}
catch (Exception ex){System.out.prinltn(ex);}
Questo usando l'algoritmo DES (che non credo sia presente, perň sul JCE che
usi).
Per usare un altro algoritmo devi vedere cosa riesce a crittare e la
lunghezza delle chiavi (DES funziona con chiavi lunghe 8 byte).
Ciao, GiAnt.

punti oscuri :
[CUT]
Purtroppo non so aiutarti perché non conosco JCE.
-- 
Ciao
	Fabrizio C.