2015-04-29 28 views
0

我試圖在Java中實現SSH2密鑰交換,並遇到一些困難。該RFC4419狀態,即:SSH_MSG_KEX_DH_GEX_REPLY消息中的「公共主機密鑰和證書(K_S)」是如何組成的? (SSH2密鑰交換)

服務器響應:

byte SSH_MSG_KEX_DH_GEX_REPLY 
string server public host key and certificates (K_S) 
mpint f 
string signature of H 

我的問題是 - 如何在 「服務器主機公鑰和證書(K_S)」 應該由?我在哪裏可以找到這些信息?

我主持的公鑰和私鑰,並能讀取所需例如像所有信息:

/* 
Read the required variables from the public key. 
*/ 
DSAParams pubKeyDSAParams = ((DSAPublicKey) pair.getPublic()).getParams(); 
BigInteger p = pubKeyDSAParams.getP(); 
BigInteger q = pubKeyDSAParams.getQ(); 
BigInteger g = pubKeyDSAParams.getG(); 

/* 
Read the private exponent from the private key. 
*/ 
DSAPrivateKey privKey = (DSAPrivateKey) pair.getPrivate(); 
BigInteger x = privKey.getX(); 

回答

0

發現在RFC4253自己的答案:

簽名編碼如下:

string signature format identifier (as specified by the 
      public key/certificate format) 
    byte[n] signature blob in format specific encoding. 

「ssh-dss」密鑰格式具有以下特定編碼:

string "ssh-dss" 
    mpint  p 
    mpint  q 
    mpint  g 
    mpint  y 

這裏,'p','q','g'和'y'參數形成簽名密鑰 blob。

簽名格式:

下列公共密鑰和/或證書格式目前 定義:

ssh-dss   REQUIRED  sign Raw DSS Key 
    ssh-rsa   RECOMMENDED sign Raw RSA Key 
    pgp-sign-rsa  OPTIONAL  sign OpenPGP certificates (RSA key) 
    pgp-sign-dss  OPTIONAL  sign OpenPGP certificates (DSS key)