Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Java] Crittografia

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724

    [java] crittografia

    ho una chat e vorrei crittograffare tutto quello che viene spedito sui canali di comunicazione. Come posso fare?? Devo implementare tutto io o posso agganciarci un programma di crittografia???

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    puoi usare il provider crittografico di Sun(poco vasto) o meglio ancora il bouncy castle.
    Per rendere sicuro un canale o usi SSL(java ha una libreria per questo, trovi tutto sul sito di sun) o usi un key agreement.

    Cerca info su queste tecniche magari domani butto giù qualche riga di codice e altri sistemi per rendere sicuro un canale chat :checaldo:

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    sto facendo adesso una chat con canale sicuro, utilizzo RSA praticamente genero una chiave pubblica del client che la invierà al server, il quale a sua volta creerà la sua chiave pubblica e la invierà al client. Sia i server sia i client naturalmetne avranno anche la loro chiave privata, a questo punto i dati vengono cirfati con la chiave pubblica del destinatario e il destinatario li decodifica con la sua privata che non è stata mandata per la rete per evitare intercettazioni(se uno prende la pubblica può solo codificare).

    Le chiavi le generi così:

    codice:
    import javax.crypto.*;
    
    import java.security.*;
    import java.security.spec.*;
    ...
    	private KeyPairGenerator kpg;
    	private KeyPair kp;
    	private PublicKey serverPublicKey;
    	private PublicKey myPublicKey;
            ... 
    	private void doSafeTheChannel() {
    		try {
    	kpg = KeyPairGenerator.getInstance("RSA");
    	kpg.initialize(1024);
    	kp = kpg.generateKeyPair();
    	myPublicKey = kp.getPublic();
    	bos.write("/KEY|"+myPublicKey.getEncoded());
    		} catch (Throwable t) {
    			t.printStackTrace();
    		}
    	}
    Per ripristinare la chiave codificata(con getEncode) devi usare la classe

    X509EncodedKeySpec per la pubblica

    Questo con il JCE di Sun standard(in teoria dal jdk 1.3 in poi c'è RSA, io uso la 5) quindi presente nella documentazione.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    grazie mille proverò

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    navigando per la rete ho letto che ci sono 3 aspetti della crittografia: digest, signature e poi vari algoritmi per fare la cifratura (des, rca,....).
    Devo usare anche i primi 2 o mi bastano gli algo per la cifratura dell'ultimo punto??
    ti posto anche il link

    http://www-lia.deis.unibo.it/Courses/SicurezzaCE/5-crittografiaJava.html

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Un digest e una signature non sono dei sistemi di cifratura, il primo da una stringa univoca per ogni stringa in entrata, il secondo genera una stringa che è un'impronta, come il digest, autenticata con la chiave di chi vuole garantire che è lui a scrivere il messaggio.

    Per quello che vuoi fare tu, ovvero evitare il caso "man in the middle" come ad esempio uno sniffer che prenda i dati che passano tra client e server, si può usare solo la cifratura, ovvero fare in modo che quando i dati sono fuori dal client e fuori dal server siano incomprensibili, se usi anche l'autenticazione quello che cambia è che il server oltre che decifrare i dati controlla anche se arrivano da un client autorizzato che firma i suoi messaggi ma il canale deve essere già sicuro perchè se uno si mette tra client e server può intercettare i dati firmati e farsi riconoscere come autorizzato.

    Per risolvere questo tipo di problema sicuramente si usa la cifratura asimmetrica(RSA appunto) però questo tipo di cifratura ha un processo molto lento anche se vengono usati trucchi metematici di calcolo per accellerarlo, per questo potresti anche usare cifratura simmetrica e assimetrica assieme creando una chiave di sessione: praticamente il messaggio viene codificato con un algoritmo simmetrico e la chiave(univoca per cifrare e decifrare) codificata asimmetricamente, server e client si scambiano chiavi pubbliche messaggio e chiave cifrata.

    Cmq io uso RSA normale senza chiavi di sessione visto che un messaggio in chat è più corto di una chiave quindi si potrebbe ottenere l'effetto contrario.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.