AGB  ·  Datenschutz  ·  Impressum  







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

MD5 + Salt (Shadow-File) aus Windows

Ein Thema von aayb · begonnen am 9. Jan 2008 · letzter Beitrag vom 17. Jan 2008
Antwort Antwort
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#1

MD5 + Salt (Shadow-File) aus Windows

  Alt 9. Jan 2008, 09:00
Hallo zusammen,

da ich hier neu bin, hoffe ich mal, das ich die richtige Kategorie erwischt habe.
Ich habe zwar schon die Suche durchwuehlt, konnte allerdings keine Antwort auf meine Frage finden.

Kurz zu meinem Vorhaben:

Ich moechte ein Shadow-File fuer Linux erstellen (/etc/shadow). Interessant ist hier allerdings nur der Hash des Passwortes. Das Passwort ist wie folgt aufgebaut: MD5-Hash mit Salt.
(Was ich _nicht_ suche, ist das alte Crypt- Verfahren von Linux)

Einen einen einfachen MD5-Hash zu erstellen ist kein Problem, dies mache ich mit MD5Print(MD5String('pass').
Einen salt zu erstellen, ist auch nicht das Problem (RandomBinary(8)).

Nun zur eigentlichen Frage:
Wie bekomme ich diese beiden "Werte" nun mit einander verknuepft, sodass das Passwort schlussendlich auch "gueltig" ist?

Als Beispiel aus der /etc/shadow (Passwort ist 'password'):
$1$7fX5iR5l$L8QJdkpAkAe6/ucGxAbBq.
(Mit Linux-Befehl "passwd" erzeugt)

Wenn ich die Lektueren richtig verstanden habe, ist der Salt "7fX5iR5l".
Das $1$ ist der Hinweis fuer MD5-HMAC(?) - und das Zweite $ ist die Trennung von MD5-Hash zu Salt.

Falls ich etwas durcheinander gebracht habe - bitte nicht schlagen

Hat schonmal jemand so eine Datei erstellt, oder kann mir einen Tip geben, wie ich die beiden Werte miteinander verknuepfe? (Sodass das Passwort ebenfalls gueltig ist)

Besten Dank im Voraus

Gr.
Thomas
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 9. Jan 2008, 13:46
Zitat von aayb:
Hallo zusammen,

[schipp]

Hat schonmal jemand so eine Datei erstellt, oder kann mir einen Tip geben, wie ich die beiden Werte miteinander verknuepfe? (Sodass das Passwort ebenfalls gueltig ist)
Ein einfaches Salt-Dekodieren und dann wieder Zusammenbastelm wie zB so

Delphi-Quellcode:
 
salt:= Base64DecStr('7fX5iR5l');
MD5Init(Context);
MD5Update(Context, @salt[1], length(salt));
MD5Update(Context, @password[1], sizeof(password));
MD5Final(Context,Digest);
shadow := Base64Str(@digest, sizeof(Digest));
ist es jedenfalls nicht, Ergebnis wäre 'QyP1LFyqn4FKW2BonmXIIg=='. Die beiden '==' zeigen schon, daß nicht der ganze MD5-Fingerbdruck verwendet werden kann. Es könnte ein ziemlich kompliziertes Verfahren sein, wie es zB in http://doxygen.postgresql.org/crypt-md5_8c-source.html
verwendet wird. Aber das ist dann nicht in 5 min nach Pascal umsetzbar.

Gruß Gammatester
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#3

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 9. Jan 2008, 14:10
Hi Gammatester,

okay - ich hatte mir schon fast gedacht, das es so "einfach" nicht realisierbar ist.

Nur durch die Suche und den staendig auftretenden Antworten zum Thema Hash/Crypt a la "Aber vergiss nicht, spaeter
noch ein Salt zu verwenden" wurde ich wieder ein stueck optimistischer.

Muss mir dann wohl eine alternative Moeglichkeit suchen, den Hash inkl. Salt zu generieren (Oder mich noch tiefer einlesen).

Besten Dank fuer deine Muehe && Hilfe.

Gr.
Thomas
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#4

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 11. Jan 2008, 09:07
Hi,

jetzt muss ich doch nochmal fragen.

Waere es denn ueber eine DLL realisierbar? Gibt es hier evtl. schon bekannte Implementation?
(Das Hash-Verfahren ist ja nicht gerade unbekannt)

Auch htpasswd (.htaccess-Dateien) kann dieses Hash- Verfahren nutzen (Wenn auch mit einer anderen Salt- Laenge)

Ueber kleine Hinweise und Tips freue ich mich natuerlich auch

Besten Dank
Gr.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#5

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 11. Jan 2008, 10:38
Bei SourceForge.net (ich glaub das war dort) gab's irgendwo ein Delphiprogramm zum erzeugen der .htaccess-Dateien
und IMHO mit QuellCode.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 11. Jan 2008, 12:37
Zitat von aayb:
Hi Gammatester,

okay - ich hatte mir schon fast gedacht, das es so "einfach" nicht realisierbar ist.

Nur durch die Suche und den staendig auftretenden Antworten zum Thema Hash/Crypt a la "Aber vergiss nicht, spaeter
noch ein Salt zu verwenden" wurde ich wieder ein stueck optimistischer.

Muss mir dann wohl eine alternative Moeglichkeit suchen, den Hash inkl. Salt zu generieren (Oder mich noch tiefer einlesen).

Besten Dank fuer deine Muehe && Hilfe.

Gr.
Thomas
Hier ist ein Code, der zumindest Dein Beispielshadow erzeugt. Units gibts auf http://home.netsurf.de/wolfgang.ehrh...rchash_de.html
bzw. im zip

Ausgabe ist:

Test:"L8QJdkpAkAe6/ucGxAbBq."
Calc:"L8QJdkpAkAe6/ucGxAbBq."

Schönes Wochenende
Gammatester


Delphi-Quellcode:
program t_shad;

{$ifdef win32}
  {$apptype console}
{$endif}
uses
  mem_util, hash, md5;

{
Als Beispiel aus der /etc/shadow (Passwort ist 'password'):
$1$7fX5iR5l$L8QJdkpAkAe6/ucGxAbBq.
}




function to64(l: longint; n: integer): string;
const
  a64: array[0..63] of char = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var
  s: string;
begin
  s := '';
  while n>0 do begin
    s := s+a64[l and $3f];
    l := l shr 6;
    dec(n);
  end;
  to64 := s;
end;


procedure md5crypt(const salt, pw: string; var shad: string);
const
  magic: array[0..2] of char = '$1$';
var
  ctx,ctx1: THashContext;
  final: TMD5Digest;
  i: integer;
  l: longint;
begin
  MD5Init(ctx);
  MD5Update(ctx, @pw[1], length(pw));
  MD5Update(ctx, @magic, 3);
  MD5Update(ctx, @salt[1], length(salt));

  MD5Init(ctx1);
  MD5Update(ctx1, @pw[1], length(pw));
  MD5Update(ctx1, @salt[1], length(salt));
  MD5Update(ctx1, @pw[1], length(pw));
  MD5Final(ctx1, final);
  i := length(pw);
  while i>0 do begin
    if i>16 then MD5Update(ctx, @final, 16)
    else MD5Update(ctx, @final, i);
    dec(i,16);
  end;
  fillchar(final,sizeof(final),0);
  i := length(pw);
  while i<>0 do begin
    if odd(i) then MD5Update(ctx, @final, 1)
    else MD5Update(ctx, @pw[1], 1);
    i := i shr 1;
  end;
  MD5Final(ctx, final);
  for i:=0 to 999 do begin
    MD5Init(ctx1);
    if (i and 1) <>0 then MD5Update(ctx1, @pw[1], length(pw))
    else MD5Update(ctx1, @final, 16);
    if i mod 3 <> 0 then MD5Update(ctx1, @salt[1], length(salt));
    if i mod 7 <> 0 then MD5Update(ctx1, @pw[1], length(pw));
    if (i and 1) <>0 then MD5Update(ctx1, @final, 16)
    else MD5Update(ctx1, @pw[1], length(pw));
    MD5Final(ctx1, final);
  end;
  shad := '';
  l := (longint(final[ 0]) shl 16) or (longint(final[ 6]) shl 8) or final[12]; shad := shad + to64(l,4);
  l := (longint(final[ 1]) shl 16) or (longint(final[ 7]) shl 8) or final[13]; shad := shad + to64(l,4);
  l := (longint(final[ 2]) shl 16) or (longint(final[ 8]) shl 8) or final[14]; shad := shad + to64(l,4);
  l := (longint(final[ 3]) shl 16) or (longint(final[ 9]) shl 8) or final[15]; shad := shad + to64(l,4);
  l := (longint(final[ 4]) shl 16) or (longint(final[10]) shl 8) or final[ 5]; shad := shad + to64(l,4);
  l := final[11]; shad := shad + to64(l,2);
end;

var
  shadow: string;
begin
  md5crypt('7fX5iR5l', 'password', shadow);
  writeln('Test:"L8QJdkpAkAe6/ucGxAbBq."');
  writeln('Calc:"',shadow,'"');
end.
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#7

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 17. Jan 2008, 12:12
Gammatester .. du bist einfach nur Klasse!

Vielen vielen Dank, ich hatte die Hoffnung auf Erfolg schon fast aufgegeben!
Der Rest ist ja dann nurnoch ein klacks.

PS: Auch ein Dank natuerlich an himitsu, ich werd bei Gelegenheit mal dort vorbeischauen und nach dem Projekt suchen.

Gr. und ein naechstes schoenes Wochenende, wenn es denn dann kommt.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 17. Jan 2008, 13:30
bitte auch wenn es nicht sofort hilfreich war (weiß halt den Namen nicht mehr ... ist aber auch schon ein/zwei Jahre her, wo ich das mal gesehn hatte ._. )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
aayb

Registriert seit: 9. Jan 2008
14 Beiträge
 
#9

Re: MD5 + Salt (Shadow-File) aus Windows

  Alt 17. Jan 2008, 17:27
Evtl. noch als kurzen Zusatz (Auch wenn es nicht wirklich oft benoetigt wird):
Wenn man sich nun noch den salt mit einer kleinen random-funktion generieren laesst (Sowohl bei htaccess, als auch bei shadow 8 Byte lang), braucht man schlussendlich nurnoch die einzelnen Teile zusammen zu fuegen, um ein gueltigen Hash zu speichern:

Fuer Apache htaccess- Dateien (Mit Option "-m" fuer MD5 Encryption):
'$apr1$'+salt+'$'+shadow

oder fuer ein Linux- Passwort (/etc/shadow):
'$1$'+salt+'$'+shadow

So far,
gr. T.
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:14 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