Frage

Gestern fragte ich Sind GUIDs erzeugen unter Windows 2003 sicher wie Session-IDs verwenden? und die Antwort in Verbindung mit diesem Artikel kombiniert UUIDs und GUIDs von 1998) die GUID besteht aus:

  • 60 Bit Zeitstempel,
  • 48 Bit von Computerkennung,
  • 14 Bit von uniquifier und
  • sechs Bits sind fest

durch das Gehen, wenn ich generieren 10 GUIDs die ersten 15 ASCII-Zeichen (ohne ‚-‘) sind die Zeitstempel, die nächsten 12 ASCII Zeichen der Computerkennung sind, werden die nächsten 3,5 ASCII-Zeichen sind zufällig und die letzten 1,5 Zeichen sind fest .

Ankommen 10 GUIDs auf meinem Vista-PC das .Net System.Guid.NewGuid mit () ergibt:

b4e95ead-3619-4dc2-9102-cf7ab0efd927
a45ee719-decd-46b2-8355-7becbe406f74
9af68d75-35a0-4907-b6ab-f15e33acfe96
bed88fa3-3209-4a19-97dd-85d5428ea5f4
123cb39b-8d81-41c6-8894-f1257a8f7606
e2b1f6b1-5791-4a18-80a9-5dc668574ecb
c52aa660-2629-4659-bb83-5583081e5a1c
76eda32d-ceda-412e-8ade-30c47416e954
cbc4d45e-7281-40d2-9f90-00539b04fe98
be36524c-267c-4791-bc9e-3c20b29d7615

Das einzige erkennbare Muster von einer schnellen Sichtkontrolle ist, dass das 13. ASCII-Zeichen ist immer 4.

ich wieder ich frage nach links auf System.Guid wenn unter Berufung IDs zu erzeugen Pseudo-Random-Sitzung ist stark genug, um eine Web-Anwendung zu schützen, in denen einen Sitzungs-ID Knacken höchstens Tausende von Dollar wert sein würde?

Update: Anstatt eine GUID verwendet jetzt unter meiner Session-IDs unter Verwendung des Ansatzes zu erzeugen, ich plane. Ich bin die 384-Bit-Zufallszahl zu einem 0x00-Byte-String konvertieren, so dass sie für die Verwendung in einem HTTP-Cookie geeignet sind.

RNGCryptoServiceProvider rngProvider = new RNGCryptoServiceProvider();
byte[] myKey = new byte[48];
rngProvider.GetBytes(myKey);
string sessionID = null;
myKey.ToList().ForEach(b => sessionID += b.ToString("x2"));
Console.WriteLine(sessionID);
War es hilfreich?

Lösung

Es ist nicht eine vollständige Antwort, aber ich kann Ihnen sagen, dass der 13. Hexadezimalzeichens ist immer 4, weil es die Version des Algorithmus verwendet wird, bezeichnet die GUID zu generieren (id est, v4); auch, ich zitiere: Wikipedia:

  

Cryptanalysis des WinAPI GUID   Generator zeigt, dass, da die   Folge von V4 GUIDs ist pseudo-zufällige,   der Anfangszustand einer Dose gegeben   vorhersagen, bis zu den nächsten 250 000 GUIDs   durch die Funktion UuidCreate zurückgegeben.   Aus diesem Grund GUIDs sollten nicht verwendet werden   in der Kryptographie, zum Beispiel als zufälliger Schlüssel.

Der Rest des Artikels und seine Referenzen: http://en.wikipedia.org/wiki/ Guid

- Bearbeiten -

Vom Standpunkt der Sicherheit aus, würde ich vorschlagen, dass Sie Ihre Session-ID generieren, aber Sie fühlen sich wie, dann verschlüsselt es unterzeichnen; Auf diese Weise kann in packen kann, was auch immer Informationen, die Sie wollen, und dann schlägt nur eine Signatur am Ende - die mögliche Ausgabe der Kompromiss zwischen der Größe / Stärke Ihres Schlüssels und der daraus resultierenden Größe des Cookies zu sein. GUIDs sind als IDs, aber ich würde nur auf einer speziellen Verschlüsselungstechnik für die Sicherheit verlassen können.

Andere Tipps

Ich schlage vor, Sie die System.Security.Cryptography.RandomNumberGenerator . Dies dient dazu, Zahlen zu erzeugen, die nicht rückentwickelt werden. Guid, die Motivation ist einzigartig. Sie könnten sowohl die GUID kombinieren und Zufallszahl sichern, aber eine 128-Bit-sichere Zufallszahl wird nie eine Kollision auf der Praxis gehen zu müssen.

Einige Hinweise:

  1. Ich bezweifle, dass jede Implementierung von GUIDs entworfen wurde cryptograhpically sicher. (Und diese Vermutung durch den Artikel bestätigt für das nächste Element verknüpft werden würde.)
  2. Der 13. ASCII-Zeichen ist ein Signifikant von , welcher Algorithmus verwendet wurde, um die GUID .

Wenn Sie wirklich besorgt sind mit starken Session-IDs hat, dann vielleicht einen kryptografisch sicheren Hash-Wert von etwas, das nicht von außerhalb der Maschine bestimmt werden kann, wäre die beste Ansatz. Vielleicht ein one-time pad von einem internen Dokument oder Datenquelle würde auch arbeiten zu erzeugen.

Was wollen Sie tun? Haben Sie nur eine Quelle von Zufallszahlen wollen?

Schauen Sie sich random.org und HotBits . Viele vor vielen Jahren hatte ich eine Java-Bibliothek, die Zahlen aus diesen Quellen sammeln würde, und kommen sie zusammen, eine ganz schöne zufällige Reihe zu bekommen (obwohl es die beiden Seiten sind nicht in cahootz annimmt).

Die kurze Antwort ist, sind keine GUIDs nicht stark genug Sitzung IDs zu generieren, wenn Sie Session-ID erraten und Rissbildung vermeiden möchten.

Aus dem gleichen Grund, warum Sie nicht eine GUID als AES-Schlüssel verwenden möchten, Sie wollen nicht, sie für jede Art von sensiblen identifiziert verwenden.

Eine GUID funktioniert sehr gut für das, was sie sein sollen. Eine mathematisch guarenteed eindeutige ID nie wiederholen

Auch wenn eine Session-ID Cracken nur im Wert von $ 1000, vorstellen, wenn das ist 100-mal getan. Jetzt sind Sie ernsthaft bling sprechen.

Ich weiß, es ist ein einfacher Ausweg GUID zu verwenden, aber widerstehen, und mit dem Schmerz umgehen, indem Sie die richtigen Vorsichtsmaßnahmen ausreichend Ihre Anwendung zu sichern. Die Benutzer werden es Ihnen danken.

Es ist fast unmöglich, ein Duplikat guid unter Berücksichtigung der Möglichkeiten zu bekommen eine zu bekommen. Hier sind einige schnelle mathematische Fakten

Sandkörner in der Welt 75.000.000.000.000.000.000

Anzahl der GUIDs 340.282.366.920.938.463.463.374.607.431.770.000.000

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top