2010-03-30 98 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;)