每个TLS1.0实现都必须支持TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA密码套件的使用。此密码套件规定服务器必须发送具有以下结构的ServerKeyExchange消息:
struct {
opaque dh_p<1..2^16-1>;
opaque dh_g<1..2^16-1>;
opaque dh_Ys<1..2^16-1>;
} ServerDHParams;
select (SignatureAlgorithm)
{ ....... omitted ........
case dsa:
digitally-signed struct {
opaque sha_hash[20];
};
} Signature;sha_hash值由SHA(ClientHello.random + ServerHello.random + ServerParams)计算,然后将计算出来的散列给DSA算法以生成签名(依次以DER编码)。我的问题是,在这种情况下,DSA的输入是如何产生的?根据维基百科的数据,DSA需要以下参数:
0 < x < q公钥(或任何其他值)是否与服务器发送的X.509证书中包含的值相同?或者所有的值都是专门为DSA签名生成的?
还有:我在某个地方读到,N和L一定是1024/160。这是TLS协议的要求,还是其他值在TLS上下文中是有效的?
发布于 2016-06-23 11:28:07
我会把这个问题记下来。如果有人正在寻找这个问题的答案:
p,q,g参数包含在DSA证书中(在DSS字段中),以及公共dsa密钥(在SubjectPublicKeyInfo字段中)--从技术上讲,这是服务器公钥。这些参数以及秘密密钥(私有)包含在openssl -genkey 1024 -out dsakey.pem生成的文件中。
https://security.stackexchange.com/questions/127026
复制相似问题