![]() |
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: ) |
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.
|
Re: Wie sicher ist das Verschlüsselt?
Zitat:
wir hatten es afaik schon ein paar mal das allein die verschlüsselten Daten ausreichen :gruebel: Wobei du irgendwie recht hast. Oder? |
Re: Wie sicher ist das Verschlüsselt?
Zitat:
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 |
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:
|
Re: Wie sicher ist das Verschlüsselt?
Zitat:
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:
|
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. |
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:
und danach wird das ganze noch durch den Base64-Algo aus der CodeLib gejagt.
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; Reicht das? PS: Wobei ein normaler "Hacker" diesen QT ja nicht zur Verfügung hat... |
Re: Wie sicher ist das Verschlüsselt?
Zitat:
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 |
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:
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 |
Re: Wie sicher ist das Verschlüsselt?
Hagen, auf dich hab ich gewartet
Zitat:
Zitat:
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:
Nun, ohne eine weitere Analyse:
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; 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? |
Re: Wie sicher ist das Verschlüsselt?
Zitat:
Bei einem offenen System (z.B. jeder Client im Schulnetz der frei zugänglich ist), würde ich mir da mehr Gedanken machen. |
Re: Wie sicher ist das Verschlüsselt?
Zitat:
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. |
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.
|
Re: Wie sicher ist das Verschlüsselt?
Zitat:
Der hat das Passwort nicht zu wissen. |
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 ;-) |
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. |
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...
|
Re: Wie sicher ist das Verschlüsselt?
Zitat:
|
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.
|
Re: Wie sicher ist das Verschlüsselt?
Zitat:
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