题
我想讨论有关openssl写入和读方法的讨论。
假设我具有以下数据结构:
/-----------------------------------------------------\ | 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握手,加密和解密。我正在浏览很多细节,但是在OpenSSL网站上以及本书中的示例代码:
http://www.amazon.com/network-security-openssl-john-viega/dp/059600270x
将非常有启发性。这本书也可以在线获得,但我相信您必须付费才能访问它。
在OpenSSL的发行版中,您可以找到许多示例代码,以说明如何执行此操作。
祝你好运。
OpenSSL带有一个libcrypto库,该库通常用于在SSL上下文之外执行独立加密。
http://www.openssl.org/docs/crypto/evp.html
另外,图书馆的生物部分可能更接近您想要的东西:http://www.openssl.org/docs/crypto/bio.html
但是,如果您真的打算通过网络发送此信息,那么我会质疑将标题未加密的安全性。加密不仅仅是隐私,还涉及确保数据未在运输中修改。如果有人可以监视您的流量,那么他们通常也可以篡改它。
如果您希望未注册的标题以便在Wireshark中阅读它进行调试,那么我建议您在应用程序中制定标志,以完全启用/禁用加密以在调试环境中使用。
如果您正在构建一个加密协议,那正是我的做法 my_header
包含足够的信息,没有任何本身需要确保安全的信息,例如会话密钥。低级别的网络数据包(请参阅tcpdump/libpcap)只是一个char*(“ string”),您可以通过沿着数组不同的长度移动来提取不同的标题 - 您建议的听起来像这样。
当您使用TLS/DTLS时,您可以选择:您将整个框架密封,或者根本没有。
如果您想在框架中有一些未移交的数据,那么您可能不需要TLS/DTL。但是,您可以使用OpenSL来计算标题的哈希(使用SHA或任何其他相关哈希算法),并在框架末端添加它以避免篡改。
对于框架的密码部分,您必须在Symetric和Ancymetric密码算法之间进行选择。但是,在不知道您想实现的目标的情况下,我无法为此提供真正的建议。
请记住,符号算法通常更快,但首先需要键交换即可。为此,您可能会使用不可分割的算法,但是然后,您正在重新发明TLS/DTLS;)