[英]Crypto++ RSA key size limitation
我想將Crypto ++中使用的密鑰大小限制為256位。 我在包含關鍵字key的代碼中發現的唯一東西是變量aKeySize
,以此類推,我發現它是摘要的字符數。
這是我復制程序鏈接的地方 。
如何僅為RSA對密鑰定義256位的限制?
先感謝您!
如何僅為RSA對密鑰定義256位的限制?
從您的測試程序中的鏈接 :
int main(int, char **) {
auto keys = RsaGenerateHexKeyPair(3072);
std::cout << "Private key: " << std::endl << keys.privateKey << "\n" << std::endl;
std::cout << "Public key: " << std::endl << keys.publicKey << "\n" << std::endl;
...
}
您應該將RsaGenerateHexKeyPair(3072)
更改為:
auto keys = RsaGenerateHexKeyPair(256);
如果要在Crypto ++庫中對其進行更改,請修改GenerateRandom
以bits
大於256時引發InvalidArgument
異常。
GenerateRandomWithKeySize
是Crypto ++深入腸胃的基類的一部分。 它在cryptlib.cpp
實現,其主體為:
void GeneratableCryptoMaterial::GenerateRandomWithKeySize(RandomNumberGenerator &rng, unsigned int keySize)
{
GenerateRandom(rng, MakeParameters("KeySize", (int)keySize));
}
因此,您需要在rsa.cpp
修改GenerateRandom
:
void InvertibleRSAFunction::GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
{
int modulusSize = 2048;
alg.GetIntValue(Name::ModulusSize(), modulusSize) || alg.GetIntValue(Name::KeySize(), modulusSize);
CRYPTOPP_ASSERT(modulusSize >= 16);
if (modulusSize < 16)
throw InvalidArgument("InvertibleRSAFunction: specified modulus size is too small");
m_e = alg.GetValueWithDefault(Name::PublicExponent(), Integer(17));
CRYPTOPP_ASSERT(m_e >= 3); CRYPTOPP_ASSERT(!m_e.IsEven());
if (m_e < 3 || m_e.IsEven())
throw InvalidArgument("InvertibleRSAFunction: invalid public exponent");
RSAPrimeSelector selector(m_e);
AlgorithmParameters primeParam = MakeParametersForTwoPrimesOfEqualSize(modulusSize)
(Name::PointerToPrimeSelector(), selector.GetSelectorPointer());
m_p.GenerateRandom(rng, primeParam);
m_q.GenerateRandom(rng, primeParam);
m_d = m_e.InverseMod(LCM(m_p-1, m_q-1));
CRYPTOPP_ASSERT(m_d.IsPositive());
m_dp = m_d % (m_p-1);
m_dq = m_d % (m_q-1);
m_n = m_p * m_q;
m_u = m_q.InverseMod(m_p);
}
但是按鍵仍然很大...(來自先前的評論)
通常認為256位RSA太小。 這是普通百姓所能及的。
您應該考慮切換到橢圓曲線。 如果修復曲線並使用壓縮的公共點,則可以獲得相當小的密鑰,例如secp256的密鑰為32字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.