HSG |
|
Die Authentisierung (Nachweisen der eigenen Identität) kann ein Subjekt auf drei verschiedenen Wegen erreichen: * Nachweis der Kenntnis einer Information (Das Subjekt weiß etwas); Beispiel: Passwort. * Benutzung eines Besitzes (Das Subjekt hat etwas); Beispiel: Schlüssel. * Anwesenheit des Subjektes selbst (Das Subjekt ist etwas); Beispiel: biometrisches Merkmal.
Viele Authentifizierungsverfahren sind vom Typ Challenge-Response.
Bei der Authentifizierung über einen unsicheren Kanal, wie z.B. bei der Anmeldung bei einem pop3-Server, bietet das apop-Protokoll eine erhöhte Sicherheit. Zur Beurteilung der Sicherheit könnte man sich überlegen, wie die Chancen auf einen brute-force-Angriff auf das Passwort stehen und wie der Server das Passwort speichern muss.
>>> timestamp='<f2kh6s.2tk.1@FQDN-not-set.ha8530acb.invalid>' >>> passwort='frikadelle' >>> s = timestamp+passwort >>> s '<f2kh6s.2tk.1@FQDN-not-set.ha8530acb.invalid>frikadelle' >>> import hashlib >>> h = hashlib.md5(bytes(s,'ASCII')) >>> h.hexdigest() 'ed6159e9e91a48f57ed60fdfc652234a' >>>
In einem kleinen Delphi-Projekt soll die apop-Authentifizierung nachvollzogen werden. Dazu ist es nötig, einen MD5-Hash zu benutzen. Hier ist die Unit md5.pas von Dimka Maslov eine nützliche Hilfe. In RFC 1460 zum pop3-Protokoll steht:
The "digest" parameter itself is a 16-octet value which is sent in hexadecimal format, using lower-case ASCII characters.
Gut, beachten wir es. Zum Testen den passenden TimeStamp mit copy&paste einfügen.
Quelltextauszug:
procedure TForm1.bAPOPClick(Sender: TObject); var username, passwort, timestamp, s1,s2,s3 : string; digest : TMD5Digest; i : integer; begin username := eBenutzername.Text; passwort := ePasswort.Text; timestamp := eTimeStamp.Text; s1 := timestamp+passwort; digest := MD5String(s1); s2 := LowerCase(MD5DigestToStr(digest)); s3 := 'apop '+username+' '+s2+#13#10; mSenden.Text := s3; end;
MailClient1_exe.zip, mailclient1.zip