Domanda

Io voglio discutere su openssl scrittura e metodo di lettura.
Si supponga che ho una struttura dati come di seguito:

/-----------------------------------------------------\
|  my_header   |  PAYLOAD                             |
\-----------------------------------------------------/
       |                              |
      \ /                            \ /
 not encrypted                      encrypted

I think the proper algorithm would be like this :
   SEND:
   build my_header with my own header.
   encrypt PAYLOAD with encryption function
   attach my_header and PAYLOAD (encrypted) to one buffer
   send it using common POSIX function just like send or sendto
   RECV:
   using common POSIX function just like recv or recvfrom.
   extract my_header and PAYLOAD(encrypted)
   decrypt PAYLOAD with decryption function
   at last i got my_header and PAYLOAD(decrypted).

Com'è il tuo approccio se dovete affrontare un problema, come sopra.Dal openssl crittografare tutti i dati che viene inviato al SSL_write funzione (CMIIW).

Grazie.

Forse, appropriato domanda è, che cosa è la crittografia e la decrittografia funzione che può essere utilizzata per crittografare/decrittografare di carico in openssl?.

Nessuna soluzione corretta

Altri suggerimenti

Si può effettivamente lasciare OpenSSL fare un sacco di sollevamento di carichi pesanti per voi.

È possibile creare i primitivi networking come prima e associare i descrittori di file con un contesto SSL Open, che si occuperà della handshake SSL, crittografia e la decrittografia. Io sto passando sopra un sacco di dettagli, ma il codice di esempio sul sito openssl e in questo libro:

http://www.amazon.com/Network-Security-OpenSSL-John -Viega / dp / 059600270X

sarà molto istruttivo. Il libro è disponibile anche online, ma credo che si deve pagare per accedervi.

Nella distribuzione di OpenSSL è possibile trovare un sacco di codice di esempio che illustrano esattamente come fare questo.

In bocca al lupo.

OpenSSL viene fornito con una libreria di libcrypto che viene comunemente utilizzato per eseguire la crittografia autonoma al di fuori di un contesto SSL.

http://www.openssl.org/docs/crypto/evp.html

In alternativa, la parte bio della biblioteca può essere ancora più vicino a ciò che si vuole: http://www.openssl.org/docs/crypto/bio.html

Ma se si intende veramente per inviare questo attraverso la rete, quindi vorrei mettere in discussione la sicurezza di lasciare l'intestazione in chiaro. La crittografia è circa più di privacy, si tratta anche di garantire che i dati non è stato modificato in transito. Se qualcuno è in grado di monitorare il traffico, poi di solito sono in grado di interferire con esso anche.

Se si desidera che l'intestazione unecrypted in modo da poter leggere in wireshark per il debugging, allora Suggerisco di fare una bandiera nell'applicazione per attivare completamente la crittografia / disabilitare per l'utilizzo in un ambiente di debug.

Se si sta costruendo un protocollo crittografato, che è esattamente come lo farei, assumendo my_header contiene informazioni sufficienti e niente che di per sé ha bisogno di essere tenuti al sicuro, come ad esempio la chiave di sessione. i pacchetti di rete a livello basso (vedi tcpdump / libpcap) sono solo un char * ( "stringa") e si estraggono le intestazioni differenti spostando lungo l'insieme diverse lunghezze - quello che stai suggerendo suoni proprio come questo

.

Quando si utilizza TLS/DTL, hai la scelta :è un cifrario a tutto il telaio, o niente del tutto.

Se volete avere qualche unciphered dati nel telaio, quindi probabilmente non c'è bisogno di TLS/DTL.Si può comunque utilizzare OpenSSL per calcolare un hash di intestazione (utilizzando SHA o di qualsiasi altra algoritmo di hash) e aggiungendo alla fine del telaio per evitare manomissioni.

Per la cifra parte del telaio, dovrete scegliere tra simmetriche e asimmetriche gli algoritmi di crittografia.Ma senza sapere che cosa si vuole ottenere, non riesco a parlare di questa cosa.

Basta tenere a mente che simmetrica algoritmi sono di solito più veloce, ma richiede una chiave di exchange in un primo momento.Per farlo, è possibile utilizzare un algoritmo asimmetrico,, ma poi, si sta reinventando TLS/DTL ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top