我是安全和OpenSSL的初学者.我的目标是以编程方式生成证书,通过Chrome所做的“过时”羞辱.我用来生成使用RSA的AES_128_GCM的证书,即使我尝试将密码列表设置为kEECDH:kEDH:!ADH:AES256-SHA256,服务器上下文使用SSL_CTX_new(TLSv1_2_server_method());.
基于the documentation的示例,我尝试了以下方法:
X509 *x = NULL;
EVP_PKEY *pk = NULL;
EVP_PKEY_CTX *ctx = NULL;
EVP_PKEY *params = NULL;
if(NULL == (params = EVP_PKEY_new()))
goto err;
if(1 != EVP_PKEY_set1_DH(params, DH_get_2048_256()))
goto err;
if(!(ctx = EVP_PKEY_CTX_new(params, NULL)))
goto err;
if(!EVP_PKEY_keygen_init(ctx))
goto err;
if(!EVP_PKEY_keygen(ctx, &pk))
goto err;
if ((x=X509_new()) == NULL)
goto err;
X509_set_version(x,2);
X509_set_pubkey(x,pk);
//... (setting the issuer, subject, etc)
//Here is where it fails
我是安全和OpenSSL的初学者.我的目标是以编程方式生成证书,通过Chrome所做的“过时”羞辱.我用来生成使用RSA的AES_128_GCM的证书,即使我尝试将密码列表设置为kEECDH:kEDH:!ADH:AES256-SHA256,服务器上下文使用SSL_CTX_new(TLSv1_2_server_method());.基于the documentation的示例,我尝试了以下方法:...
c语言
编写的DH
算法
,借鉴学习
A系统构建
密钥
:构建一对公私
密钥
Private Key1和Public Key1;
A系统向B系统公布自己的公钥(Public Key1);
B系统使用A公布的公钥(Public Key1)建立一对
密钥
:Private Key2和Public Key2;
B系统向A系统公布自己的公钥Public Key2;
A系统使用自己的私钥Private Key1和B系统的公钥Public Key2构建本地
密钥
;
B系统使用自己的私钥Private Key2和A系统的公钥Public Key1构建本地
密钥
;
DH
密钥
交换
算法
因为不能验证数据的来源,所以不能抵御中间人击.
如果需要安全强度更高的非对称加密
算法
,可以采用Ecc椭圆曲线加密
算法
或者使用广泛的RSA加密
算法
.
不对称加密
算法
主要
用于
在公共网络安全的数据传输.
不对称加密
算法
关键部分在于大整数数学函数库的使用.
C/C++
实现
的DH
算法
动态链接库,需要64位的可以自己手动编译.
用
C语言
在Linux系统环境下模拟D-H
密钥
交换
,并以协商出的
密钥
对传输信息用AES-256-GCM进行加密,
实现
加密通信
对其进行中间人攻击,在不干扰正常通信的情况下,截获其通讯内容
实现
内容:
可自由发挥的空间不多,在
密钥
交换
后,我
实现
的是客户端可以输入简单指令在服务端执行,并获取反馈
使用工具:
openssl
命令 base64 or-enc base64
EVP API EVP_EncodeBlock((unsigned char *)encodeData,sourceDta,16);
EVP_PKEY 对象
用于
存储公钥和(可选)私钥,以及相关的
算法
和参数。
支持的类型有:
EVP_PKEY_EC:椭圆曲线
密钥
(
用于
ECDSA 和 ECDH) - 支持签名/验证操作和
密钥
派生
EVP_PKEY_RS
TLS_
DHE
_RSA_WITH_AES_256_CBC_SHA256是一种使用256位AES
算法
进行加密和SHA256哈希
算法
进行完整性验证的TLS加密套件,它使用Diffie-Hellman
密钥
交换
协议以提供前向安全性。但是,由于
DHE
密钥
交换
协议是基于离散对数问题的,当攻击者成功地获得了服务器的私钥时,他们可以使用历史记录攻击来推导出
DHE
协商中使用的共享
密钥
,因此这种加密套件可能不具备前向安全性。
因此,为了
实现
更好的前向安全性,可以考虑使用EC
DHE
密钥
交换
协议替代
DHE
密钥
交换
协议,因为EC
DHE
密钥
交换
协议是基于椭圆曲线离散对数问题的,攻击者即使获得了服务器的私钥,也无法推导出协商中使用的共享
密钥
。