|
Public-Key-Verschlüsselung
Die zu verschlüsselnde Nachricht, die Alice an Bob schicken möchte:
> |
Nachricht:= "I love you"; |

Umwandeln der Nachricht in eine Zahl m (message ):
> |
c:= convert (Nachricht, bytes); z:= 0:
for i from 1 to nops(c) do z:= 256*z + c[i]; od: m:= z; |


Berechnen der Schlüssel von Alice:
> |
p:= nextprime (43672342156995):
q:= nextprime (271141486213133):
public1[A]:= p*q;
# öffentlich
h:= (p-1)*(q-1) + 1:
ifactor (h);
public2[A]:= op(1, op(3, ifactor (h))); # öffentlich
secret[A]:= h/public2[A];
# geheim |




Berechnen der Schlüssel von Bob:
> |
p:= nextprime (7858462424243636):
q:= nextprime (1237432424242):
public1[B]:= p*q;
# öffentlich
h:= (p-1)*(q-1) + 1:
ifactor (h);
public2[B]:= op(1, op(3, ifactor (h))); # öffentlich
secret[B]:= h/public2[B];
# geheim |


![public2[B] := 139](images-pblickey/pblickey10.gif)
![secret[B] := 69959109413285411384914015](images-pblickey/pblickey11.gif)
Signieren von m durch Alice:
> |
m_signiert:= m &^ secret[A] mod public1[A]; |

Versiegeln von m_signiert durch Alice mit Hilfe des öffentlichen Schlüssels von Bob:
> |
m_signiert_versiegelt:= m_signiert &^public2[B] mod public1[B]; |

Entschlüsseln dieser Zahl durch Bob:
> |
m_sign:= m_signiert_versiegelt &^ secret[B] mod public1[B]; |

Entfernen der Signatur durch Bob:
> |
m_orig:= m_sign &^ public2[A] mod public1[A]; |

Umwandeln dieser Zahl in die ursprüngliche Nachricht:
> |
z:= m_orig:
i:= 0:
while z > 0 do
i:= i + 1:
cod[i]:= z mod 256:
z:= (z - cod[i])/256:
end:
cod:= [seq(cod[i-j+1], j=1..i)];
convert (cod, bytes); |


|