Voor een RSA-encryptie heb ik een publieke en geheime sleutel moeten genereren. De basis hiervan bestaat uit twee verschillende priemgetallen waaruit deze sleutels worden bepaalt.
Hiervoor had ik in C# met de functie RSACryptoServiceProvider een programma geschreven waarmee binnen 1 seconde een publieke en geheime sleutel uit komt rollen.
Dit werkt goed, maar hoe komt deze functie zo snel aan twee verschillende priemgetallen die ook nog redelijk groot moeten zijn?
Als ik Wikipedia volg, dient het product van de twee priemgetallen minimaal 1024 bits te zijn. Dat betekent dat een priemgetal rond de 512 bits (=64 bytes) groot is.
Je kunt natuurlijk een willekeurig getal nemen en de Zeef van Eratosthenes gebruiken, maar voor een 512 bits getal is dat natuurlijk niet te doen.
Een Mersennepriemgetal bepalen leek mij beter aangezien je dan een getal echt gaat uitrekenen. Echter, volgens mij zijn dan maar een beperkt aantal combinaties mogelijk aangezien tussen twee opeenvolgende getallen een grote hoeveelheid ligt.
Een andere (onwaarschijnlijke) oplossing is dat vooraf al allerlei priemgetallen zijn gegenereerd, en deze (ingepakt) in deze classe verborgen zittten om te kunnen gebruiken. Maar gezien het aantal priemgetallen lijkt dit mij onwaarschijnlijk aangezien er aardig wat priemgetallen bestaan.
Volgens deze pagina zijn er ook andere testen om te controleren of een getal een priemgetal is, maar die geven als resultaat dat het getal "waarschijnlijk" priem is, maar is dus niet gegarandeerd priem.
Met veel zoeken ben ik wel wijzer geworden
maar ik heb het antwoord (of de richting daar naar toe) op mijn vraag nog niet gevonden: Hoe kan de functie RSACryptoServiceProvider van Microsoft zo snel 2 priemgetallen kan vinden?
Hiervoor had ik in C# met de functie RSACryptoServiceProvider een programma geschreven waarmee binnen 1 seconde een publieke en geheime sleutel uit komt rollen.
Dit werkt goed, maar hoe komt deze functie zo snel aan twee verschillende priemgetallen die ook nog redelijk groot moeten zijn?
Als ik Wikipedia volg, dient het product van de twee priemgetallen minimaal 1024 bits te zijn. Dat betekent dat een priemgetal rond de 512 bits (=64 bytes) groot is.
Je kunt natuurlijk een willekeurig getal nemen en de Zeef van Eratosthenes gebruiken, maar voor een 512 bits getal is dat natuurlijk niet te doen.
Een Mersennepriemgetal bepalen leek mij beter aangezien je dan een getal echt gaat uitrekenen. Echter, volgens mij zijn dan maar een beperkt aantal combinaties mogelijk aangezien tussen twee opeenvolgende getallen een grote hoeveelheid ligt.
Een andere (onwaarschijnlijke) oplossing is dat vooraf al allerlei priemgetallen zijn gegenereerd, en deze (ingepakt) in deze classe verborgen zittten om te kunnen gebruiken. Maar gezien het aantal priemgetallen lijkt dit mij onwaarschijnlijk aangezien er aardig wat priemgetallen bestaan.
Volgens deze pagina zijn er ook andere testen om te controleren of een getal een priemgetal is, maar die geven als resultaat dat het getal "waarschijnlijk" priem is, maar is dus niet gegarandeerd priem.
Met veel zoeken ben ik wel wijzer geworden
Speel ook Balls Connect en Repeat