簡體   English   中英

Crypto ++ RSA密鑰大小限制

[英]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 ++庫中對其進行更改,請修改GenerateRandombits大於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM