我有一个1024位的私钥,并用它来生成一个公钥。这是否自动意味着我的公钥也具有1024加密?还是可以采用较小的加密大小?(512,256 ...)
PS:我最感兴趣和谈论的是RSA密钥中模数(“ n”)的大小。大小通常为1024或2048位。但是我很高兴看到这引发了讨论,所有这些都满足了我对密码学的兴趣。
不可以。密钥对中的公钥始终与私钥大小匹配,实际上它是从私钥派生的。
但是,对于某些公共密钥密码实现,例如OpenPGP,将使用分配给不同任务的子密钥来创建密钥。这些子键的大小和创建它们的主键的大小可以不同。在那些情况下,公钥数据将指示与相应私钥数据匹配的主密钥和子密钥的密钥大小。
尽管许多其他公共密钥实现不使用子密钥(例如TLS),所以您只会看到单个密钥的大小。同样,该密钥大小将同时在公共密钥数据和私有密钥数据中指示。
您将看到的唯一密钥大小变化是将非对称加密与对称加密一起使用时。对称加密(会话密钥)将更小,但它使用完全不同的算法(例如AES,TWOFISH等),并且不属于公共密钥(OpenPGP除外),因为它不保存对称密码首选项利用实时连接建立对称加密的通信并交换会话密钥数据)。
编辑:有关公钥和私钥数据之间关系的更多详细信息(也称为证明David错误)
指向RSA很好,但它取决于密钥交换协议,为此,我们将使用Diffie-Hellman密钥交换和原始专利,该专利现已过期。两者都有示例和密钥交换方法以及公共密钥和私有密钥之间的关系的说明。
实现此关系的算法(包括RSA和El-Gamal)都同时创建公钥和私钥。特别是通过创建私钥,然后再生成公钥。公钥继承了构成它的私钥的所有功能。获取两个组件之间不匹配的详细信息的唯一方法是通过某种方式独立于私钥生成公钥。当然,这里的问题是它们将不再是密钥对。
RSA和El-Gamal的密钥生成说明都解释了公钥和私钥之间的公共数据,特别是公钥的所有组件都是私钥的一部分,但是私钥包含解密数据所必需的其他数据和/或签名数据。在El-Gamal中,公共分量是G,q,g和h,而私有分量是G,q,g,h和x。
现在,由于在算法中没有提到密钥对的位大小,是的,这是事实,但是在生成私钥时,它们的每个实际实现都将选定的密钥大小作为常量之一纳入其中。这是用于在GnuPG中生成密钥的相关代码(选择了所有选项之后,包括选择密钥大小和指定密码):
static int
do_create( int algo, unsigned int nbits, KBNODE pub_root, KBNODE sec_root,
DEK *dek, STRING2KEY *s2k, PKT_secret_key **sk, u32 timestamp,
u32 expiredate, int is_subkey )
{
int rc=0;
if( !opt.batch )
tty_printf(_(
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
"generator a better chance to gain enough entropy.\n") );
if( algo == PUBKEY_ALGO_ELGAMAL_E )
rc = gen_elg(algo, nbits, pub_root, sec_root, dek, s2k, sk, timestamp,
expiredate, is_subkey);
else if( algo == PUBKEY_ALGO_DSA )
rc = gen_dsa(nbits, pub_root, sec_root, dek, s2k, sk, timestamp,
expiredate, is_subkey);
else if( algo == PUBKEY_ALGO_RSA )
rc = gen_rsa(algo, nbits, pub_root, sec_root, dek, s2k, sk, timestamp,
expiredate, is_subkey);
else
BUG();
return rc;
}
三种算法之间的细微差异与已发布算法中引用的项的值有关,但是在每种情况下,“ nbits”都是一个常数。
在用于在OpenSSL,OpenSSH和任何其他使用公钥密码学的系统中生成密钥的代码中,您会发现与密钥大小相关的相同一致性。在每个实现中,为了具有匹配的公钥和私钥对,必须从私钥派生公钥。由于私钥是使用密钥大小作为常数生成的,因此该密钥大小必须由公钥继承。如果公用密钥没有包含所有与私钥正确的共享信息,那么根据定义,公用密钥将与该密钥不匹配,因此加密/解密过程和签名/验证过程将失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句