Getallen factoriseren gebeurt met het commando "factor()"
|
|
|
|
Voor erg grote getallen zie je dat Sage niet direct een oplossing vindt. Je kan de berekening onderbreken door in het menuutje Action "interrupt" aan te klikken of op de ESC-toets te duwen.
|
Zij $n\in \mathbb{N}.$ Het commando next_prime($n$) geeft het eerste priemgetal groter dan $n$. Het commando random_prime($n$) geeft een willekeurig priemgetal tussen $2$ en $n$.
|
|
|
|
$a \bmod n$ laat je Sage berekenen met het commando mod(a,n). Bijvoorbeeld 14 Mod 12=2, inderdaad
|
|
Het inverse van een getal $\bmod n$ berekenen gaat als volgt. Stel dat ggd$(a,n)=1,$ dan berekenen we het inverse met het commando mod(a,n)^(-1). We gaan met enkele voorbeeldjes na dat als b=mod(a,n)^(-1), dan $(ab \bmod n)=1.$
$a=3,$ $n=7$:
|
|
|
$a=13,$ $n=20:$
|
|
|
Als we het inverse proberen berekenen van $a \text{ mod }n$ met ggd($a,n)\neq 1,$ geeft Sage een foutmelding weer:
|
Machten berekenen van een getal $\bmod n$ doe je door $\bmod(a,n)^c$ te berekenen en niet $\bmod(a^c,n)$!!!! Dit tweede commando werkt ook, maar zal voor grote getallen veel langer duren.
|
|
Hier staan enkele stukken code waarmee je tekst naar een groot getal kan omzetten en omgekeerd. De tekst die je ingeeft moet steeds tussen aanhalingstekens staan!!! De code in het volgende vakje moet je niet lezen.
|
Op de volgende manier zet je de boodschap "De landing in Normandie vond plaats op 6 juni!" om in een groot getal en dan weer naar tekst.
|
|
Kies zelf een zin, laat deze naar een getal omzetten en omgekeerd.
|
We passen de commando's die we net geleerd hebben toe op het RSA cryptografisch systeem.
Romeo wilt een geheim bericht naar Julia sturen. Julia kiest twee priemgetallen $p_1,p_2,$ en zij berekent het product $n=p_1p_2$.
|
Merk op dat Sage het getal $n$ niet onmiddellijk kan factoriseren:
|
Nu berekent Julia $m=(p_1-1)(p_2-1)$ en kiest zij een getal $e < m$ waarvoor ggd$(e,m)=1.$ In de praktijk wordt heel vaak $e=65537=2^{16}+1$ gekozen, dus dat doen we hier ook. Natuurlijk moeten $p_1$ en $p_2$ dan zodanig zijn dat $65537<m$.
|
|
Julia stuurt de getallen $n$ en $e$ door naar Romeo.
Romeo maakt van het bericht dat hij wil sturen een getal $x$. Hij encrypteert $x$ gebruikmakend van de getallen $n$ en $e$ die Julia hem gegeven heeft. Hij berekent dus $(x \bmod{n})^e$.
|
|
Romeo stuurt $y$ naar Julia. Zij wil deze boodschap ontcijferen, ze bepaalt eerst $d=(e \bmod{m})^{-1}.$
|
We controleren dat $(e d\bmod{m})=1$.
|
Nu kan Julia de boodschap van Romeo ontcijferen, ze kan immers $(y \bmod n)^d$ bepalen.
|
|
Iemand heeft een slechte keuze gemaakt voor zijn $n$! Sage kan deze $n$ namelijk direct factoriseren. Je onderschepte de getallen $n$, $e$ en een vercijferde boodschap $y$. Ontcijfer het bericht $y,$ zet dit om in tekst en voer de opdracht om het eerst uit.
|
Je kan ook eens proberen uit te zoeken hoe lang het duurt om getallen te factoriseren. Gebruik hiervoor %time. Is het belangrijk dat beide priemgetallen even groot zijn of mogen we ook een klein en een groot priemgetal nemen?
|
|
|