Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 18.05.2005, 14:14 Titel: Ist diese "Verschlüsselung" sicher? |
|
|
Hallo, da ich lange eine Passwortverschlüsselung gesucht habe, ähnlich wie MD5 oder SHA1 (wobei inzwischen ja beide gehackt wurden) und da ich allerdings nicht fähig bin diese selbst zu portieren habe ich mir selber eine geschrieben.
Es ist eine Mischung aus der "CHEWROUT-Methode", der "XOR Methode" und etwas Eigenentwicklung...
Code: | DO
PRINT "Zu verschluesselnde Passwort (max. 32 Zeichen):"
LINE INPUT Password$
LOOP UNTIL LEN(Password$) <= 32
'Wenn das Passwort nicht durch 2 teilbar erweitern
IF LEN(Password$) MOD 2 THEN Password$ = Password$ + CHR$(LEN(Password$))
'Den String halbieren
PasswdString1$ = LEFT$(Password$, LEN(Password$) / 2)
PasswdString2$ = RIGHT$(Password$, LEN(Password$) / 2)
'Gesamtsumme der ASCII Codes der Zeichen
FOR r% = 1 TO LEN(Password$)
PasswdSum% = PasswdSum% + ASC(MID$(Password$, r%))
NEXT r%
'Mit der Summe den Zufallsgenerator fuettern
RANDOMIZE PasswdSum%
'Die beiden Strings mit nicht darstellbaren Zufallszeichen fuellen
FOR s% = 1 TO (16 - (LEN(Password$) / 2))
PasswdString1$ = PasswdString1$ + CHR$(INT(RND * 31))
PasswdString2$ = PasswdString2$ + CHR$(INT(RND * 31))
NEXT s%
'Die Eigentliche Verschluesselung
FOR v% = 1 TO 16
CryptedByte% = ASC(MID$(PasswdString1$, v%)) XOR ASC(MID$(PasswdString2$, v%))
CryptedByte% = CryptedByte% + INT(RND * 255)
IF CryptedByte% > 255 THEN CryptedByte% = CryptedByte% - 256
CryptedPasswd$ = CryptedPasswd$ + LCASE$(HEX$(CryptedByte%))
NEXT v%
PRINT "Verschluesseltes Passwort: ";
PRINT CryptedPasswd$
|
Ich möchte hier mal fragen ob diese Methode auch wirklich sicher ist. Ich hoffe der Code ist verständlich genug. Der verschlüsselte String ist danach ein 128Bit HEX-Code.
Damit die Möglichkeit kleiner ist, dass zwei Strings den gleichen Hash ergeben sind nur 32 Zeichen erlaubt und die fehlenden werden mit den "besonderen" ASCII Codes 0 - 31 gefüllt...
Achja: Mit "sicher" meine ich natürlich ob sich daraus das Passwort nich irgendwie zurückholen lässt...
Entschlüsselbar muss es ja nicht sein, bei der Passwortabfrage werden dann einfach das eingegebene verschlüsselt und mit dem angespeicherten Verglichen...
PS: Ich habe das Programmiererforum anstatt der Projektvorstellungen genommen, da ich mir noch nicht 100% sicher bin ob es auch wirklich mehr oder weniger sicher ist... |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 18.05.2005, 17:56 Titel: |
|
|
Ich würd mal sagen, dass ich meine Bruteforce drüber rattern lassen würde... Aber, leider hab cih nur einen Pseudo-Brüter....
kann mir mal jemand eine PM schicken, in der er mir erklärt, wie ich eine ECHTE Bruteforce schreiben könnte?? |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 18.05.2005, 18:22 Titel: |
|
|
also dass es mit Bruteforce zu kacken ist, ist ja wohl klar..
Wie gesagt, ich möchte wissen ob dieser Algorythmus unsicher ist, bzw ob man aus dem Hash das Passwort herauslesen kann... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.05.2005, 18:22 Titel: |
|
|
also bruteforce zum entschlüsseln ist relativ schwierig wenns irgend ein unbekannter verschlüsselungsalgorythmus verschlüsselt hat, du kannst ja schlecht alle möglichen Verschlüsselungsarten der Reihe nach durchprobieren lassen weil du die garnicht alle kennen kannst!
So wie ich das sehe hast du in deinm Algorythmus viele reversible methoden angewendet. aber ich glaub,
CryptedByte% = ASC(MID$(PasswdString1$, v%)) XOR ASC(MID$(PasswdString2$, v%))
ist nicht so einfach zu entschlüsseln. der rest kann einfach rückgängig gemacht werden, das is kein Problem, nur bei dem ding da muss dann wahrscheinlich BruteForce ran.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 18.05.2005, 18:32 Titel: |
|
|
Zitat: |
So wie ich das sehe hast du in deinm Algorythmus viele reversible methoden angewendet. aber ich glaub,
CryptedByte% = ASC(MID$(PasswdString1$, v%)) XOR ASC(MID$(PasswdString2$, v%))
ist nicht so einfach zu entschlüsseln. der rest kann einfach rückgängig gemacht werden, das is kein Problem, nur bei dem ding da muss dann wahrscheinlich BruteForce ran.. |
Nur so ne Frage: Kann man ohne die Summe der ASCII-Zeichen des Passwortes die "RND-Teile" umgehen?
PS: Hat jemand noch eine bessere Methode für RANDOMIZE als mit der Summe der ASCII Codes? Ist auch nicht so ganz das Wahre. Mir will einfach nichts bessers einfallen...
Zuletzt bearbeitet von gandro am 18.05.2005, 18:38, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.05.2005, 18:37 Titel: |
|
|
also ich hab noch mal n bisschen überlegt:
Das mit dem Randomize der Summe kann man nicht einfach zurückentschlüsseln, die XOR-Operation auch nicht, da es mehrere Möglichkeiten für die einzelnen Werte gibt. Also von daher: Dein Algorythmus is nur per Bruteforce zu knacken. Könntest höchstens das ganze noch etwas abstrahieren, dass das länger dauert, weil das geht so relativ schnell mit dem ausprobieren. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Dorftrottel gesperrt

Anmeldungsdatum: 23.04.2005 Beiträge: 97 Wohnort: Welt
|
Verfasst am: 18.05.2005, 18:38 Titel: |
|
|
Nur n kleiner Vorher Nacher Vergleich...
Vorher:
Zitat: |
DO
PRINT "Zu verschluesselnde Passwort (max. 32 Zeichen):"
LINE INPUT Password$
LOOP UNTIL LEN(Password$) <= 32
|
Nacher:
Zitat: |
DO
PRINT "Zu verschluesselndes Passwort (max. 32 Zeichen):"
LINE INPUT Password$
LOOP UNTIL LEN(Password$) <= 32
|
 _________________ Euer Dorftrottel!
Unser Name ist unser Auftrag!  |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 18.05.2005, 18:47 Titel: |
|
|
Oh
Danke...
Liegt daran dass es mal hies "Bitte geben Sie das zu verschlüsselnde Passwort ein" ... |
|
Nach oben |
|
 |
Dorftrottel gesperrt

Anmeldungsdatum: 23.04.2005 Beiträge: 97 Wohnort: Welt
|
Verfasst am: 18.05.2005, 18:51 Titel: |
|
|
Coole Signatur...
Editiert durch Moderator: Die Masse an Smilies musste nicht sein. Ich hab' mal ein paar rausgenommen... (Sebastian) _________________ Euer Dorftrottel!
Unser Name ist unser Auftrag!  |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 18.05.2005, 20:03 Titel: |
|
|
Leute, mir ist noch was aufgefallen...
Ein Passwort das nur aus zwei Zeichen besteht hat den Selben Hash wie sein "Kehrwert" z.B.
ab & ba haben genau denselben Hash wert, da sie denselben RANDOMIZE Wert haben und per XOR verschlüsselt werden...
Ich denke man könnte das durch eine bessere Berechnung beim RANDOMIZE Wert umgehen. Wüsste jemand wie? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.05.2005, 20:12 Titel: |
|
|
hm mach doch so:
p a s s w o r t
(p+a-s)*(s+w-o)*(r+t[-...])
also immer drei zeichen nehmen, ersten beiden addieren, drittes abziehen und diese Tripel dann multiplizieren. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 18.05.2005, 20:15 Titel: |
|
|
Hallo!
Wenn ich mich recht ent-sinne, suchst du nach einer geeigneten Möglichkeit, ein Passwort "verschlüsselt", oder dessen spezifischen Hash-Wert abzuspeichern, dass danach ein Vergleich gezogen werden kann, ob ein eingegebenes Passwort auch wirklich das richtige ist.
Wenn du einen Hash-Wert haben willst, kann ich dir CRC16 oder 32 wirklich allerwärmstens empfehlen. Da haben die Strings "Hallo" und "Hllao" total verschiedene Werte. Die Routine ist nicht groß und passt auf ca. 15-20 Zeilen in eine stinknormale Function rein.
Anwenden könnte man das Ganze dann so:
PRINT CRC32&("Hallo!")
PRINT CRC32&("Haoll!")
Wenn du genau sowas gesucht hast, kann ich dir die Routine(n) per E-Mail oder per PM schicken
Außerdem kann man solche Prüfsummen auch von großen Dateien, die z.B. 300 KB oder größer sind, erstellen. Funktioniert bei mir jedenfalls prima. _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 18.05.2005, 21:34 Titel: |
|
|
mh...
Ja schick sie bitte mal an "gandro ät gmx punkt net", vll.ist es ja wirklich besser... |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.05.2005, 21:09 Titel: |
|
|
Mein "Senf" zum Titelthema: Um beurteilen zu können, ob dieser Algorithmus sicher oder unsicher ist, braucht es doch etliches an höherer Mathematik. Im Prinzip musst Du beweisen können, dass es zu jedem erzeugten Hash genau ein zugehöriges Passwort gibt, der Hashalgorithmus also eindeutig ist. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 19.05.2005, 22:03 Titel: |
|
|
das ist er sicherlich nicht.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 19.05.2005, 22:03 Titel: |
|
|
dreael hat Folgendes geschrieben: | Mein "Senf" zum Titelthema: Um beurteilen zu können, ob dieser Algorithmus sicher oder unsicher ist, braucht es doch etliches an höherer Mathematik. Im Prinzip musst Du beweisen können, dass es zu jedem erzeugten Hash genau ein zugehöriges Passwort gibt, der Hashalgorithmus also eindeutig ist. |
Also das Gegenteil kann ich dir beweisen
Was bedeutet dass der Algorithmus so wie er ist im moment (noch) nicht zu gebrauchen ist. Aber ich denke ich nehme mal CRC32 (danke an Quark48) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.05.2005, 21:19 Titel: |
|
|
Um wirklich sicher zu gehen, hier noch ein tipp:
Wenn jemand hart kämpft, um das PW zu ergattern, wird er vielliecht in den RAM schauen (Tools dazu gibts ja)...Also sollte das PW nicht in einer zusmannenhängenden string-variable sein! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 21.05.2005, 22:06 Titel: |
|
|
ähm nein, es geht ja darum, das PW sicher abzuspeichern um es zu codiert zu vergleichen, das heißt, wenns im Ram unverschlüsselt drin steht hats an genau diesem PC schon mal jemand eingegeben und da wird dann kein anderer drangehen um das ding im Ram zu suchen.. und wenns so wichtig ist kann der User einfach den PC runterfahren und schon existiert nurnoch die verschlüsselte Variante.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
code
Anmeldungsdatum: 19.01.2005 Beiträge: 154
|
Verfasst am: 26.05.2005, 11:38 Titel: |
|
|
Code: | function unran$ (text as string)
for a = 1 to len(text$)
init = asc(mid$(text$,a ,1))
next a
a = rnd(-init)
randomize init
for a = 1 to len(text$)
code = asc(mid$(text$,a,1)) + int(rnd *150)
if code > 255 then code = code - 255
ver$ = ver$ + chr$(code)
next a
unran$ = ver$
end function |
Mit dieser kleinen function kann man auch passwörter verschlüsseln. Sie basiert auf der rnd-funktionsweise, bruacht aber kein zweites argument um einen string zu verschlüsseln. der string selber wird als initslisierung für randomize genommen.
Zur Sache mit den gleichen Hash-werten:
Es ist theoretisch möglich das es gleiche verschlüsselte werte gibt, aber das ist sehr unwahrscheinlich. ich hab mal brutforce ausprobiert, um zu schauen, ob ich eine Kombination (Klein/großbuchstaben) finde, die den gleichen hash-wert wie "zzzz" hat.
Nach 10 Minuten und 4 500 000 Kombinationen später hab ich abgebrochen.  |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 04.07.2005, 11:11 Titel: Artikel zum Thema eigengestrickte Verschlüsselungen |
|
|
Frisch auf Heise entdeckt:
http://www.heise.de/security/artikel/60711
Dort bietet eine chinesische Firma eine Disk mit Verschlüsselung an und hat dazu das Rad neu erfinden wollen, allerdings mit nur mässigem Erfolg, da es sich relativ leicht knacken lässt.
Dieser Artikel soll nur zeigen, weshalb man möglichst auf bewährte Standard-Verschlüsselungsalgorithmen zurückgreifen sollte. Selbst ein uralter DES wäre für diesen Hersteller immer noch die bessere Wahl gewesen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|