AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RSA - Schlüsselerzeugung Problem

Ein Thema von thomas42 · begonnen am 23. Jan 2010
Antwort Antwort
thomas42

Registriert seit: 23. Jan 2010
1 Beiträge
 
#1

RSA - Schlüsselerzeugung Problem

  Alt 23. Jan 2010, 19:27
So mein erster post hier im Forum. Hoffe er passt hier einiegermaßen rein.
Ich schreibe jetzt seit einieger Zeit an einem einfachen Programm zur RSA-Verschlüsselung inklusive Key-Erzeugung. Letzteres bereitet mir allerdings Probleme. Der Public Key ist ja noch schnell gefunden, für den Private Key brauch ich aber den erw. Euklidischen Algorithmus. Also kurz gesucht und gefunden, danach dann noch auf BigNumber2 (http://www.delphi-forum.de/viewtopic...hlight=bignum2) umgeschrieben, um an größere Zahlen zu kommen.

Das ganze funktioniert auch soweit, nur ist der Zahlenraum in dem ich Berechnungen durchfüren kann sehr klein.

Ein kleines Beispiel:
Public Key= 160
e= 7
Privatekey= 23
korrekter Privatekey= 23 ->ok
---
Public Key= 1409*1447= 2038823
e= 7
Privatekey= 148334775
korrekter Privatekey= 1454263 -> ???? mehrere dezimalstellen zuviel + andere zahlen

Nun stellt sich die Frage, wie kann ich die Leistungsfähigkeit meines Keygenerators noch steigern, damit ich auch solche Berechnungen ausführen kann? Habe noch ne Funktion zur binären Modulo-Exponentation, die ich auch bei der Verschlüsselung nutze, aber die kann ich ja wohl kaum überall hier einbauen.

Hier jedenfalls erstmal der Quelltest zum erw. Euklid. Algo.:

Delphi-Quellcode:
function invers_mod2(e,m:TBigNumber):TBigNumber;
var m0,x0,x1,y0,y1,xx,yy,q,r:TBigNumber;
    bpos:Boolean;
begin
  m0:=m; x0:=BMD_StrToBigNum('1',false); x1:=BMD_StrToBigNum('0',false); y0:=BMD_StrToBigNum('0',false); y1:=BMD_StrToBigNum('1',false); bPos:=true;
  while BM_CompareNE(e,BMD_StrToBigNum('0',false)) do Begin
    q:= BM_Divide(m,e) ;
    r:= BM_Modulo(m,e);
    m:=e;
    e:=r;
    xx:=x1;
    yy:=y1;
    x1:=BM_Add(BM_Multiply(q,x1),x0);
    y1:=BM_Add(BM_Multiply(q,y1),y0);
    x0:=xx;
    y0:=yy;
    bPos:=not bPos;
  End;
  if(bPos) then y0:=BM_Sub(BMD_StrToBigNum('0',false),y0);
  if BM_CompareL(y0,m) then y0:=BM_ADD(m0,y0);
  result:=y0;
end;
Vorschläge?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz