Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie sicher ist das Verschlüsselt? (https://www.delphipraxis.net/57375-wie-sicher-ist-das-verschluesselt.html)

glkgereon 20. Nov 2005 11:02


Wie sicher ist das Verschlüsselt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi.

Ich habe eben aus eigenbedarf eine Klasse geschrieben, mit der ich Passwörter aus eine Ini-Datei schreiben, und später wieder auslesen kann. Das ganze natürlich verschlüsselt.

Da ich überhaupt nicht einschätzen kann wie sicher das ganze ist, würde ich euch einfach mal bitten, zu versuchen das Passwort rauszukriegen.

Also in der Ini steht ein Username (DelphiPraxis) und ein Passwort welches von mir mit einem euch unbekannten Algorithmus verschlüsselt wurde. Da diese Klasse in einem Programm für meine Schule zum Einsatz kommen soll, wäre es ziemlich wichtig die Sicherheit in etwa abschätzen zu können.


Edit:
Wer mir das richtige Passwort per PN sendet kriegt auch den Quelltext der Klasse wenn er will :)
(und darf direkt Verbesserungen vorschlagen :stupid: )

3_of_8 20. Nov 2005 11:03

Re: Wie sicher ist das Verschlüsselt?
 
Ich würde mal sagen, ohne das zugehörige Programm ist es fast unmöglich. Außer man Bruteforcet und sieht sich sämtliche Ergebnisse an.

glkgereon 20. Nov 2005 11:05

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von 3_of_8
Ich würde mal sagen, ohne das zugehörige Programm ist es fast unmöglich. Außer man Bruteforcet und sieht sich sämtliche Ergebnisse an.

Sicher?

wir hatten es afaik schon ein paar mal das allein die verschlüsselten Daten ausreichen :gruebel:

Wobei du irgendwie recht hast. Oder?

Der_Unwissende 20. Nov 2005 11:21

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von 3_of_8
Ich würde mal sagen, ohne das zugehörige Programm ist es fast unmöglich. Außer man Bruteforcet und sieht sich sämtliche Ergebnisse an.

Na ja, solange du gar keinen Anhaltspunkt hast, dürfte selbst Bruteforce recht schwer werden. Eine Bruteforce Attacke geht natürliche alle Möglichkeiten durch, doch sollte man schon Einschränken wie diese Möglichkeiten aussehen. Wenn du nur irgendwas verschlüsselt ablegst, dann liegt in einer Datei nur ne Menge an 1en und 0en, wenn weder Byteorder, noch Art der Informationen bekannt ist, dann kannst du mal richtig viele Möglichkeiten durchgehen. Immerhin könnten vier Byte einfach vier Byte sein oder vier Ascii-Zeichen oder ein Cardinal oder ein Pointer oder oder oder. Und dann könnte es LittleEndian oder BigEndian eingefügt sein und so weiter.

Entschlüsseln wird total erleichtert, wenn jmd. selbst Information hinzufügen kann. Dann kann er gucken wie diese abgelegt wird und bei unsicheren Methoden wahrscheinlich irgendwann zurückrechnen. Natürlich ist auch einfach Disassemblieren der Datei, die verschlüsselt eine einfache Möglichkeit auf den Algorithmus zu kommen. Ich denke nicht, dass es jmd. einfach nur durch die Ini-Datei glücken würde (obwohl, ne Ini hat ja wiederum eine Struktur...)

Gruß Der Unwissende

Sharky 20. Nov 2005 11:23

Re: Wie sicher ist das Verschlüsselt?
 
Hai glkgereon,

ich versuche mal mit meinen Worten zu sagen was Hagen an einigen Stellen geschrieben hat:

Zitat:

Ein Verschlüsselungssystem welches einem unbekannt ist muss als unsicher angesehen werden da es keine Möglichkeit gibt die Sicherheit mathematisch zu beweisen.
Strengg enommen muss man dann natürlich auch bekannte Verschlüsselunsmethoden als unsicher einstufen wenn man selber nicht versteht wie diese funktionieren und darum auch den vorhandenen Beweiss nicht versehen kann.

tommie-lie 20. Nov 2005 11:25

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von glkgereon
Sicher?

42.
Nenne mir bitte genau eine (die richtige) Summe mit einer unbekannten Anzahl an Summanden, die auf dieses Ergebnis führt (Hinweis: es ist nicht 40 + 2).

Zitat:

Zitat von glkgereon
wir hatten es afaik schon ein paar mal das allein die verschlüsselten Daten ausreichen :gruebel:

Nein. Dann war das Verfahren bekannt.

Der_Unwissende 20. Nov 2005 11:26

Re: Wie sicher ist das Verschlüsselt?
 
Ach ja, wofür genau sind denn die Passwörter gedacht? Sind das Passwörter für dein Programm? Oder sind die für andere Programme und müssen dort eingefügt werden?
Wenn nur du eine Authentifizierung für dein Programm haben möchtest, ist es schon vollkommen ausreichend einen Hash (z.B. Md5) zu berechnen und abzuspeichern. Den kannst du ja noch zusätzlich verschlüsseln oder ähnliches (bräuchtest du aber denke ich nicht mal). Der ist halt einweg, den kannst du einfach aus einem Passwort berechnen (Achtung, Mindestlänge einhalten), aber es gibt keinen bekannten Weg das Passwort zurück zu rechnen.
Also kannst du dann in deinem Programm einfach den Hash aus dem eingegebenen Passwort berechnen und mit dem Gespeicherten abgleichen. Dürfte recht sicher sein.

glkgereon 20. Nov 2005 11:30

Re: Wie sicher ist das Verschlüsselt?
 
OK, OK, überzeugt.

Die Daten sollen Zugangsdaten für einen MySQL-Server werden.

also, der Verschlüsselungs-Algo sieht wie folgt aus:

Delphi-Quellcode:
function TCryptedIniFile.Crypt(Value, Key: String): String;
var a,b: integer;
begin
  b:=1;
  for a := 1 to Length(Value) do
  begin
    Value[a]:=Chr(Ord(Value[a]) xor Ord(Key[b]));
    inc(b);
    if b > length(Key) then b:=1;
  end;
  Result:=Value;
end;
und danach wird das ganze noch durch den Base64-Algo aus der CodeLib gejagt.

Reicht das?

PS:
Wobei ein normaler "Hacker" diesen QT ja nicht zur Verfügung hat...

Der_Unwissende 20. Nov 2005 11:44

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von glkgereon
Die Daten sollen Zugangsdaten für einen MySQL-Server werden.
PS:
Wobei ein normaler "Hacker" diesen QT ja nicht zur Verfügung hat...

Ob ein normaler Hacker Interesse an einem Schul MySQL-Server hat ist ja auch eher fraglich. :mrgreen:
Aber in der Regel würde man denke ich eher versuchen die Entschlüsselung aus deiner exe heraus zu bekommen, als dass man wahllos alles durchgeht, was prinzipiell möglich wäre. Denn gerade gegen Brute-Force gibt es doch sehr viele Ansätze (überleg dir einfach mal für Passwörter mit sagen wir mal 8 Zeichen, wieviele Möglichkeiten du pro zeichen hast, dass ganze hoch 8, schon mal verdammt große Zahl). Ok, jetzt kann dein super toller mega schneller Rechner auch ganz viele pro Sekunde abschicken, aber was wenn der Server nur eins pro Sekunde annimmt. Für jeden Menschen schnell genug, aber für eine Attacke? Und wenn du nun nach drei Falscheingaben ein Zwangspause einlegst, sagen wir mal 3 Sek. ... Dürfte keiner mehr miterleben, das der Rechner alles durchgegangen ist.
Deshalb nutzt man eher Lücken im Programm (also deinem oder MySQL) die sind nicht unwahrscheinlich und senken die benötigte Zeit doch immens ab.

Sicherheit gehört eindeutig zur Quantenphysik (nicht wegen Quantenrechner-Quatsch). In dieser hat alles nur eine gewisse Wahrscheinlichkeit (sogar die Vergangenheit). Absolute Sicherheit gibt es einfach nicht. Nur eine gewisse Wahrscheinlichkeit in welcher Zeit dein Code geknackt werden kann. Und wenn die dafür benötigte Zeit nur groß genug ist, wird wahrscheinlich keiner schaffen. Aber es könnte auch jmd. durch raten mit dem ersten Versuch dein Passwort erraten (da hilft keine Verschlüsselung).
Kurz um, Verschlüsselung ist nicht die Schwachstelle die genutzt werden würde.

Gruß Der Unwissende

negaH 20. Nov 2005 11:57

Re: Wie sicher ist das Verschlüsselt?
 
Versuche mal als Value einen String aus lauter #0 Zeichen zu verschlüsseln. Du wirst sehen das im CipherText 1 zu 1 dein Verschlüsselungskey drinnen steht. Ein möglicher Angriff ist also die "Known Plain Text Attack" bei dem ich dir eben einen Value aus lauter #0 Zeichen unterjubel. Dein verschlüsselter Wert liefert mir dann frei Haus deinen Schlüssel. Ich muß dir aber garnicht einen Value aus #0 zeichen unterjubeln, JEDER beliebige Wert reicht aus.

Es gilt: nehme zur Verschlüsselung niemals direkt das Passwort !

Weiter gilt: eine compilierte Softare ist genauso gut wie ein lesbarer Source ! Heist auch wenn du deinen Algo. nicht als Source oder Dokumentation veröffentlichst, so ist eine veröffentlichte Software genauso gut wie ein Source zu analysieren. Ergo: einen Algorithmus geheim zu halten reduziert die Sicherheit auf -X Prozent. Man muß dann davon ausgehen das ein Angreifer denoch den Algo. kennt und diesen schon längst gebrochen hat. Desweiteren gilt aber auch das der Benutzer des Algos irrtümlicher Weise annimmt das keiner diesen Algo kennt, er verlässt sich also darauf und verschlüsselt munter weiter OHNE Mißtrauen. Die Sicherheit verkehrt sich in das Gegenteil und deshalb diese -X Prozent ! Es wäre dann nämlich viel sicherer garnicht zu verschlüsseln da dann der Benutzer davon ausgehen muß das dies unsicher ist und demzufolge sein Handeln im Umgang mit seinen Daten entsprechend anpassen wird.

Zitat:

Streng genommen muss man dann natürlich auch bekannte Verschlüsselunsmethoden als unsicher einstufen wenn man selber nicht versteht wie diese funktionieren und darum auch den vorhandenen Beweiss nicht versehen kann.
Streng genommen IST defacto JEDER Verschlüsselungalgo. IMMER auch knackbar, selbst ein OTP !
Aber! der feine Unterschied zwischen dem einem Verfahren und dem anderen liegt in deren mathematisch BEWEISBAREN Komplexität des Aufwandes diesen zu knacken. Während bei deinem Verfahren es
1.) geheim ist
2.) kein mathematischer Beweis deinerseits vorliegt das es sicher sein muß

gibt es andere Verfahren die
1.) öffentlich bekannt und analysiert wurden
2.) mathematisch bewiesen und berechnbare Komplextität besitzen
3.) die Komplexität so hoch ist das es praktisch defakto unmöglich zu knacken ist
4.) vielfach standardisiert und breitbandig benutzt werden

Streng genommen muß also jeder Laie in jedem Falle immer irgend jemandem vertrauen. Vertrauen heist nun das besonders derjenige dem man sein Vertrauen schenken muß dieses Vertrauen jederzeit brechnen kann (zu ungunsten des Laien natürlich). Es gibt KEINEN Weg, und wird es auch nicht geben, der technisch mathematischen Kontrolle dieses Vertrauens. Das Einzigste was man dagegen tuen kann ist die kollektive Kontrolle des Vertrauens in denjenigen der das Vertrauen geschenkt bekommen hat. Somit schließt sich der Kreis zur Behauptung "Sicherheit muß öffentlich sein" und ergo musst du deinen Algorithmus veröffentlichen damit er als wirklich sicher verifiziert werden kann.

Politisch gesehen ist diese krypt-mathematisch bewiesene Aussage sehr interessant, da sie nämlich einen Geheimdienst ansich als was nicht kontrollierbares beweist.

Gruß Hagen

glkgereon 20. Nov 2005 12:10

Re: Wie sicher ist das Verschlüsselt?
 
Hagen, auf dich hab ich gewartet
Zitat:

Zitat von negaH
Versuche mal als Value einen String aus lauter #0 Zeichen zu verschlüsseln. Du wirst sehen das im CipherText 1 zu 1 dein Verschlüsselungskey drinnen steht. Ein möglicher Angriff ist also die "Known Plain Text Attack" bei dem ich dir eben einen Value aus lauter #0 Zeichen unterjubel. Dein verschlüsselter Wert liefert mir dann frei Haus deinen Schlüssel. Ich muß dir aber garnicht einen Value aus #0 zeichen unterjubeln, JEDER beliebige Wert reicht aus.

Hmpf. So einfach?

Zitat:

Zitat von negaH
Es gilt: nehme zur Verschlüsselung niemals direkt das Passwort !

Mach ich zum Glück nicht :)

Zum Rest:
Das Problem ist ja, dass das einzige was die Verschlüsselung eines Wertes von der eines anderen Unterscheidet ja der Schlüssel ist.
Normalerweise würde man dann den User diesen Schlüssel eingeben lassen.

In diesem Fall geht dies aber nicht.
Daher habe ich nach einer Möglichkeit gesucht, diesen Schlüssel eben aus gegebenen Werten zu erzeugen.
Dazu habe ich mir folgende Variante überlegt:

Delphi-Quellcode:
function TCryptedIniFile.ReadPassword(Section: String; Ident: String; Default: String): String;
begin
  Result:=Crypt(Crypt(Base64Decode(ReadString(Section,Ident,Default)),Section),Ident);
end;

procedure TCryptedIniFile.WritePassword(Section: String; Ident: String; Value: String);
begin
  WriteString(Section,Ident,Base64Encode(Crypt(Crypt(Value,Section),Ident)));
end;
Nun, ohne eine weitere Analyse:
Ist dieses Verfahren sicher genug, um ein Passwort für einen SQL-Account auf einem Schulserver zu schützen, der lediglich auf eine Tabelle Zugriff hat, und dort nur Einfügen, Löschen und Verändern kann, wobei das Programm auf einem Verwaltungsrechner liegt, wo normalerweise keine Schüler drankommen?
Ja, oder?

tommie-lie 20. Nov 2005 12:40

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von glkgereon
wobei das Programm auf einem Verwaltungsrechner liegt, wo normalerweise keine Schüler drankommen?

Warum versuchst du so krampfhaft ein System zu sichern, auf das sowieso nur Personen Zugriff haben, denen du vertraust (Lehrer)?
Bei einem offenen System (z.B. jeder Client im Schulnetz der frei zugänglich ist), würde ich mir da mehr Gedanken machen.

glkgereon 20. Nov 2005 12:46

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von tommie-lie
Zitat:

Zitat von glkgereon
wobei das Programm auf einem Verwaltungsrechner liegt, wo normalerweise keine Schüler drankommen?

Warum versuchst du so krampfhaft ein System zu sichern, auf das sowieso nur Personen Zugriff haben, denen du vertraust (Lehrer)?
Bei einem offenen System (z.B. jeder Client im Schulnetz der frei zugänglich ist), würde ich mir da mehr Gedanken machen.

Vertraue ich meinen Lehrern? :mrgreen:

Nein, mal ernsthaft.
Das Verwaltungsnetz wird in absehbarer Zeit an das restliche Netz angeschlossen.
Damit bekommen Schüler die Möglichkeit, grundsätzlich auf das Verwaltungsnetz zuzugreifen.
Ich würde nämlich nicht wetten, das wir es schaffen das komplett abzuschotten.

Ausserdem muss, bis der Rechner im Netz hängt, die Datei (Eine Datei mit dem Vertretungsplan soll analysiert und auf den Internet-Server hochgeladen werden) immer zu einem anderen Rechner gebracht und dort hochgeladen werden.

Damit ist das Programm wiederum auf einem Rechner der im Netzwerk hängt. Fortsetzung siehe oben.

St.Pauli 20. Nov 2005 12:52

Re: Wie sicher ist das Verschlüsselt?
 
Wenn das Programm nur für einen bestimmten Personen-Kreis zugänglich ist, warum fragts du dann nicht von ihnen das Passwort ab? Diese wäre eine Möglichkeit, ohne das Passwort speichern zu müssen.

glkgereon 20. Nov 2005 12:54

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von St.Pauli
Wenn das Programm nur für einen bestimmten Personen-Kreis zugänglich ist, warum fragts du dann nicht von ihnen das Passwort ab? Diese wäre eine Möglichkeit, ohne das Passwort speichern zu müssen.

Weil ich einen Teufel tuen werde und diesem Typen der das Programm letztendlich nutzt das Passwort sagen.
Der hat das Passwort nicht zu wissen.

Sharky 20. Nov 2005 13:06

Re: Wie sicher ist das Verschlüsselt?
 
Hai Du,

ich glaube St.Pauli meinte eher das Du für jeden User deines Programmes einen User auf dem mySQL-Server anlegst.
Oder Du überlegst dir ein System welches im ersten Schritt mit einem mysql-benutzer die Verbindung zu deiner User-Tabelle aufnimmt und damit den User-Login prüft. Wenn dieser erfolgreich war bekommt dein Programm vom Server das Passwort für die eigentlichen Datentabellen und verbindet sich dann mit diesem.

Ist aber nur so ins blaue gedacht und hat eigentlich auch nichts mehr mit der urspünglichen Frage zu tun ;-)

tommie-lie 20. Nov 2005 13:20

Re: Wie sicher ist das Verschlüsselt?
 
Wenn ich so ein Szenario höre, schwirrt mir gleich das Wort "Webservice" im Kopf rum. Schonmal daran gedacht, mit ASP(.NET) oder auch nur mit einem popeligen CGI etwas zu basteln, bei dem das Ganze ausschließlich in einer kontrollierten Umgebung (dem Server) abläuft? Sichern kann man das Ganze mit HTTP-Auth oder diversen anderen UA-Verfahren, solange niemals ein Passwort im Client gespeichert wird.
Hätte sogar den Vorteil, daß man mit dem gleichen Webservice einen Vertretungsplan für die Schüler nach außen legen kann, anonymer Zugriff ist dann read-only und zeigt lediglich den Plan für den nächsten Tag an.

St.Pauli 20. Nov 2005 13:25

Re: Wie sicher ist das Verschlüsselt?
 
OK, sorry, dann habe ich den Verwendungszweck deines Programmes falsch verstanden. Ich dachte du benutzt es, um Lehrern zu ermöglichen, sich in eine interne MySQL-Datenbank deiner Schule einzuloggen.

Dann will ich es mal so sagen - man muss das ganze praktisch betrachten...
  • Wie groß ist die Wahrscheinlichkeit, dass ein Benutzer über das Netzwerk auf das Programm stößt
    und es ausführt?
  • Wie groß ist die Wahrscheinlichkeit, dass der Benutzer danach im Verzeichnis nach der Passwort-Datei schaut?
  • Wie groß ist die Wahrscheinlichkeit, dass er das Passwort wissen will?
  • Übersteigt der Aufwand, das Passwort in der INI-Datei zu knacken die Möglichkeiten, die sich dem Angreifer erschließen würden?

Neutral General 20. Nov 2005 13:28

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von St.Pauli
OK, sorry, dann habe ich den Verwendungszweck deines Programmes falsch verstanden. Ich dachte du benutzt es, um Lehrern zu ermöglichen, sich in eine interne MySQL-Datenbank deiner Schule einzuloggen.

Dann will ich es mal so sagen - man muss das ganze praktisch betrachten...
  • Wie groß ist die Wahrscheinlichkeit, dass ein Benutzer über das Netzwerk auf das Programm stößt
    und es ausführt?
  • Wie groß ist die Wahrscheinlichkeit, dass der Benutzer danach im Verzeichnis nach der Passwort-Datei schaut?
  • Wie groß ist die Wahrscheinlichkeit, dass er das Passwort wissen will?
  • Übersteigt der Aufwand, das Passwort in der INI-Datei zu knacken die Möglichkeiten, die sich dem Angreifer erschließen würden?

Und allein daraus würde ich als außenstehender sagen: Sicher genug. Wenn ein schüler das Kennwort wissen will dann meistens nur ma aus spaß.. und wenn er dann das Passwort findet und merkt das es verschlüsselt ist dann haben die meisten schon keine Lust mehr.. ich glaube da würde sogar ne einfache Cäsar Verschlüsselung schon reichen als Abschreckung :mrgreen:

Phoenix 20. Nov 2005 15:15

Re: Wie sicher ist das Verschlüsselt?
 
Die imho beste Lösung wäre, für jeden Benutzer einen eigenen User in der Datenbank anzulegen, der genau auf die Tabellen die Berechtigungen hat, die er auch braucht um arbeiten zu können. Das macht die Sache Sicherheitstechnisch recht einfach, weil Du Dich nicht um eine Verschlüsselung kümmern musst.

Robert_G 20. Nov 2005 15:28

Re: Wie sicher ist das Verschlüsselt?
 
Zitat:

Zitat von Phoenix
Die imho beste Lösung wäre, für jeden Benutzer einen eigenen User in der Datenbank anzulegen, der genau auf die Tabellen die Berechtigungen hat, die er auch braucht um arbeiten zu können. Das macht die Sache Sicherheitstechnisch recht einfach, weil Du Dich nicht um eine Verschlüsselung kümmern musst.

:shock: Was hat denn eine öffentlich sichtbare DB mit Sicherheit zu tun? :gruebel:
Tommies Vorchlag war schon ganz OK, und dürfte auch easy umzusetzen sein. (Als kostenloses DevTool wäre MS' VisualWebDeveloper vllt ganz nett ;) )

Edit: Die Proxy klassen legt der WS IMporter von Delphi ja schon für dich an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz