Frage

Ich möchte über OpenSSL -Schreib- und Lesenmethoden diskutieren.
Angenommen, ich habe eine Datenstruktur wie unten:

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

Wie ist Ihr Ansatz, wenn Sie ein Problem wie oben konfrontiert sind? Da OpenSSL alle Daten verschlüsseln, die an SSL_Write -Funktion (CMIIW) gesendet werden.

Vielen Dank.

Vielleicht lautet die apreangere Frage: Was ist die Verschlüsselungs- und Entschlüsselungsfunktion, mit der die Nutzlast in OpenSSL verschlüsselt/entschlüsselt werden kann.

Keine korrekte Lösung

Andere Tipps

Sie können OpenSSL tatsächlich das schwere Heben für Sie machen lassen.

Sie können Ihre Netzwerkprimitive wie zuvor erstellen und die Dateideskriptoren mit einem offenen SSL -Kontext assoziieren, der den SSL -Handshake, die Verschlüsselung und die Entschlüsselung behandelt. Ich beschönige viele Details, aber der Beispielcode auf der OpenSSL -Website und in diesem Buch:

http://www.amazon.com/network-security-opensl-john-viega/dp/059600270x

wird sehr lehrreich sein. Das Buch ist auch online verfügbar, aber ich glaube, Sie müssen bezahlen, um darauf zuzugreifen.

In OpenSSLs Distribution finden Sie viele Beispielcode, die genau veranschaulichen, wie dies zu tun ist.

Viel Glück.

OpenSSL wird mit einer Bibliothek libcrypto ausgestattet, die üblicherweise zur eigenständigen Verschlüsselung außerhalb eines SSL -Kontexts verwendet wird.

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

Alternativ kann der Bio -Teil der Bibliothek noch näher an dem sein, was Sie wollen:http://www.opensl.org/docs/crypto/bio.html

Wenn Sie dies jedoch wirklich über das Netzwerk senden möchten, würde ich die Sicherheit in Frage stellen, den Header unverschlüsselt zu lassen. Bei der Verschlüsselung geht es um mehr als Privatsphäre. Es geht auch darum, sicherzustellen, dass die Daten nicht während des Transports geändert wurden. Wenn jemand in der Lage ist, Ihren Verkehr zu überwachen, ist er normalerweise auch in der Lage, auch daran zu manipulieren.

Wenn Sie möchten, dass der Header nicht verkürzt wird, können Sie ihn zum Debuggen in Wireshark lesen, dann schlage ich vor, in Ihrer Anwendung ein Flag zu machen, um die Verschlüsselung für die Verwendung in einer Debugging -Umgebung vollständig zu aktivieren/zu deaktivieren.

Wenn Sie ein verschlüsseltes Protokoll bauen, würde es genau so tun, wenn Sie es tun, vorausgesetzt my_header Enthält genügend Informationen und nichts, was an sich sicher gehalten werden muss, z. B. der Sitzungsschlüssel. Netzwerkpakete auf niedriger Ebene (siehe tcpdump/libpCap) sind nur ein Zeichen* ("String") und Sie extrahieren verschiedene Header, indem Sie sich entlang der verschiedenen Längen bewegen - was Sie vorschlagen, klingt so.

Wenn Sie TLS/DTLs verwenden, haben Sie die Wahl: Sie haben den gesamten Rahmen oder gar nichts abschneidern.

Wenn Sie einige nicht unkomplätige Daten im Rahmen haben möchten, benötigen Sie wahrscheinlich keine TLS/DTLs. Sie können OpenSSL jedoch verwenden, um einen Hash Ihres Headers (mit SHA oder einem anderen verwandten Hash -Algorithmus) zu berechnen und am Ende des Rahmens hinzuzufügen, um Manipulationen zu vermeiden.

Für den Verschlechterungsteil des Rahmens müssen Sie zwischen symetrialen und asymetrischen Chiffre -Algorithmen wählen. Aber ohne zu wissen, was Sie erreichen möchten, kann ich dies nicht wirklich beraten.

Denken Sie nur daran, dass symetriale Algorithmen normalerweise schneller sind, aber zunächst einen Schlüsselaustausch benötigen. Dazu können Sie einen asymetrischen Algorithmus verwenden, aber dann erfinden Sie TLS/DTLs neu;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top