Kleine Frage zur Sicherheit und Schnelligkeit (byte[])

Hallo,

     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException /*, InterruptedException*/ {
        byte[] ba = new byte[100 * 1024 * 1024];
        Random r = new Random();
        r.nextBytes(ba);
        for (int i = 0; i < 10; i++) {
            System.out.println("ba** = " + ba**);
        }
        long t1 = System.currentTimeMillis();
        speichere(ba, "L:", "byteArrayTest");
        long t2 = System.currentTimeMillis();
        System.out.println("(t2 - t1) = " + (t2 - t1));
        // TODO code application logic here
    }```

ich speichere hier (schnell) 100 MB/MiB auf einen USB-Stick (F:\), um dessen Geschwindigkeit zu ermitteln. Ich will natürlich nicht immer 0101010101... schreiben. Daher verwende ich Random r.

Wichtige Details zur Implementierung hier: http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextBytes(byte[])

Ist sicher, so eine Folge (oder mehrere) auf USB-Stick zu speichern, mit Änderungszeitpunkt, wodurch ja "meine" Zufallsfunktion erkannt werden könnte? (Sortieren und noch---mal mischen?)

Und 2., ist >> oder >>> schneller? Also ggf. bleibt 1 erhalten oder immer wird 0 hineingeschoben. Wieso hat man sich für >> entschieden, obwohl 1 MSB nach (byte)intVal nicht wichtig wäre?

Danke und Grüße. Cyborg.

Hallo nochmal, zur Sicherheit setze ich jetzt 5010241024*8 zufällige Bits auf 0. Wie geht das am besten? FileChannel? Ich müsste ja direkt auf das Filesystem zugreifen.

Ich würds mit nem RandomAccessFile versuchen.

Kurze Frage noch:
10 Bits sind es. Etwa 0,5 sind 0en. 3 zufällige Bitpostionen sollen auf 0 gesetzt werden. Wie-viele Bits sind danach etwa 0en? Wie-viele Bits werden auf 0en gesetzt?
1/210/10 + 1/210/109/10 + 1/210/109/108/10
= 10/10 + 90/200 + 720/2000
= 1/2 + 9/20 + 72/200
= 0,5 + 0,45 + 0,36
= 1,31 + 5 = 6,31 Bits (insgesamt) sind etwa auf 0en gesetzt.
Stimmt meine Rechnung? Das ist ja nicht so-viel.
Wenn etwa 6 von 10 Bits auf 0en gesetzt sind, entspricht diese Folge dann noch einer kryptographisch starken Zufallsfolge?, lässt sich etwas rekonstruieren?
Bei der Berechnung oben kann ja 1/2 weggelassen werden, und anschließend durch 2 geteilt werden. Wie lässt sich weiter vereinfachen, bei etwa 10^6 ist das viel zu viel.
Grüße trotzden.

Weder wird wirklich klar was du machen willst / vorhast noch was die Frage sein soll.

Auch deine letzte Frage bezüglich “kryptographischer Sicherheit” (ich denke das brauch hier nicht weiter vertieft zu werden) ist hier vielleicht der falsche Ort (denn ich geh einfach mal von aus das keiner der hier aktiven User richtiger Sicherheitsexperte oder gar Kryptograph / Kryptologe (oder was auch immer) ist).

Bezüglich der Geschwindigkeit : wie ist “speichere(byte[], String, String)” implementiert ? -> Code posten

Das ist ganz einfach. Ich mach ziemlich viel mit static. Teile der Methode hatte ich schon mal gepostet (andere Stelle), daran liegts nicht.

        long ctm = System.currentTimeMillis();
        String name = String.format("%04d_%tF_%tT_%03d_%s", index, ctm, ctm, ctm % 1000, fileName);
        name = name.replace('-', '_');
        name = name.replace(':', '_');
        System.out.println("pathName = " + pathName);
        System.out.println("fileName = " + fileName);
        FileOutputStream fos = new FileOutputStream(pathName + File.separatorChar + name);
        fos.write(ba);
        fos.flush();
        fos.close();
        index++;
    }```
index ist nur eine statische Variable. Das ist wegen nicht try-catch-finally- jetzt nicht so, wie man das machen sollte.
[OFFTOPIC]Ich bin jetzt nicht so das Mathe- genie. Aber ich wollte das direkt rekursiv schreiben:
```    public static double berechne(int n, int i, double p) {
        if (i <= 0) {
            return p;
        }
        return p + berechne(n, i - 1, (n - i) / (double) n * p);
    }```
Jetzt stimmen die Werte so ungefähr, aber irgendwie auch nicht.[/OFFTOPIC]

 Eigentliche Frage war ja, wie man direkt auf einzelne Bytes der Datei auf dem usb- stick zugreift und ob man Rückschlüsse auf die "Hardware" bei der langen Folge ziehen kann.

Ich schau' mir das morgen noch-mal an.

WAS liegt WORAN nicht ?
Was ist das IST-Ergebnis, was das SOLL-Ergebnis, WO hast du Probleme ?
Die Fragen kennst du und hast du mehrfach auch schon selbst gestellt. Ich wiederhole mich noch mal : es wird leider (zumindest mir) nicht klar was die Frage ist oder was du überhaupt vorhast.

Bezüglich des Zugriffs : RandomAccessFile

Bezüglich der Rückschlüsse : WELCHE ? Wenn du zwei völlig verschiedene Systeme hast, die eine beide mit exakt den gleichen Startparametern erzeugt werden, und die beide eine „pseudo-zufällige“ Folge nach der gleich Formel berechnen haben auch exakt den gleichen Output. Wenn du also jetzt mit der Frage darauf abzielst ob man anhand des Bit-Musters erkennen kann wodurch diese Erzeugt wurde, oder direkter : verschiede Systeme zu unterscheiden und entsprechend zuordnen zu können, würde ich spontan behaupten : ohne die Kenntnis der jeweiligen Startparameter der einzelnen System praktisch (und vermutlich auch theoretisch) nicht lösbar.

Gut, also wenn ich Probleme hab, melde ich mich. Es ging einfach darum, dass ich auf dem Usb stick keinen “Fingerprint” von meinem Computer hab.

Klammer in Urls eigentlich nicht, der Link oben: http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextBytes(byte[])

rnd >>= 8, da wird/wurde doch nicht einfach so >>= anstatt >>>= geschrieben, also doch ein unterschied in der Performance. Bin nun offline.

[Ot] wieso nicht einfach fluessiges deutsch schreiben? Es ist echt schwer zu verstehen, was du eigentlich meinst… :frowning: auch hier nochmal: es gibt jetzt den ot tag ;)[/ot]

Nun, wenn man diese Frage aus der Sicht von diesem komischen „Verteilungproblem“ oder wie das heißt sieht ist es zwar schon möglich das dein Rechner eine Art „einzigartigen Fingerprint“ hinterlässt, aber es ist ohne weiteres nicht möglich diesen (so man ihn denn überhaupt identifizieren kann) ihn wieder eindeutig deinem Rechner zuordnen kann. Das hat glaube ich was mit der theoretischen Annahme zu tun das man nun mal nicht sagen kann ob der Fingerprint überhaupt eindeutig ist und so nicht weis wie viele Zuordnungsmöglichkeiten vorhanden sind. Wie gesagt, hat alles irgendwie mit diesem Verteilungs-dings-…-ähm-what-ever zu tun, halt so dieser theoretische Krams.

Anders könnte man sagen : wenn du deinen USB-Stick bis auf das letzte nutzbare Byte mit Nutzdaten beschreibst sind die Informationen die man wieder rauslesen kann auch eben nur diese Nutzdaten ohne jegliche „Zufalls-Daten“ die irgendeinen Rückschluss auf dein System zulassen könnten. Klar könnte man jetzt forensisch rangehen und den Chip direkt untersuchen, aber ich glaube kaum das man das was man findet dazu nutzen könnte auf genau das System zurückzukommen wo der Stick das letzte mal angeschlossen war.

Ich bin mir auch erlich gesagt nicht sicher ob das überhaupt in der Relatität so möglich ist wie es uns Hollywood verkaufen will das es halt sowas wie einen Hardware-Fingerprint gibt. Klar, jeder einzelne Chip hat seine ganz einzigartigen Besonderheiten die von Ungleichheit im Silicium-Kristall bis zu Herstellungsfehlern durch Verschleiß reichen, aber wie war das mit Schrödingers Katze noch gleich : schon das Betrachten/Beobachten eines Objektes verändert dies. Ich würde es so umformulieren : beim Versuch Informationen zu erlangen die auf deine Hardware zurückzuführen wären würde man diese verändern/unbrauchbar machen und so eben nicht bei dir landen.

Kann auch sein das ich völligen Müll erzähle, bin halt nicht so der große Theoretiker, wobei ich auch die Frage an sich merkwürdig finde.

Ich denke auch nicht, dass mit dem Anschließen an eine USB Schnittstelle irgendwelche forensisch verwertbaren Daten entstehen.

Schon mal daran gedacht, was fuer Code so auf dem Mikrocontroller des USB Sticks laeuft?
Gab doch erst wieder ein paar Meldungen zu diesem Thema, Stichwort USB Sticks die sich als Tastatur ausgeben usw.
Wenn man sich Sorgen machen will, sollte man vielleicht ein paar Ebenen tiefer anfangen.

“Just because you’re paranoid doesn’t mean they’re not after you”

Wenn das als Antwort auf meinen Post gedacht war…natürlich “kann” man mit einem USB Sticks Informationen abziehen, die einen PC eindeutig identifizieren. Ich denke oben geht es eher darum, einen 0815 USB Stick mit Daten zu füllen und außer den DAten weist nichts darauf hin, wo der USB Stick herkommt. Mögliches Szenario: Malware USB Sticks auf Messen, Pentests etc. Als “Verteiler” möchte ich vermeiden, dass irgendjemand Rückschlüsse ziehen kann, woher die Malware kommt.

War nur allgemein in dir Runde geworfen und eher auf den TS gemuenzt :slight_smile: