質問
OpenSSL Write and Read Methodについて説明したいと思います。
以下のようなデータ構造があると仮定します。
/-----------------------------------------------------\ | 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).
上記のような問題に直面した場合、アプローチはどのようにありますか。 OpenSSLは、SSL_Write関数(CMIIW)に送信されるすべてのデータを暗号化するためです。
ありがとう。
たぶん、適切な質問は、OpenSSLでペイロードを暗号化/復号化するために使用できる暗号化と復号化関数は何ですか?
正しい解決策はありません
他のヒント
あなたは実際にOpenSSLにあなたのために多くの重い持ち上げをさせることができます。
以前のようにネットワークプリミティブを作成し、ファイル記述子をSSLのオープンSSLコンテキストに関連付けることができます。これにより、SSLハンドシェイク、暗号化、復号化が処理されます。私は多くの詳細を把握していますが、OpenSSL Webサイトとこの本のサンプルコードは次のとおりです。
http://www.amazon.com/network-security-openssl-john-viega/dp/059600270x
非常に有益です。この本はオンラインでも入手できますが、アクセスするために支払う必要があると思います。
OpenSSLの分布では、これを行う方法を正確に示す多くのサンプルコードを見つけることができます。
幸運を。
OpenSSLには、SSLコンテキストの外でスタンドアロン暗号化を実行するために一般的に使用されるLibCryptoライブラリが付属しています。
http://www.openssl.org/docs/crypto/evp.html
あるいは、ライブラリのバイオ部分は、あなたが望むものにさらに近い場合があります。http://www.openssl.org/docs/crypto/bio.html
しかし、もしあなたが本当にこれをネットワーク上に送るつもりなら、私はヘッダーを暗号化されていないままにすることの安全性に疑問を呈します。暗号化はプライバシー以上のものであり、データが輸送中に変更されていないことを保証することでもあります。誰かがあなたのトラフィックを監視する立場にある場合、彼らは通常、それを改ざんする立場にあります。
ヘッダーが非ecryptedを使用してWiresharkでデバッグのために読むことができる場合は、デバッグ環境で使用するために暗号化を完全に有効/無効にするために、アプリケーションにフラグを作成することをお勧めします。
暗号化されたプロトコルを構築している場合、それがまさに私がそれをする方法です my_header
十分な情報が含まれており、セッションキーなど、それ自体を安全に保つ必要はありません。低レベルのネットワークパケット(tcpdump/libpcapを参照)は単なるchar*( "string")であり、アレイに沿って異なる長さに沿って移動することで異なるヘッダーを抽出します。
TLS/DTLSを使用する場合、選択肢があります。フレーム全体を暗号化するか、まったくありません。
フレームに何らかの未確認のデータが必要な場合は、おそらくTLS/DTLSを必要としないでしょう。ただし、OpenSSLを使用してヘッダーのハッシュを計算し(SHAまたはその他の関連するハッシュアルゴリズムを使用して)、改ざんを避けるためにフレームの最後に追加することができます。
フレームの暗号化された部分の場合、対称的な暗号アルゴリズムを選択する必要があります。しかし、あなたが何を達成したいかを知らずに、私はこれについて本当にアドバイスすることはできません。
通常、Symetric Algorithmsはより高速ですが、最初は重要な交換が必要であることに注意してください。そのためには、非対称アルゴリズムを使用するかもしれませんが、TLS/DTLを再発明します。)