Einzelnen Beitrag anzeigen

bepe

Registriert seit: 17. Okt 2006
118 Beiträge
 
#1

MD5-Hash // Digest Authenticate

  Alt 11. Nov 2007, 13:36
Hallo,

ich habe mal ein wenig mit Asterisk rumgepielt und würde mich jetzt gerne per SIP anmelden. Aber irgendwie schaffe ich es nicht den richtigen Hash zu ermitteln.

Folgender (unschöner) Source sollte genau das machen was ich aus den entsprechenden RFC's und OpenSource-SoftPhone's raus gelesen habe:

Delphi-Quellcode:
var
  tmp: THash_MD5;
  test: string;
  Pass: string;
  Realm: string;
  DP: String;
  UserName: string;
  Method: string;
  Uri: string;
  Nonce: string;
  HA1: pbytearray;
  HA2: pbytearray;
begin
  test := LabeledEdit10.Text;
  UserName := '21702';
  DP := ':';
  Realm := 'asterisk';
  Pass := '20712';
with THash_MD5.Create do
try
  Init;
  Calc(UserName[1], Length(UserName));
  Calc(dp[1], 1);
  Calc(Realm[1], Length(Realm));
  Calc(dp[1], 1);
  Calc(Pass[1], Length(Pass));
  Done;

  HA1 := Digest;

  Init;
  Method := 'REGISTER';
  Calc(Method[1], Length(Method));
  Calc(dp[1], 1);
  Uri := '"sip:192.168.1.14"';
  Calc(Uri[1], Length(Uri));
  Done;
  HA2 := Digest;

  Init;
  Calc(ha1, SizeOf(ha1));
  Calc(dp[1], 1);

  Nonce := '5e6feac9';
  Calc(Nonce[1], Length(Nonce));
  Calc(dp[1], 1);

  Calc(ha2, SizeOf(ha2));
  Calc(dp[1], 1);


  LabeledEdit11.Text := DigestStr(TFOrmat_HEXL);
finally
  Free;
end;
Hash1 = User:Realmassword
Hash2 = Methode:"URI"
Antwort-Hash = Hash1:Nonce:Hash2

Als Antwort-Hash bekomme ich "0123456789abcdeffedcba9876543210" sollte aber "a6ea9f6ccf4c05149c8282c8d41b18fe" sein. Die Werte (Nonce und Hash) habe ich von einem SoftPhone, welches sich erfolgreich angemeldet hat.

Delphi-Quellcode:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.107:5060;branch=z9hG4bK-d8754z-465f934b6b5ec75c-1---d8754z-;received=192.168.1.107;rport=5060
From: <sip:21702@192.168.1.14>;tag=d43ed52a
To: <sip:21702@192.168.1.14>;tag=as21df2254
Call-ID: MmVkYmRlNDUyZGQyY2JhZjUyNWRkOTJkOTdmNzQ3MWI.@localhost
CSeq: 1 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="5e6feac9"
Content-Length: 0


REGISTER sip:192.168.1.14 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.107:5060;branch=z9hG4bK-d8754z-070fdd727b336e5c-1---d8754z-;rport
Max-Forwards: 70
Contact: <sip:21702@192.168.1.107:5060>
To: <sip:21702@192.168.1.14>
From: <sip:21702@192.168.1.14>;tag=d43ed52a
Call-ID: MmVkYmRlNDUyZGQyY2JhZjUyNWRkOTJkOTdmNzQ3MWI.@localhost
CSeq: 2 REGISTER
Expires: 3600
Allow: INFO, MESSAGE, REFER, NOTIFY, SUBSCRIBE, INVITE, ACK, BYE, CANCEL, OPTIONS
User-Agent: AstaUa
Authorization: Digest username="21702",realm="asterisk",nonce="5e6feac9",uri="sip:192.168.1.14",response="a6ea9f6ccf4c05149c8282c8d41b18fe",algorithm=MD5
Content-Length: 0
Kann mir jemand weiter helfen? Ich habe auch mal die md5.pas von Dimka Maslov ausprobiert. Mit der erhalte ich andere, aber ebenfalls falsche, Werte. Mir ist nicht einmal bewusst wo der fehler liegt, in der Logik oder in meiner Verwendung der MD5-Routinen.

mfg,
bp
  Mit Zitat antworten Zitat