AGB  ·  Datenschutz  ·  Impressum  







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

Sichere authentifizierung

Ein Thema von th_bone · begonnen am 22. Jul 2006 · letzter Beitrag vom 23. Jul 2006
Antwort Antwort
Seite 2 von 2     12   
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Sichere authentifizierung

  Alt 22. Jul 2006, 13:40
Das ist ja gerade das tolle an RSA:
Wird der private Schlüssel zum Entschlüsseln und der öffentliche Schlüssel zum Verschlüsseln verwendet, hat man eine Möglichkeit, sicher Daten auszutauschen.
Verwendet man dagegen den privaten Schlüssel zum Verschlüsseln und den öffentlichen Schlüssel zum Entschlüsseln, kann der Empfänger verifizieren, dass eine Nachricht wiorklich von dem vermuteten Absender kommt.
Und alles mit dem gleichen Verfahren. Das freut den, der das für eine Klausur lernen muss
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#12

Re: Sichere authentifizierung

  Alt 22. Jul 2006, 15:02
Suche hier in der Codelib meinen SRP Code. Der liegt als DLLs vor und du kannst diesen frei verwenden. Darin ist alles schon fertig umgesetzt und du musst nur noch wenig anpassen.

Implementiert wird ein verbesserter SRP-6a Standard, Secure Remote Passwort Protocol, siehe http://srp.stanford.edu/

Vergiß sowas wie Zertifikate auf Basis von RSA oder ähnlichem Quatsch. So wie du dir das gedacht hast mit dem Benutzername+Passwort ist es schon absolut richtig. Alle Zertifikat basierten Systeme benötigen TrustCenter und externe Storage für die Schlüssel. Und WOMIT werden diese Schlüssel dann geschützt ? Ja mit einem Passwort das im Kopf gespeichert ist. Ergo: SRP kommt ohne diese Storage und TrustCenter aus und benutzt auch nur ein Passwort im Kopf. SRP gilt als ausgesprochen sicher, sicher als eine RSA, SSL, SSH Autentifizierung, besonders wenn es um Logins geht. Und üder die einfachen System mit Hashfunktionen etc.pp. brauchen wir erst garnicht reden. SRP ist resistent gegen alle bekannten Angriffsmuster, auch besonders gegen MITMA.

Gruß Hagen

[edit]
http://www.delphipraxis.net/internal...976&highlight=

Ich habe auch noch eine neuere Version, falls Interesse besteht.
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#13

Re: Sichere authentifizierung

  Alt 22. Jul 2006, 15:46
Was hast du denn gegen die Methode per RSA? Die einzige Schwachstelle ist die Speicheung der Private Keys und darum wirst du mit keinem Verfahren rumkommen. Man müsste zwar auch die Public Keys der Nutzer speichern um von einem Trustcenter wegzukommen, aber wenn man den eigenen private schützen kann, sollten die anderen Schlüssel auch kein Problem darstellen.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Sichere authentifizierung

  Alt 22. Jul 2006, 16:19
Doch mit SRP muß man auf Clientseite eben NICHTS speichern, es ist ein Password based Protocoll, und kein Certificate based Protocoll.

Je nachdem wie die Schlüssel für RSA erzeugt wurden ist, bzw. kann RSA sehr unsicher sein.
In den meisten Fällen gibt es 3 Methoden für die Erzeugung eines RSA Schlüselpaares

1.) TrustCenter
2.) einbruchsichere Hardware wie SmartCards, FritzChip
3.) Windows Crypto API

In allen drei Fällen haben wir defakto keinerlei Kontrolle über den Schlüssel-Erzeugungsprozess. Da aber RSA Sicherheit gerade auf der Geheimhaltung der Schlüssel basiert und bisher es keinen mathmatischen sicheren Standard gibt die Korrektheit dieser Schlüsselerzeugung zu verifizieren ergibt sich folgendes Bild:

Mit einer abgewandelten Form der RSA Schlüsselerzeugung ist es möglich für denjenigen der diesen Prozess real kontrolliert diese Schlüssel schneller zu brechen als dies normalerweise notwendig wäre bei einer Faktorization. Das Dumme daran oder eben auch Geniale (je wie man es betrachtet) ist es das man mathem. beweisen kann das solche geschummelten Schlüssel zu beweisen/entdecken exakt genausso schwierig ist wie die Faktorization eines RSA Schlüssel. Im Klartext: ein TrustCenter oder SmartCard Hersteller oder CryptoAPI Sofwtarehersteller hat die Möglichkeit die Schlüsselerzeugung so zu verändern das er
1.) jeden Schlüssel nur anhand des public Parts brechen kann, weitaus schneller als normal
2.) diese erzeugten Schlüssel und ihr verdeckter Kanal zum schnellen brechen so sicher ist wie das RSA Problem selber. Das heist das ein Anwender solcher Schlüssel nicht praktisch in der Lage ist solche Schlüssel zu entdecken.
3.) die erzeugten Schlüssel ansonsten praktisch identisch zu normalen RSA Schlüsseln sind, sie sind also mathmatisch korrekt

Aus der Sicherheit für einen Anwender wird somit defakto eine Unsicherheit und er kann noch nichtmal wissen ob es an dem ist, und das ist wiederum mathem. beweisbar und es kann bewiesen werden das diese Entdeckung genauso schwierig ist wie eine Faktorization.

RSA ist nur dann sicher wenn man die 100%'tige Kontrolle über die Erzeugung der Schlüssel hat.

Und wenn du nun nach praktischen Beweisen suchst dann lade mein DEC Version 5.1c das so ein Verfahren demonstriert. Übrigens eine Eigenentwicklung von mir. Ich betone das weil ich einfach weiß das ich eine Null im Vergleich zu den vielen Experten darstelle und wenn ich sowas entwickeln kann dann erst recht die Überflieger die für TrustCenter, SmartCard Hersteller oder Mircosoft arbeiten. (übrigens gibt es mindestens ein Patent das exakt so ein RSA Verfahren anmeldet, ob es nach meiner Methode arbeitet weis ich aber nicht).

Diese Problematik lässt sich auf alle Verfahren die mit dem Faktorizationsproblem arbeiten übertragen. Probleme die auf dem Logarithmus beruhen sind davon nicht betroffen. Deren Geheimnis sind im Normalfalle purer Zufallsdaten und somit sind alle sicherheitsrelevanten Parameter jederzeit im Protokoll auch public verifizierbar. Das ist ein enormer Unterschied und der Hauptgrund dafür das ich immer wieder System wie die Elliptischen Kurven in GF(p), ElGamal oder den Diffie Hellman Keyexchange empfehle. Und SRP beruht auf dem Diffie Hellman Schlüsselaustausch.

Gruß Hagen
  Mit Zitat antworten Zitat
th_bone

Registriert seit: 16. Jun 2004
172 Beiträge
 
Delphi 2005 Professional
 
#15

Re: Sichere authentifizierung

  Alt 23. Jul 2006, 12:26
Hi,

erst mal Danke für all die interessanten Anworten...

Den RSA ansatz fand ich persönlich für mich zu kompliziert hatte mir mal testweise einen SSL Server gebaut.

@negaH: Dein SRP sieht sehr interessant aus... was hälst Du eigentlich von der CRAM-MD5 Methode ? hört sich für
mich auch recht einfach und sicher an ?

(ich habe mal für diejenigen die Indy 10 nutzen dein Testprojekt für Indy 10 angepasst und angehängt)

Danke

Ralf
Angehängte Dateien
Dateityp: rar srp_106.rar (633,6 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#16

Re: Sichere authentifizierung

  Alt 23. Jul 2006, 12:59
Zitat von Florian Bernd:
ist es sinnvoller alle gesendeten Commands mit dem Passwort zu verschlüsseln
... und damit einem Angreifer möglichst noch mehr Schlüsseltext zu geben den er Auswerten kann.
Je mehr Schlüsseltext, vor allem wenn viele gleiche Kommandos vorkommen, desto einfacher ist ein Angriff auf das Passwort. Das ist also eine ganz schlechte Idee.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#17

Re: Sichere authentifizierung

  Alt 23. Jul 2006, 13:31
Von CRAM-MD5 halte ich nicht viel. Eine MITMA, Man in the Midle Attack ist nicht ausgeschlossen noch überhaupt notwendig um die anschließende Komunikation zu belauschen. Denn diese ist ja im CRAM-MD5 STandard ja garnicht verschlüsselt. Eine Brute Force Attacke auf das Clientpassword ist ebenfalls nicht ausgeschlossen, denn alle Daten dafür stehen während einer Loginkommunikation zur Verfügung. Ein Verlust der Clientdatenbank auf dem Server kann ebenfalls für Offline Brute Force Angriffe benutzt werden. Desweiteren is CRAM-MD5 nur eine einseitige Authentifikation, der Server muß sich zb. nicht vor dem Client authentifizieren. Das ist eine enorme Lücke für MITMA Server Replacements Angriffe. CRAM-MD5 ist ein 3 Step Protokoll, im Gegensatz zu SRP das mathematisch gesehen ein 5 Step Protokoll ist. Das ist wichtig da bei diesen Steps immer nur Teilinformationen, die die vorherigen Steps aber benötigen, ausgetauscht werden.

All dies ist beim SRP ausgeschlossen, bzw. so schwierig das es praktisch nicht durchführbar ist. SRP ist ein sehr aktuelles Protokoll und setzt sich immer weiter durch. Immer mehr Standard Bibliotheken integrieren es in ihre APIs.

SRP benutzt intern ein modifiziertes Diffie Hellman Protokoll, arbeitet also mit einem mathematischen Zero Knownledge Verfahren. Nach einer erfolgreichen Authentifikation von Client beim Server und Server zum Client wurde autom. ein Shared Secret -> gemeinsammer Schlüssel berechnet. Mit diesem One Time Schlüssel, der zufällig gewählt ist, wird die nachfolgende Kommunikation verschlüsselt. Somit ist SRP nicht nur ein Passwort basiertes Authentifikations Protokoll sondern zusätzlich noch ein sicheres Schlüssel-Austausch-Protokoll. Wobei man das Wort "Austausch" nicht falsch verstehen sollte (kommt von Keyexchange), denn real einigen sich nur beide per mathematik auf ein und den selben Schlüssel ohne diesen real über eine Kommunikation austauschen zu müssen. Dh. dieser Schlüssel wird niemals übertragen und kann somit auch nicht von einem Lauscher abgehört werden.
Ein wichtiger Vorteil meiner SRP Version ist es das die Daten die kommuniziert werden keinerlei direkten Zusammenhang zu den berechneten Daten auf Client/Server seite haben. Somit ist sichergestellt das ein Lauscher nichts erfährt. Desweiteren sind die Clients in der Server Datenbank vollständig anonym. Ein Diebstahl dieser Datenbank durch Dritte wird nicht die Clients kompromittieren, im Gegenteil ist es sogar so das falls dieser sehr unwahrscheinliche Fall eingetreten ist und zudem noch der sehr sehr sehr unwahrscheinliche Fall das ein Hacker sich als regulärer Client ausgegeben hat, dann kann der reguläre Client dies autm. beim nächsten Login erkennen. Entweder er bekommt garkeinen Zugriff mehr, meil der Hacker sein eigenes Passwort benutzt hat, oder aber er sieht an Hand eines Counters das sich ein Anderer in der Zwischenzeit eingeloggt hat. Das und die Möglichkeit beim Counter-SRP zu jeder Zeit das Passwort zu wechseln ohne das dies der Server registrieren kann sind zwei ganz wesentliche Vorteile vom Counter-SRP zum original SRP-6a. Dh. selbst der Server wird quasi als Angreifer in meinem Protokoll betrachtet und das Protokoll weitestgehend auf diese Möglichkeit hin optimiert. Der Client kann anonym sein und die Sicherheit seiner Datensätze in der Serverdatenbank "verifizieren". Naja und dann noch die vielen anderen Angriffe, besonders solche die interleaved arbeiten werden ja schon vom SRP6a ausgeschlossen.
SRP ist meiner Meinung nach (und da bin ich nicht der Einzigste) als das bisher sicherste Login Protokoll betrachtet. Schau einfach mal in die sci.crypt Newsgroup rein.

Es gibt defakto nur EINE Angriffstelle, und das ist die Registration eines neuen Clients im Server. Diese Angriffsstelle existiert in jedem Protokoll, sofern dieses nicht über TrustCenter arbeitet das mit einer persönlichen Gegenüberstellung des potentiellen Clients beim TrustCenter arbeitet, zb. Ausweis bei der Deutschen Post vorzeigen usw. Aber auch an dieser Stelle habe ich in meinem SRP einige Protokolländerungen vorgenommen. Zb. kann ein Client erstmal als vorläufiger Registrations Datensatz durch den Server angelegt werden (der natürlich nicht alle Zugriffsrechte erhalten wird). Das ist möglich weil der Server ein zufälliges Registrationspasswort für den Client anlegen kann und mein Counter-SRP ja in jedem Login die Möglichkeit hat transparent und unbemerkbar für den Server ein neues Passwort zu wählen. Das ist so in SRP-6a nicht möglich, ein Clientdatensatz ist immer unveränderlich, readonly, und beim Counter-SRP wird bei jedem Login dieser Datensatz verändert (könnte Datenbankbezogen aber auch ein Problem darstellen).

Ich habe wie gesagt noch eine neuere Version hier rumliegen. Sie wurde primär auf Geschwindigkeit hin optimiert. Immerhin führt sie alle SRP Schritte ca. 16 mal schneller durch. Die Gesamtzeit eines SRP Logins dauert ca. 15 Millisekunden. Desweiteren bastle ich noch an einem SRP das in Elliptischen Kurven in GF(p) arbeitet. Dies wird den nötigen Datentraffic/Datenbankgrößen/Clientdatengrößen um das 3 bis 4 fache reduzieren, bei gleicher Sicherheit wohlgemerkt.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#18

Re: Sichere authentifizierung

  Alt 23. Jul 2006, 13:38
Zitat:
.. und damit einem Angreifer möglichst noch mehr Schlüsseltext zu geben den er Auswerten kann.
Je mehr Schlüsseltext, vor allem wenn viele gleiche Kommandos vorkommen, desto einfacher ist ein Angriff auf das Passwort. Das ist also eine ganz schlechte Idee.
Sehr gutes Argument Beim Counter-SRP wird nachdem der sichere Schlüssel auf beiden Seiten berechnet wurde mit diesem die komplette Kommunikation verschlüsselt. Die Methoden .Encrypt() und .Decrypt() verschlüsseln nun diese Daten vor der Komunikation (AES und 256Bit Schlüssel). Um nun spezielle Angriffe auf Grund der benutzten Daten im eigenen TCP/IP Protokoll auszuschließen benutzt mein SRP 1.) einen sicheren Feedback Modus und 2.) bei jedem Aufruf dieser Methoden wird ein Zufalls-Salt benutzt um diese Daten zu randomisieren. Dh. zwei gleiche Kommandos nacheinander mit .Encrypt() und gleichen Sessionkey verschlüsselt würden denoch komplett unterschiedliche verschlüsselte Datenpackete erzeugen. Angriffe wie Known Plaintext Attacks, diffentielle Kryptoanalyse sind damit unterbunden.

Wichtig ist eben eines: Alle Stellen im Protokoll müssen imer für sich betrachtet werden und auf mathematisch beweisbare Sicherheit konstruiert werden. Und vom Client und dessen Daten übers INet hin zum Server in dessen Datenbanken ist es ein langer Weg der viele Angriffe ermöglicht.

Die niedrigste und garantierte Sicherheit beim Counter-SRP beträgt 256 Bit. Das heist in allen Protokollschritte und Datenbankdaten wäre eine Brute Force Attacke die einzigste Möglichkeit irgendwas zu knacken. Der Aufwand beträgt dann das Durchprobieren von 2^256 möglichen Kombinationen. Wichtig dabei ist das spezielle Optimierungen dieser Angriffe wie Dictionary/Wörterbuchangriffe oder Rainbow-Tables ausgeschlossen sind !
256Bit ist das doppelte der heutzutage als sicher angesehenen Größe von 128 Bit, das ist also 2^128 mal komplizierter als heute eh schon als sicher angesehen.

[edit]
Fast vergessen: nicht zu unterschätzen ist das Argument das SRP frei verwendet werden darf und ansonsten alle benutzten math. Hilfsmittel eh frei und unpatentierbar sind. "Frei verwendbar" bezieht sich natürlich nicht auf Staatliche Verbote Kryptographie benutzen zu können, wie in France

[/edit]

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:17 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