Question

Je veux discuter OpenSSL écrire et lire la méthode.
Supposons que j'ai une structure de données comme ci-dessous:

/-----------------------------------------------------\
|  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).

Comment est votre approche si vous faites face à un problème comme ci-dessus. Depuis chiffrent OpenSSL toutes les données envoyées à la fonction SSL_write (CMIIW).

Merci.

Peut-être, la question est winrar, quelle est la fonction de chiffrement et de déchiffrement qui peut être utilisé pour chiffrer / déchiffrer UTILE dans OpenSSL?.

Pas de solution correcte

Autres conseils

Vous pouvez effectivement laisser OpenSSL faire beaucoup de soulever des objets lourds pour vous.

Vous pouvez créer vos primitives de mise en réseau comme avant et associer les descripteurs de fichiers avec un contexte ouvert SSL, qui se chargera de la poignée de main SSL, le cryptage et le décryptage. Je passe sur beaucoup de détails, mais l'exemple de code sur le site Web de OpenSSL et dans ce livre:

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

sera très instructif. Le livre est également disponible en ligne, mais je crois que vous devez payer pour y accéder.

Dans la distribution de OpenSSL vous pouvez trouver beaucoup d'exemples de code illustrant exactement comment faire.

Bonne chance.

OpenSSL est livré avec une bibliothèque de libcrypto qui est couramment utilisé pour effectuer le chiffrement autonome en dehors d'un contexte SSL.

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

Sinon, la partie bio de la bibliothèque peut être encore plus proche de ce que vous voulez: http://www.openssl.org/docs/crypto/bio.html

Mais si vous avez l'intention d'envoyer vraiment ce sur le réseau, alors je remettre en question la sécurité de laisser l'en-tête non chiffré. Le chiffrement est plus que la vie privée, il est aussi assurer que les données n'a pas été modifié en transit. Si quelqu'un est en mesure de surveiller votre trafic, ils sont généralement en mesure de falsifier aussi.

Si vous voulez l'en-tête non cryptées afin que vous puissiez le lire dans Wireshark pour le débogage, alors je suggère faire un drapeau dans votre application pour activer complètement / désactiver le cryptage pour une utilisation dans un environnement de débogage.

Si vous construisez un protocole crypté, c'est exactement comme je le ferais, en supposant my_header contient suffisamment d'informations et rien que lui-même doit être maintenu en sécurité, comme la clé de session. paquets réseau au niveau bas (voir tcpdump / libpcap) sont juste un char * ( « string ») et vous extraire différents en-têtes en se déplaçant le long du réseau de longueurs différentes - ce que vous laissez entendre des sons comme ça

.

Lorsque vous utilisez TLS / DTLS, vous avez le choix: vous Cipher tout le cadre, ou rien du tout

.

Si vous voulez avoir des données non chiffré dans le cadre, alors vous ne avez probablement pas besoin TLS / DTLS. Vous pouvez cependant utiliser OpenSSL pour calculer un hachage de votre tête (en utilisant SHA ou tout autre algorithme de hachage lié) et en ajoutant à la fin du cadre pour éviter la falsification.

Pour la partie du cadre chiffré, vous aurez à choisir entre les algorithmes de chiffrement et symetriques asymétriques. Mais sans savoir ce que vous voulez réaliser, je ne peux pas vraiment conseiller à ce sujet.

Il suffit de garder à l'esprit que les algorithmes sont généralement plus rapides symetriques mais nécessitent un échange de clés d'abord. Pour ce faire, vous pouvez utiliser un algorithme dissymétrique, mais, vous réinvente TLS / DTLS;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top