2016-09-06 2 views
1

Ich versuche, UUIDs zu erstellen, die Sicherheitsmaßnahmen enthalten, die Replay-Angriffe verhindern. Ich plane, einen Zeitstempel an die UUID anzuhängen und den Beacon zu verschlüsseln. Die Verschlüsselung erzeugt ein 16-Byte-Objekt, aber der Beacon-Sender erfordert, dass die UUID eine Zeichenfolge mit konsistenter Länge ist. Gibt es eine Möglichkeit, ein Byte-Objekt anstelle von String zu übertragen. Außerdem muss ich den verschlüsselten Beacon mit der Zeit ändern. Sollte ich a: beaconTransmitter.startWerbung (Beacon); Timeout (1 Sekunde); beaconTransmitter.stopAdvertising (Beacon); und rekursiv meine Beacontransmit-Methode aufrufen?Verschlüsseln von Altbeacons

Antwort

0

Wenn Ihre Verschlüsselung wirklich ein 16-Byte-Objekt erstellt, sollten Sie in der Lage sein, es in eine UUID zu konvertieren, die ebenfalls 16 Byte lang ist. Es sollte so einfach sein wie:

Identifier uuid = Identifier.fromBytes(byteArrayOfLength16, 0, 15, false); 

Allerdings machen Verschlüsselungsalgorithmen in der Regel eine viel längere Byte-Array als die Ausgabe. Sie können alle bis auf 16 der Bytes aus der verschlüsselten Ausgabe entfernen, um einen Hash zu erstellen (dies ist im Grunde was Eddystone-EID tut), aber dies kann nicht entschlüsselt werden. Das empfangende Gerät müsste die gleiche Verschlüsselungsberechnung für einen gegebenen Zeitstempel durchführen, um zu sehen, ob es den gleichen Wert berechnet. Wenn es das tut, weiß es, dass es eine Übereinstimmung gefunden hat.

Ja, der Ansatz, Werbung auf der Grundlage eines Zeitstempels zu starten, auf eine Verzögerung zu warten und Werbung basierend auf einem neuen Zeitstempel zu starten, ist sicherlich der richtige Weg.

Verwandte Themen