UDID-Hashwert kürzen

  • UDID-Hashwert kürzen

    Hallo!

    Ich benötige für eine WiFi-gestützte Kommunikation zwischen iPhone und Mac eine eindeutige Identifizierung des iPhones und habe dabei an die UDID gedacht.

    In der Theorie würde die UDID in jeder Message, die ich vom iPhone zum Mac sende, enthalten sein. Der Mac vergleicht diesen Wert dann mit einem gespeicherten Wert. Da die Messages aber sehr kleine Dateninhalte haben können (nur wenige Bytes), möchte ich den Message-Overhead möglichst gering halten. Derzeit gibt es einen Message-Header, der rund 7 Bytes lang ist. Durch die UDID würde der, wenn es sich um einen MD5-Hash handelt, um 16 Bytes anwachsen - sich also mehr als verdreifachen. Ist es eigentlich möglich, ohne die Identifizierbarkeit signifikant einzuschränken, den Hashwert nur zum Teil, z. B. nur die ersten 4 Bytes, zu verwenden?

    Da ein Hashwert sich ja fundamental ändert, wenn nur ein Bit der Ausgangsdaten sich verändert hat, sollte doch diese Portion des Haswhwertes immer noch mit hinreichender Wahrscheinlichkeit (vielleicht 70 % oder so ...?) "unique" oder umgekehrt: die Wahrscheinlichkeit, dass ein zweites iPhone sich mit einer identischen Haswhwert-Portion an diesem Mac anmeldet, verschwindend gering sein?

    BTW: Ja, wir sprechen nur über Bytes, aber ich möchte gern so schlank wir nur irgend möglich bleiben.

    ##EDIT: Sorry, vermutlich falsches Board.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fwtag ()

  • Schon klar, aber es ist mir halt zuwider, wenn ich 4 Bytes sende, das Ding in eine Struktur zu stecken, die 26 Bytes groß ist. Das hat was von dem Weihnachtsgeschenk im großen Karton, das immer kleiner wird, wenn man sich durch die 100 Schichten Geschenkpapier und Kartons arbeitet ... ;)
  • fwtag schrieb:

    Schon klar, aber es ist mir halt zuwider, wenn ich 4 Bytes sende, das Ding in eine Struktur zu stecken, die 26 Bytes groß ist. Das hat was von dem Weihnachtsgeschenk im großen Karton, das immer kleiner wird, wenn man sich durch die 100 Schichten Geschenkpapier und Kartons arbeitet ... ;)



    Und? Wenn dann ein Brilli zum Vorschein kommt …?

    Größe ist überbewertet!
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Also ich würde Serverseitig beim Connect eine eindeutige ID erzeugen:

    - device Verschickt UDID
    - mac erzeugt eine ConnId (unsigned long oder short) und benutzt diese als Key welcher auf die UDID verweist
    - mac sendet ConnId zum device
    - restliche messages benutzen nur noch ConnId

    Einfach zu implementieren und die eindeutigkeit ist gewährleistet ( 2^32/2^16 ids gleichzeitig sollte reichen ... )

    gruss darius
  • Jede Nachricht, die du schickst enthält die Mac HW Adresse des Senders. Eindeutiger gehts nicht (jedenfalls solange Apple keine gefälschten Netzwerkchips verbaut). Und die kommt sowiso mit jedem IP oder UDP Päckchen.

    Ansonsten kann ich mich den Anderen nur anschließen, ob du 4 oder 8 Byte verschickst ist doch Wurscht. Es gibt Menschen die für die Übertragung eines Integers SOAP mit WSDL verwenden :D
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • rangaroek schrieb:

    Also ich würde Serverseitig beim Connect eine eindeutige ID erzeugen:

    - device Verschickt UDID
    - mac erzeugt eine ConnId (unsigned long oder short) und benutzt diese als Key welcher auf die UDID verweist
    - mac sendet ConnId zum device
    - restliche messages benutzen nur noch ConnId

    Einfach zu implementieren und die eindeutigkeit ist gewährleistet ( 2^32/2^16 ids gleichzeitig sollte reichen ... )

    gruss darius

    Genau das wollte ich auch vorschlagen ;)
    Ansich sollte es doch noch nicht einmal schlimm sein, wenn Du die Nummern fortlaufend vergiebst. Dann sowas wie Huffman-Code, dann sind die ersten 127 IDs nur ein Byte gross, die naechsten...umm...32ooo dann zwei Byte etc. Irgendwann kannst Du wieder bei 0 anfangen, zu vergeben.

    Manfred Kreß schrieb:


    Jede Nachricht, die du schickst enthält die Mac HW Adresse des Senders. Eindeutiger gehts nicht (jedenfalls solange Apple keine gefälschten Netzwerkchips verbaut). Und die kommt sowiso mit jedem IP oder UDP Päckchen.

    Ansonsten kann ich mich den Anderen nur anschließen, ob du 4 oder 8 Byte verschickst ist doch Wurscht. Es gibt Menschen die für die Übertragung eines Integers SOAP mit WSDL verwenden

    Huh? Ich denke auch auf einem Mac kann man problemlos die MAC-Addresse ändern. Mit etwas Aufwand bestimmt auch auf dem iPhone.
    Davon abgesehen finde ich nicht, dass man so ohne weiteres Effizienz vernachlässigen sollte, gerade im mobilen Bereich. WLAN kostet ungemein Akku, wenn alle so "verschwenderlich" mit der Bandbreite umgehen, ist der um so schneller alle. Und die Eisbären haben keine Heimat mehr wegen dem vielen CO2.
    C++
  • zerm schrieb:

    WLAN kostet ungemein Akku, wenn alle so "verschwenderlich" mit der Bandbreite umgehen, ist der um so schneller alle. Und die Eisbären haben keine Heimat mehr wegen dem vielen CO2.

    Genau! Spottet nur über meine Sparsamkeit, aber ich denke nur an die Eisbären!! Hier in HH bei Hagenbeck haben die schon keine Heimat mehr, weil die das Eismeer abgerissen haben.
  • Du kanst auch die komplette Nachricht mit einer Man in the Middle Attacke abfangen und die selbst generierte ID nach belieben verbiegen. Aber wir wollen die Kirche doch mal im Dorf lassen und von normalen Anwendungsfällen ausgehen. Als Sicherheitsfeature taugt beides keinen Schuss Pulver. Dann muss man da wirklich mit einem ordentlichen Handshake ran, aber bitte verschlüsselt.
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • fwtag schrieb:

    Genau! Spottet nur über meine Sparsamkeit, aber ich denke nur an die Eisbären!! Hier in HH bei Hagenbeck haben die schon keine Heimat mehr, weil die das Eismeer abgerissen haben.


    OK, wenn man natürlich an der Küste wohnt ist das ein Argument. Hoffentlich willst du das jetzt nicht wirklich verschlüsseln, dann sauft ihr ab :P
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • fwtag schrieb:

    ber mal ganz ungeachtet all dessen und nun wirklich mal aus reinem Interesse: Ist ein Hashwert, wenn man nur z. B. die ersten 4 Bytes nimmt, immer noch einigermaßen einzigartig oder bricht das dann in sich zusammen?

    Zum Einen ist der uniqueIdentifier ist kein Hashwert, da er eindeutig pro Gerät ist. Die UUID ist eine eindeutige Verschlüsselung eines eindeutigen Wertes. Zum Anderen ist ein Hashwert in der Regel nicht eindeutig, da er eine lange Information verkürzen soll.

    Wenn Du die UUID kürzt dann ist das ungefähr so, als ob Du nach der Eindeutigkeit von vier Ziffern aus einer Telefonnummer fragst.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    fwtag schrieb:

    ber mal ganz ungeachtet all dessen und nun wirklich mal aus reinem Interesse: Ist ein Hashwert, wenn man nur z. B. die ersten 4 Bytes nimmt, immer noch einigermaßen einzigartig oder bricht das dann in sich zusammen?

    Zum Einen ist der uniqueIdentifier ist kein Hashwert, da er eindeutig pro Gerät ist. Die UUID ist eine eindeutige Verschlüsselung eines eindeutigen Wertes. Zum Anderen ist ein Hashwert in der Regel nicht eindeutig, da er eine lange Information verkürzen soll.

    Wenn Du die UUID kürzt dann ist das ungefähr so, als ob Du nach der Eindeutigkeit von vier Ziffern aus einer Telefonnummer fragst.
    Aufpassen: UDID != UUID.

    UUID: Unique Universal Identifier, wird (meist) zur Laufzeit (durch Software) generiert um einzigartig zu sein.

    UDID: Unique Device Identifier, wird - wenn gebraucht - (meist) aus bestimmten Informationen verschiedenster Hardwarekomponenten generiert, bei dem allein beim iPhone die Länge von 40 Zeichen für mich auf einen SHA1 schließen lässt. Aber überzeugender ist dann wohl eher

    developer.apple.com/iphone/lib…UIDevice/uniqueIdentifier

    die Apple-Doku dazu selbst.
    A unique device identifier is a hash value composed from various
    hardware identifiers such as the device’s serial number. It is
    guaranteed to be unique [...]
    -aprodigy

    PS: Ich kann aus irgendeinem Grund hier keine Links mehr einfügen - der Button ist stets deaktiviert - daher der o.g. eher lange Link.