Wie hoch ist die Wahrscheinlichkeit, dass eine Zeichenfolge eine andere Zeichenfolge enthält?

Neue Frage »

Maxov Auf diesen Beitrag antworten »
Wie hoch ist die Wahrscheinlichkeit, dass eine Zeichenfolge eine andere Zeichenfolge enthält?
Meine Frage:
Hallo,

Ein SHA-256 Hash ist 64 Zeichen lang, jedes Zeichen kann dabei einen von 16 Werten annehmen (0-9, a-z). Hier ist ein Beispiel: fffbdf15af1b58fc48d5562b3e12a2bb9ea91e78324f3909723bf048396773dc

Ich würde nun gerne berechnen können, mit welcher Wahrscheinlichkeit eine zufällige Hex-Zeichenfolge mit der Länge n in einem zufälligen SHA-256 Hash vorkommt.

Ein Beispiel: Was wäre die Wahrscheinlichkeit, dass eine zufällige Zeichenkette mit der Länge n=3 (z.B. 'c62') in einem SHA-256 Hash vorkommt?




Meine Ideen:
Als Anhaltspunkt hab ich für n=3 in Open Office tausende von Werten erstellt und ausgewertet, dabei komme ich auf ca. 1,5% Wahrscheinlichkeit. Leider weiss ich nicht, wie ich die Wahrscheinlichkeiten exakt berechnen kann. Für Hilfe und Tipps bin ich dankbar!
Kasen75 Auf diesen Beitrag antworten »

Hallo,

erstmal eine Frage: Kann denn ein einzelnes Zeichen 16 oder 36 Werte annehmen?

Grüße.
Math1986 Auf diesen Beitrag antworten »

Zitat:
Original von Kasen75
erstmal eine Frage: Kann denn ein einzelnes Zeichen 16 oder 36 Werte annehmen?
16 Werte. (gemeint sind die Buchstaben von a-f, nicht a-z)
Kasen75 Auf diesen Beitrag antworten »

@Math1986

AH, OK. Danke für den Hinweis. smile

@Maxov


Erstmal sollte man die Anzahl der möglichen Ereignisse bestimmen. Wenn jedes einzelne Zeichen 1 von 16 Werten annehmen kann, wieviele Variationen gibt es, wenn es 64 Zeichen gibt?




günstige Ereignisse:

x = Zeichen mit irgendeiner Ausprägung aus den 16 möglichen Werten.


Allgemein ist folgende Variation vorstellbar:



Die ersten drei Stellen sind festgelegt. Somit bleiben noch 61(=64-3) Stellen, bei denen ein beliebiges Zeichen stehen kann. Die Anzahl Ereignisse dieser Variation wird dann berechnet wie bei der Anzahl möglicher Ereignisse. Aber eben mit 61 Stellen statt mit 64.

Jetzt ist es aber so, dass "c26" auch an anderen Stellen stehen kann, z.B. an den Stellen 2,3,4 oder 3,4,5. Wenn man die festgelegte Zeichenfolge immer um eine Stelle verschiebt, dann landet man am Ende bei den Stellen 62,63 und 64. Man hat also 62 Möglichkeiten die feste Zeichenfolge "c62" innerhalb der 64 Stellen anzuordnen.
Also muss das Ergebnis aus a) noch mit 62 multiplizieren und man hat die Anzahl der günstigen Ereignisse.

Wenn man jetzt das Ergebnis aus 2. durch das Ergebnis aus 1. teilt, dann hat man die Wahrscheinlichkeit, dass die Ziffernfolge "c26" vorkommt.

Das Ergebnis deiner Simulation entspricht dem, was bei dieser Rechnung herauskommt.

Grüße.
Maxov Auf diesen Beitrag antworten »

Zitat:
Original von Math1986
Zitat:
Original von Kasen75
erstmal eine Frage: Kann denn ein einzelnes Zeichen 16 oder 36 Werte annehmen?
16 Werte. (gemeint sind die Buchstaben von a-f, nicht a-z)


Sorry, das habe ich im ursprünglichen Beitrag falsch ausgeführt. Danke für die Klarstellung.
Maxov Auf diesen Beitrag antworten »

@Kasen75 Super, danke. Das bringt mich schon mal ein Stück weiter.

Ich hab versucht, das mal in eine allgemeine Formel zu bringen, die sieht momentan so aus:



Das passt bei Werten von 3 oder 4 sehr gut mit meinen numerischen Test in OpenOffice zusammen. Wenn ich aber n=1 nehme, dann kommt 4 heraus.
Das kann natürlich so nicht stimmen.

Wo liegt da der Fehler?
 
 
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von Kasen75
Also muss das Ergebnis aus a) noch mit 62 multiplizieren und man hat die Anzahl der günstigen Ereignisse.

Es ist zunächst eine Vereinigung dieser 62 Ereignisse. Die Wahrscheinlichkeit davon wäre das 62-fache der Wahrscheinlichkeit eines dieser Ereignisse, falls diese 62 Ereignisse disjunkt wären ... sind sie aber nicht. Sie sind aber unabhängig voneinander, sofern sie weit genug (mindestens 3 Positionen) voneinander entfernt sind. Sind sie aber "nah" benachbart (zwei oder weniger Positionen), dann gilt auch die Unabhängigkeit nicht.

Eine genaue Berechnung der Wahrscheinlichkeit ist damit ziemlicher Horror, allerdings ist mit angenommener näherungsweise gültiger Unabhängigkeit eine gute Schätzung der Wahrscheinlichkeit möglich, jedenfalls eine wesentlich genauere als mit angenommener Disjunktheit: Denn die ergibt mit statt 64 Positionen für größere irgendwann Wahrscheinlichkeiten größer als 1. Genau das hat Maxov im Fall n=1 beobachtet. Augenzwinkern
Kasen75 Auf diesen Beitrag antworten »

Die enthaltene Zeichenkeitte darf keine vollkommen identischen Elemente enthalten. So muss man z.B. für die enthaltene Zeichenkette 222 anders herangehen. Das gleiche gilt auch, wenn die enthaltene Zeichenkette nur eine Stelle hat. Hier ist es es klar, dass diese Zeichenkette immer identische "Zeichen" hat.

Wenn die enthaltene Zeichenketten aber nicht identisch sind dann klappt es (meiner Meinung nach). Hier mal ein Beispiel:

Code mit 5 Stellen und den möglichen Zeichen 1 und 2. Es soll die Zeichenkette 121 enthalten sein. Die Variationen sind:














Setzt man dies in deine Formel ein ergibt sich für den Zähler:



Grüße.
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von Kasen75













Und (*) hast du falscherweise doppelt gezählt. unglücklich

--------------------------------------------------------------------------------

Mit der "näherungsweisen Unabhängigkeit" bekommt man bei möglichen Ziffern für das Auftreten eines bestimmten Codes der Länge in einem Gesamtcode der Länge die Wahrscheinlichkeit



in deinem Fall mit also

,

was für dann bedeutet. Mit der obigen Formel



kommt gerundet dasselbe heraus. Beides sind in der Tat Näherungsformeln für diese Wahrscheinlichkeit, man muss sich eben Gedanken machen, für welche die getroffenen Approximationsannahmen das Ergebnis noch akzeptabel machen:

(1) basiert auf Unabhängigkeit, ist also desto besser, je kleiner die Überlappungen sind. Im Klartext: (1) ist exakt im Fall (siehe Beispiel von Maxov), wird dann aber mit größerem immer schlechter. Wir benötigen daher für die Anwendbarkeit von (1).

(2) basiert auf der Disjunktheit von Codes, d.h., das gesuchte Codestück sollte möglichst nicht mehrfach an verschiedenen Positionen im selben Code enthalten sein. Das setzt vergleichsweise große Codestücke sowie die "unregelmäßige Struktur" dieser Codestücke voraus. Wenn also letzteres erfüllt ist und außerdem gilt, dann ist (2) durchaus praktikabel. Wie das Beispiel von Maxov oben zeigt, kann diese Formel in anderen Konstellationen aber total "ausbrechen" und Werte größer als 1 liefern.


P.S.: Eine exakte Formel für zu entwickeln, ist wie gesagt ein ziemlicher Horror, zumal sie nicht nur von sondern auch der Struktur des Codestückes abhängt. Für kriegt man das vermutlich noch in den Griff, mit Unterscheidung der beiden Fälle "Codestück besteht aus zwei gleichen / zwei unterschiedlichen Zeichen", bei dürften bereits die ersten grauen Haare anfallen. Augenzwinkern
Kasen75 Auf diesen Beitrag antworten »

Tatsächlich. Ups

Dann würde ich sagen, dass in der gewünschten Zeichenkette keine Zeichen mehrfach vorkommen dürfen.

Wieder ein Beispiel:

Code mit 5 Stellen und den möglichen Zeichen 1,2 und 3. Es soll die Zeichenkette 132 enthalten sein. Die Variationen sind:






























Jetzt sollte keine Variation mehr doppelt sein.

Setzt man die Werte in die Formel ein, ergibt sich:
HAL 9000 Auf diesen Beitrag antworten »

Im Fall und Codestücken aus sämtlich verschiedenen Zeichen hast du Recht. Im Fall kannst du aber mehrfaches Zählen gar nicht verhindern, mit keinem Codestück. Augenzwinkern

----------------------------

Ok, hier mal die exakte Formel für Codestücke, wo keine Überlappungen möglich sind (d.h. im Fall entweder abc, aab oder abb mit paarweise verschiedenen a,b,c):



Das ergibt im Fall den Wert



Nochmal zum Vergleich: Mit Näherungsformel (1) kam auf sechs Nachkommastellen gerundet heraus, mit (2) dann , d.h. (1) ist für diese Konstellation etwas besser als (2).
Maxov Auf diesen Beitrag antworten »

@HAL 9000 Danke für deine Ausführungen!

Formel (1) liefert die Ergebnisse, die ich brauche. Für n=1 erhalte ich laut Formel ~98,39%, mein OpenOffice-Test ergibt ~98,45%. Das passt also recht gut zusammen.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »