Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    79

    Scambiare messaggi cifrati tramite socket

    Salve a tutti, sto facendo un programma di prova dove un client e un server si scambiano messaggi criptati. Per quanto riguarda le cifrature uso le librerie PEAR, ovvero le classi Crypt_RSA_KeyPair per generare le chiavi e Crypt_RSA per cifrare e decifrare il messaggio e x creare la firma digitale(messaggio cifrato con chiave privata del mittente).
    Come canale di comunicazione utilizzo le socket e quindi le vare funzioni socket_create(), socket_bind(), socket_listen(), socket_read(), socket_write()......


    La teoria sulla cifratura, da come ho capito, e' che il mittente cifra il messaggio con la chiave privata del destinatario, crea la firma digitale utilizzando la propria chiave privata e invia il tutto al destinatario.
    Il destinatario verifica se la firma e' valida utilizzando la chiave pubblica del mittente, e se e' valida decripta il messaggio utilizzando la propria chiave privata.


    Il mio problema è che se io faccio un programma server(che funge da mittente) e un client (che funge da destinatario) in due file differenti(per poi eseguirli concorrentemente), come faccio a far sapere l'uno e l'altro del valore delle chiavi essendo esse variabili locali a ciascun file?

    L'idea mia sarebbe che dovrei fare un terzo file che si preoccupa della generazioni delle chiavi....
    Pero' resta il problema di come poterle comunicare agli altri file visto che usando le socket non posso usare le sessioni (se metto session_start() mi si impalla)....
    In teoria per le chiavi pubbliche non ci sarebbe problema, le genero e le salvo in un db, pero quelle private devono essere solo a conoscenza dei proprietari e da come ho capito le chiavi vengono generate per forza in coppia...........

    Scusate la lunghezza e pero' volevo essere chiaro ed esporre tutte le mie idee....
    Grazie

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Postresti fare come la banca sella.

    Generi 10000 coppie di chiavi, le butti in un file/db/quello che vuoi, e ne consumi una alla volta

  3. #3
    generare una chiave solo per effettuare una comunicazione è un attimo esagerato

    banca sella utilizza una cosa che chiamano OTP, One Time Password, che sono delle vere e proprie "password" a cui corrisponde una precisa password ma non sono chiavi crittografiche per le quali è necessario effettuare una generazione ogni volta per maggiore sicurezza

    una chiave basta e avanza ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    non credo che la loro dimensione (512 bits, come le chiavi rsa "storiche") sia casuale

    ad ogni modo, se sta facendo delle prove, che gli costa fare anche questo

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    79
    OK... pero' il mio problema era quando, come e dove generare le chiavi (che dovrebbero essere 4: pubblica e privata mittente, pubblica e privata destinatario) avendo un file Server e un file Client che comunicano tramite socket...

    Ricordo che le chiavi private non devono essere a conoscenza di nessuno(eccezzion fatta per i proprietari ovviamente).... e quindi suppongo debbano essere presenti solo nel file Client per quanto riguarda la chiave privata del destinatario e nel file server la chiave privata del mittente....
    (Il mio programma e' una prova quindi faccio fare a un programma server il mittente e al client il destinatario)

  6. #6
    Originariamente inviato da bubi1
    non credo che la loro dimensione (512 bits, come le chiavi rsa "storiche") sia casuale

    ad ogni modo, se sta facendo delle prove, che gli costa fare anche questo
    beh, basta generare una chiave da 4096 byte con una password tirata fuori magari con un hmac sha512 (o uno sha512 e basta) e il problema si è istantaneamente risolto

    decodificare una chiave rsa da 4096 byte è al quanto surreale con la potenza di calcolo oggi disponibile ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da rizz1
    OK... pero' il mio problema era quando, come e dove generare le chiavi (che dovrebbero essere 4: pubblica e privata mittente, pubblica e privata destinatario) avendo un file Server e un file Client che comunicano tramite socket...

    Ricordo che le chiavi private non devono essere a conoscenza di nessuno(eccezzion fatta per i proprietari ovviamente).... e quindi suppongo debbano essere presenti solo nel file Client per quanto riguarda la chiave privata del destinatario e nel file server la chiave privata del mittente....
    (Il mio programma e' una prova quindi faccio fare a un programma server il mittente e al client il destinatario)
    Non riesco ancora a capire quale esattamente sia il tuo problema.

    Se vuoi usare un algoritmo di crittografia asimmetrica, le due parti dovranno avere le loro chiavi private e dovranno potersi scambiare quelle pubbliche, o in alternativa dovranno saperle a priori.

    Non ha importanza dove sono le due parti, se le chiami client o server, e se communicatno tramite socket o tramite piccioni - dovranno comunque avere accessibile la propria chiave privata, pubblica, e quella pubblica dell'altra parte. Nel tuo caso, salvi dei file sul disco, e li leggi al momento opportuno, tutto qui.

    E vale anche per le crittografie simmetriche, tipo quella che ti suggeriamo io e daniele_dll - l'unica differenza e' che non puo' esserci nessun scambio di chiavi, le 2 parti dovranno essere gia' a conoscenza. Con altre parole - puoi anche impostare una variabile uguale nei tuoi 2 script.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    79
    OK OK... Scusate la banalita'.... oggi ho pensato alla banalita' del problema (ieri sera devo essere stato proprio stanco).....
    Ogni file(Client e Server) genera la propria coppia e tutte le pubbliche le rendo accessibili a tutti.... (salvandoloe in un db x esempio)

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.