Einzelnen Beitrag anzeigen

Benutzerbild von Dano
Dano

Registriert seit: 12. Aug 2004
49 Beiträge
 
#107

Attacken auf RSA

  Alt 5. Aug 2011, 22:13
hallo

mein problem ist "Common Modulus Attack"

"Bei diesem Angriff geht man davon aus, dass Bob (der Sender) an Alice und an Ali eine Nachricht übermittelt, die den gleichen Modulus aufweisen (N)"

also N, E1, E2, C1 und C2 ist bekannt
Inzwischen kann ich auch einige übungsaufgaben auch lösen, doch bei einer stimmt die prüfung von C1 nicht
Code:
unit Unit2;

interface

uses Unit1, Nints;

Procedure ComModAtt2(N,E1,E2,C1,C2: IInteger);

implementation

Procedure ComModAtt2(N,E1,E2,C1,C2: IInteger);
var
  M,D,U,V,A,B,C: IInteger;
  Sgn: Integer;
begin
  Form1.Memo5.Clear;
  Form1.Memo5.Lines.Add('N= '+NStr(N,NStrFormatDez));
  Form1.Memo5.Lines.Add('E1= '+NStr(E1,NStrFormatDez));
  Form1.Memo5.Lines.Add('E2= '+NStr(E2,NStrFormatDez));
  Form1.Memo5.Lines.Add('C1= '+NStr(C1,NStrFormatDez));
  Form1.Memo5.Lines.Add('C2= '+NStr(C2,NStrFormatDez));

  // ggT(E1,E2), E1*U+E2*V=1
  NGCD(D,U,V,E1,E2);
  Form1.Memo5.Lines.Add('');
  Form1.Memo5.Lines.Add('NGCD(D,U,V,E1,E2);');
  Form1.Memo5.Lines.Add('D= '+NStr(D,NStrFormatDez));
  Form1.Memo5.Lines.Add('U= '+NStr(U,NStrFormatDez));
  Form1.Memo5.Lines.Add('V= '+NStr(V,NStrFormatDez));
  NMul(A,E1,U);
  NMul(B,E2,V);
  NAdd(C,A,B);
  Form1.Memo5.Lines.Add('E1*U= '+NStr(A,NStrFormatDez));
  Form1.Memo5.Lines.Add('E2*V= '+NStr(B,NStrFormatDez));
  Form1.Memo5.Lines.Add('Sum= '+NStr(C,NStrFormatDez));        //muß 1 sein

  Sgn:=NSgn(U);
  if Sgn=-1 then NInvMod(C1,N) else NInvMod(C2,N);
  Form1.Memo5.Lines.Add('');
  Form1.Memo5.Lines.Add('NInvMod');
  Form1.Memo5.Lines.Add('C1= '+NStr(C1,NStrFormatDez));
  Form1.Memo5.Lines.Add('C2= '+NStr(C2,NStrFormatDez));
  NAbs(U);
  NAbs(V);
  //NPow(A,C1,NInt32(U));
  //NPow(B,C2,NInt32(V));
  NPowMod(A,C1,U,N);
  NPowMod(B,C2,V,N);
  NMul(M,A,B);
  NMod(M,N);
  Form1.Memo5.Lines.Add('');
  Form1.Memo5.Lines.Add('M(Dez)= '+NStr(M,NStrFormatDez));
  Form1.Memo5.Lines.Add('M(Hex)= '+NStr(M,NStrFormatHex));
  //Form1.Memo5.Lines.Add('M(Str)= '+NStr(M,256));

  // Gegenprobe
  //NMod(M, N);
  NPowMod(C1, M, E1, N);
  Form1.Memo5.Lines.Add('C1-Prüfung(Dez)= '+NStr(C1,NStrFormatDez));
end;

end.
dabei gild:
Code:
N:=402394248802762560784459411647796431108620322919897426002417858465984510150839043
30871212331051092261069037808551940774250258597856343810132119101903400539
27719366298693602053832477210261514496605439665282540146366485326403978575807916485639542483427
00568953634713286153354659774351731627683020456167612375777


E1:=3
E2:=17

C1:=2394500555365791264104330571199555682432088780374415580523455380604299102278641969063454277
5400049964152157551294447338004786562367966440122936534520806805
09956002487963581299506769508427247587430445433434269388456788927763963152408982656489198933847
23100132425351735921836372375270138768751862889295179915967

C2:=1383726409187124416350484327961837451631640337599336920157386880435148768080304194088666589
2614957261904997547953351803854312378143963536798820459974041130
44647105382346754095529545434399805222434169327598340069737179640327120984737524964711822752164
38174279723470286674311474283278293265668947915374771552561
doch die prüfung von C1 stimmt nicht
Code:
C1-Prüfung(Dez)= 229 748 883 401 527 166 400 260 684 242 392 683 037 469 523 041 872 042
 980 844 846 342 550 340 518 503 592 032 573 441 380 746 571 208 
620 262 300 506 317 236 122 652 396 681 944 603 811 686 899 149 909 108 149 973 290 629 735
 474 070 166 041 694 507 597 661 203 560 787 563 388 577 200 545 
258 718 291 160 899 361 354 003 355 196 008 305 806 812 154 227 397 942 403 831 325 878 222
 902 530 245 122 071 910 219
bei anderen vorgaben funktionierte es...
habe auch extra eigene RSA packete erstellt und mit dieser funktion getestet
habe ich irgendwo ein fehler im code?

wäre über hilfe dankbar,

mfg Dano

Geändert von Dano ( 5. Aug 2011 um 22:26 Uhr)
  Mit Zitat antworten Zitat