RSA公钥和RSA私钥
数据结构为:
typedef struct
{
unsigned int bits; /* 模数大小 */
MP_INT e; /* 公钥指数 */
MP_INT n; /* 模数 */
} RSAPublicKey;
typedef struct
{
unsigned int bits; /* 模数大小 */
MP_INT n; /* 模数 */
MP_INT e; /* 公钥指数 */
MP_INT d; /* 私钥指数 */
MP_INT u; /* Multiplicative inverse of p mod q. */
MP_INT p; /* 质数 p */
MP_INT q; /* 质数 q */
} RSAPrivateKey;
RSA 认证的过程是,客户端向服务器提交自己 RSA公钥的模数成员,服务器先读取用户 .ssh 目录中的公钥文件进行有效性检验,再生成一个 256 位二进制随机数 cookie。随后把这个随机数 cookie 用从公钥文件读出的公钥加密后传给客户端,客户端接到 cookie 后,先用自己的私钥解密,再对这个 cookie 和会话号计算出 16 字节的 md5水印,把两个水印相加后发给服务器。服务器把它收到 md5水印和它自己对 cookie 和会话号计算出的水印和进行比较,如果相等,则认证通过。
typedef struct
{
unsigned int bits; /* 模数大小 */
MP_INT e; /* 公钥指数 */
MP_INT n; /* 模数 */
} RSAPublicKey;
typedef struct
{
unsigned int bits; /* 模数大小 */
MP_INT n; /* 模数 */
MP_INT e; /* 公钥指数 */
MP_INT d; /* 私钥指数 */
MP_INT u; /* Multiplicative inverse of p mod q. */
MP_INT p; /* 质数 p */
MP_INT q; /* 质数 q */
} RSAPrivateKey;
RSA 认证的过程是,客户端向服务器提交自己 RSA公钥的模数成员,服务器先读取用户 .ssh 目录中的公钥文件进行有效性检验,再生成一个 256 位二进制随机数 cookie。随后把这个随机数 cookie 用从公钥文件读出的公钥加密后传给客户端,客户端接到 cookie 后,先用自己的私钥解密,再对这个 cookie 和会话号计算出 16 字节的 md5水印,把两个水印相加后发给服务器。服务器把它收到 md5水印和它自己对 cookie 和会话号计算出的水印和进行比较,如果相等,则认证通过。