| | | | |
| |||||||
| Scriptbörse PHP Lösungen für nen schmalen Taler |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Darf man erfahren ob du irgendwie schonmal mit Kryptografie in Kontakt gekommen bist ? Theorie dahinter und so ? Wie sich sichere Algorhytmen auszeichnen, was für Schwächen es gibt, etc ? Mein Bauch sagt Nein. Verschlüsselung ist ein heikles Thema und da würde ich mich wohl eher auf etwas vernünftiges verlassen, gibt ja genug php-basierte klassen / extensions für sichere kryto über aes, rsa und co. Weil auf den ersten Blick lässt dein Code schon massive Mängel erkennen. 1) Es arbeitet auf ganz primitiver Zeichenebene anstatt Bit oder Byte-Ebene und stirbt daher einen grausamen Tod mit allen Multibyte-Zeichensätzen. 2) Du bringst in deine encode und decode-funktionen html-kram mit rein der dort nichts zu suchen hat. 3) Du nur Sachen verschlüsseln kannst für die das Alphabet stimmt, sprich man muss die Zeichen die der User beim PW eingeben darf limitieren auf das alphabet und ihm das sagen sonst bekommt er nur doofe fehlermeldungen. 4) Deine Verschlüssellungs-Modi ist ECB, dadurch haben alle gleichen Zeichen den gleichen Code, was das ganze um ein vielfaches einfacher knackbarer macht. Um das mal mit bildern zu erklären, hier: Symmetric-key cryptography Im Absatz: Block cipher modes Die Bilder vom Pinguin zeigen sehr geht das Problem von ECB. ttt verschlüsselt mit 0 und 123456789 als Key und deinem alphabet ergibt 290:290:290 bzw. 115758720:115758720:115758720 Alles das gleiche, daher weis ich jetzt schon dass wenn ich 3 mal hintereinander X:X:X hab, es 3 mal das gleiche zeichen ist. Dank ISO bist du auf 255 Zeichen begrenzt, wovon einige schon wegfallen weil es steuerzeichen sind, andere unwahrscheinlich sind. Wenn man jetzt ein paar Passwörter hat kann man da mit etwas Buchstabenhäufigkeit – Wikipedia schon eventuell das PW recht einfach knacken ohne großen aufwand. Die naheligende vermutung, dass wohl die meisten alphabete dann aus einem begrenzten satz an zeichen bestehen (a-zA-Z0-9 + sonderzeichen) und eventuell in alphabetischer reihenfolge vorkommen vereinfachen es dann noch weiter. 5) Deine Verschlüsselung vergrößert den benötigten Speicherplatz für Passwörter mit größer werdendem Nummern-Schlüssel sehr stark Ein Tip, überlass Kryptographie Leuten die sich damit beschäftigt haben, weil alles andere ist meiner Meinung nach nichts weiter als Security through obscurity – Wikipedia .
__________________ robo47.net - Blog, Codeschnipsel und mehr | |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 11.12.2009
Beiträge: 117
PHP-Kenntnisse: Fortgeschritten ![]() | Das sollte ja auch keine Verschlüsseöung werden, wo die Hacker 10 Tage dafür brauchen, also ich hab das nicht für z.B. das LKA vorgesehen. Und meistens reichen doch für Passwörter eh die 255 Zeichen. Und auch sollte das nicht in Datenbanken eingesetzt werden. Damit sollen lediglich Texte geschützt werden, die mit z.B. md5 unbrauchbar wären. Z.B. will ich damit ein PW schützen, was in einer Datei liegt für den Zugang zu MySQL weil mit z.B. md5 das nicht möglich wäre, da es eine entschlüsselung benötigt. Und wenn du mal links liest: PHP Anfänger - damit will ich andern Anfängern einfach mal ne Möglichkeit geben, sich das anzusehen und einfache Daten zu verschlüsseln. Da es nicht für die Massenanwendung gedacht ist, nützt Buchstabenhäufigkeit auch nicht viel. Und wo ist da HTML? |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 27.06.2009
Beiträge: 498
PHP-Kenntnisse: Anfänger ![]() ![]() | Zitat:
| |
| | |
| | |
| ¯\_(ツ)_/¯ Registriert seit: 18.06.2008
Beiträge: 8.813
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Du kannst in jedem Kryptographiebuch nachlesen dass vor selbst entworfenen Algorithmen massivst gewarnt wird! Nicht umsonst wurden standardisierte Algorithmen über Jahrzehnte hinweg auf Schwachstellen überprüft. Der Einsatz von symmetrischen Verschlüsselungen sollte immer mit einem Standardalgorithmus durchgeführt werden! Vor allem wenn man sich in der Kryptographie nicht auskennt. Ryu's Coder Cracker Dein Algorithmus ist z.B. gegen Known-Plaintext Angriffe sehr schwach. Grad bei Zugangsdaten wie du meinst ist es oftmals leicht an so einen Plaintext zu kommen (DB Host ist zum Beispiel meist localhost). Da bei deiner Verschlüsselung auch die Länge des Plaintextes bekannt ist kann man somit auch recht einfach sehen dass es sich um localhost handelt (beide l's erkennt man und beide o's zum Beispiel. Kennt man jetzt noch das Alphabet (das du schon vorgibst) kann man sehr einfach den Key berechnen. Ich hab eine Funktion geschrieben mit der man recht einfach das zurückrechnen kann. Es ist sogar nicht mal nötig den kompletten Plaintext zu kennen. Es reicht wenn man einen einzigen Buchstaben kennt der überein stimmt. Beispiel: Ich habe localhost mit dem Passwort 24687 verschlüsselt. Ciphertext ist 56448:64512:32256:26880:56448:45696:64512:75264:77 952. Angenommen ich weiß jetzt dass das dritte Zeichen ein "c" ist dann gibt meine Funktion folgendes aus: PHP-Code: Code: array
0 =>
array
'char' => string 'x' (length=1)
'key' => string '2335' (length=4)
'decoded' => string '' (length=0)
1 =>
array
'char' => string 'x' (length=1)
'key' => string '2' (length=1)
'decoded' => string '' (length=0)
2 =>
array
'char' => string 'c' (length=1)
'key' => string '222222237' (length=9)
'decoded' => string 'localhost' (length=9)
3 =>
array
'char' => string 'x' (length=1)
'key' => string '21' (length=2)
'decoded' => string '' (length=0)
4 =>
array
'char' => string 'x' (length=1)
'key' => string '2335' (length=4)
'decoded' => string '' (length=0)
5 =>
array
'char' => string 'x' (length=1)
'key' => string '222' (length=3)
'decoded' => string '' (length=0)
6 =>
array
'char' => string 'x' (length=1)
'key' => string '2' (length=1)
'decoded' => string '' (length=0)
7 =>
array
'char' => string 'x' (length=1)
'key' => string '22235' (length=5)
'decoded' => string '' (length=0)
8 =>
array
'char' => string 'x' (length=1)
'key' => string '2' (length=1)
'decoded' => string '' (length=0)
Würde ich den kompletten Plaintext kennen (nicht nur ein Zeichen) würde an allen Stellen der Key berechnet werden, es ist also nur eine einzige Übereinstimmung zwischen Plaintext und meinem "geratenen" Plaintext nötig um deine Verschlüsselung auszuhebeln. Somit wäre es auch möglich einfach mal alle möglichen Buchstaben durchzuprobieren und dann mit den berechneten Schlüsseln dann einfach auszuprobieren welcher der richtige ist. Hier noch die Funktion zum cracken: PHP-Code: Deine Verschlüsselung habe ich innerhalb von 30 Minuten geknackt. Und ich habe nur Grundlegende Kenntnisse in Kryptographie. Schon gar nicht davon wie man Algorithmen auf Schwachstellen überprüft oder diese ausnutzt. Von daher solltest du dir wirklich überlegen ob du nicht lieber auf standardisierte Algorithmen ausweichst und nicht deine eigenen implementieren willst. Geändert von Flor1an (08.02.2010 um 17:05 Uhr). |
| | |
| | ||
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Warum ? 1) Solche Daten sollten so oder so nicht via web erreichbar sein (unterhalb des doc-root liegen oder ordner mit DENY FROM ALL) 2) Wenn dann jemand soweit kommt dass er deine "mysql-zugangs-daten.txt" findet ... wird er wohl auch an deine php-datei kommen wo ja der schlüssel zum entschlüsseln drinstehen muss oder ? Ansonsten siehe Flor1an, es macht keinen Sinn einen solchen Algo zu verwenden, wenn man sich in der gleichen zeit mit der mcrypt-extension (die bei recht vielen hostern vorhanden ist) oder direkt z.b. einer implementierung von AES in php beschäftigt: phpAES Das ganze ist nicht böse gemeint, aber gerade Anfänger für die du meinst das zu machen, sollten nicht auf den Trichter kommen sowas zu nutzen oder zu lernen.
__________________ robo47.net - Blog, Codeschnipsel und mehr | | |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 11.12.2009
Beiträge: 117
PHP-Kenntnisse: Fortgeschritten ![]() | Ok, also das ihr das so leicht knackt^^ Nagut. Das Programm was ich schreibe läft ja sowieso mit xampp also werden da A keine Angriffe von außen kommen und B wird niemand an die Daten kommen. Dafür denk ich reicht das aus. |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [SQL & PHP] Bilder den passenden Texten zuweisen | craven-city | PHP-Fortgeschrittene | 6 | 18.08.2009 18:07 |
| Umlaute in Texten über mehrere Datenbankfelder ändern | Baccu | PHP Tipps 2009 | 3 | 13.08.2009 16:53 |
| Falsche Darstellung von Texten | Schmuse | Datenbanken | 1 | 12.01.2009 21:46 |
| Mehrdimensionales array als String codieren und wieder auslesen | usefullness | PHP Tipps 2008 | 2 | 09.05.2008 07:15 |
| Textfeld per Javascript codieren und in PHP decodieren | Plague | PHP Tipps 2007 | 2 | 04.04.2007 09:30 |
| Editieren von Texten | workaholic | PHP-Fortgeschrittene | 5 | 13.01.2005 08:55 |
| Unterschiede zwischen 2 Texten hervorheben? | PHP Tipps 2005 | 9 | 12.01.2005 11:59 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| buchstabenhäufigkeit online, php codieren, zahlencode entschlüsseln, buchstabenhäufigkeit entschlüsseln, \03 21 21 15 59 18\, zahlencodes entschlüsseln, codieren von texten, buchstabenhäufigkeit ermitteln, codierung von texten, texte codieren, 03 21 21 15 59 18, zahlencode dechiffrieren, http://www.php.de/scriptboerse/64361-codieren-von-texten.html, buchstabenhäufigkeit ermitteln online, buchstabenhäufigkeit online ermitteln, zahlencode entschlüsseln 03 21 21 15 59 18, zahlencode alphabet, buchstabenhäufigkeit dechiffrieren, zahlencode entschlüsseln online, zahlencode decodieren |