2010-03-30 155 views
2

我想討論一下openssl的寫入和讀取方法。
假設我有一個數據結構如下圖所示:openssl ssl加密

 
/-----------------------------------------------------\ 
| 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)的數據。

謝謝。

也許,在apropriate問題是,什麼是可用於加密/ OpenSSL中解密有效載荷的加密和解密功能?

+0

你能告訴我們在頭和有效載荷之間存在什麼樣的邏輯連接?他們真的需要在同一個框架中嗎?標題是否需要加密?這可能會有所幫助。 – ereOn 2010-03-30 06:47:15

+0

嗯,我只想知道,如果我們面臨這樣的問題會怎麼樣。我相信openssl可以做這樣的事情。 – deddihp 2010-03-30 14:00:17

回答

0

如果你正在構建一個加密協議,那就是我該怎麼做,假設my_header包含足夠的信息,而本身並不需要保證安全性,比如會話密鑰。處於低級別的網絡數據包(請參閱tcpdump/libpcap)只是一個char *(「字符串」),並且通過沿陣列移動不同的長度來提取不同的頭文件 - 您建議的內容聽起來就像這樣。

2

你實際上可以讓OpenSSL爲你做很多繁重的工作。

您可以創建網絡作爲原語和之前的文件描述符以開放的SSL上下文,它將處理SSL握手,加密和解密相關聯。我掩飾了很多細節,但示例代碼的OpenSSL的網站,並在這本書:

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

將是非常有益的。這本書也可以在網上找到,但我相信你必須付費才能訪問它。

在OpenSSL的發行版中,您可以找到很多示例代碼,以說明如何執行此操作。

祝你好運。

2

OpenSSL的帶有其通常用於將SSL上下文之外執行獨立加密libcrypto庫。

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

或者,你想要什麼庫的生物部分可以更接近: http://www.openssl.org/docs/crypto/bio.html

但如果你真的打算通過網絡發送這一點,那麼我會質疑安全性未加密的標題。加密不僅僅是隱私,更重要的是確保數據在傳輸過程中未被修改。如果有人能夠監控您的流量,那麼他們通常也可以篡改它。

如果您想報頭unecrypted所以你可以在Wireshark的閱讀進行調試,那麼我建議你的應用程序完全啓用了在調試環境中使用/禁用加密作出標誌。

+0

除非加密數據包含某種簽名。這種模式在某些特殊情況下可能很有用。 – ereOn 2010-03-30 06:37:02

0

當您使用TLS/DTLS,您可以選擇:你加密法的整體框架,或者什麼都沒有。

如果你想在框架一些未加密的數據,那麼你可能不需要TLS/DTLS。然而,您可能會使用OpenSSL來計算您的標題的散列(使用SHA或任何其他相關的散列算法)並將其添加到幀的末尾以避免篡改。

對於幀的加密部分,您必須在對稱密碼算法和非對稱密碼算法之間進行選擇。但是,如果不知道你想達到什麼目的,我無法就此提出建議。

請記住,對稱算法通常更快,但首先需要密鑰交換。要做到這一點,你可以使用不對稱算法,但是,然後,你重新創建TLS/DTLS;)