UUID ermitteln
-
Hi,
ich habe folgendes Problem. Und zwar möchte ich ein Programm schreiben das für weitere Operationen die (Haupt-) UUID (oder eine Andere eindeutige Hardware ID ) ausließt. Nur habe ich das Problem, dass die meisten Beispiel oder Ansätze die MS Bibliotheken brauchen und somit für mich nicht nutzbar sind. (Plattform-unabhängig wäre gut ist aber nicht zwingend nötig => Hauptsache Linux müsste gehen)Hoffentlich habe ich mich verständlich ausgedrückt
-
Hoffentlich habe ich mich verständlich ausgedrückt
Noe !
Im Ernst:
UUIDs sind nur die vereinheitlichung einer Universal Unique Identifer ... irgendwas.
Mit UUID's kann(sollte) man nur eines machen, vergleichen.
Ich bezweifle, das es dafuer unter linux keine Bibs gibt. Und selbst wenn nicht, wuerde es man selber mit nem memcmp auch hinbekommen.Fuer die Erzeugung gibt es auch vogeschlagene Vorgehensweissen, die teilweisse scho aus der Natur der UUID kommen. Ich bezweifle wiederum das es dafuer keine lib unter linux gibt.
Lies dir am besten mal nen Tutorial zu den UUIDs durch, dann kommst sicher schnell dahinter, das das eigentliche problem nur das erzeugen ist.
Fuers erzeugen wiederum gibt es zig Vorgehensweissen / Varianten, welche eigentlich schon mit der entsprechenden verwendung harmonieren sollten.
Also aus deinem post kann man gar nichts rausziehen an info ... nur das du uuids haben muesst irgendwo, und das es irgendwas mit hardware gibt (sind das scho uuids ??? ) ... etc.
Ne platformunabhaengige Implementierung mit "tollen" c++ klassen, vergleichsfunktionen und paar gelaeufige erzeugungsmethoden gibt es natuerlich schon, und zwar dort wo man als ernstzunehmender C++ Programmierer sowieso mit zuerst schauen sollte -> boost::uuid
Das wird Dir aber natuerlich auch nicht helfen, wenn du nicht genau weisst was willst / brauchst ...
Also beschreib mal genauer wie du UUIDs erzeugen willst ....
Ciao ...
-
Erstellen will ich gar nichts, nur auslesen.
Zum Beispiel Debian erstellt bei der Formatierung der Festplatte so genannte UUIDs, die als eindeutiger Identifikator schon existieren. Diese schon vorhandenen UUIDs würde ich gerne auslesen.
Alternativ wäre auch ein anderer Ansatz möglich. Nämlich der, dass ich irgendwie aus der Hardware Konfiguration des Systems einen Hash bzw. Schlüssel erzeuge. Dieser sollte wenn möglich dieses System eindeutig Identifizieren.
Also auch entsprechend lang sein.Hoffe jetzt ist es klarer.
-
Unter Linux kannst du die Sachen aus /sys, /proc und /dev auslesen. Schau mal was lshw macht oder in der Kernel-Doku.
-
gulbim schrieb:
Dieser sollte wenn möglich dieses System eindeutig Identifizieren
Ich hoffe du willst nicht irgendwelche Nutzungsbeschränkungen in deinem Programm einbauen.
-
Nein ich brauche halt irgend eine Möglichkeit einen eindeutigen, Hardware basierten Schlüssel oder Hash zu bekommen. Das ganze soll für eine Verschlüsselung genutzt werden. Also wenn jemand eine bessere Idee als die UUID hat bitte unbedingt hier posten.
Auf die Idee mit lshw bin ich auch schon gekommendas bringt nur leider nicht den Nutzen den ich gern hätte. Es aus /sys, /proc und /dev auslesen wäre schade, da damit die Möglichkeit auf Platformunabhängigkeit definitiv verloren ginge.
-
Die UUIDs, die unter Linux erstellt werden, sind soweit ich weiß nicht hardwarespezifisch. Da wird einfach _irgendeine_ UUID verwendet, damit man keine Pfadabhängigkeiten bei Blockdevices mehr hat.
Erstellen kannst Du die zB. mit uuidgen oder den genannten Boost-Sachen. Wobei das alles nicht viel mit Hardware zu tun hat.
Beschreibe am besten Mal, wie Du die UUID für Deine Verschlüsselung verwenden möchtest, dann kann Dir vmtl. besser weitergeholfen werden.
-
Ich weiß nicht ob die UUID das richtige ist aber mich möchte eine Verschlüsselung die sich nur mit einen Passwort auf einem bestimmten PC entschlüsseln lässt. Und für die PC Komponente brauche ich eine Hardware ID / Hash / Schlüssel Komponente aber so wie sich das anhört ist dafür die UUID nicht brauchbar vielleicht hat jemand eine bessere Idee / Möglichkeit.
-
gulbim schrieb:
Ich weiß nicht ob die UUID das richtige ist aber mich möchte eine Verschlüsselung die sich nur mit einen Passwort auf einem bestimmten PC entschlüsseln lässt.
Ich würde dir empfehlen diesen Artikel zu lesen und deinen Ansatz nochmal zu überdenken: http://0pointer.de/blog/projects/ids.html
Das größte Problem dabei ist, dass bei normalen PCs gar nicht so klar ist, was "der PC" eigentlich ist. Wenn man alle Festplatten austauscht, ist es dann noch derselbe PC? Wenn man nur die CPU durch eine schnellere ersetzt? Wenn man nur die Maus durch eine andere austauscht? Ab wann ist es ein neuer PC?
-
Hi,
Danke ich glaube die "/var/lib/dbus/machine-id" ist genau die Eindeutige Nummer die ich brauche. Es scheint sich dabei ja um eine Hardwarespezifische Nummer zu handeln die eindeutig ist. Oder irre ich mich ich ?
-
du irrst dich. es ist ein uuid die bei bedarf zufällig generiert wird.
-
Gibt es denn dann irgendeine Möglichkeit einen Schlüssel zu erzeugen der von der Hardware abhängig ist. Notfalls brauche ich nur eine Möglichkeit diese Daten Auszulesen z.B. (falls es so etwas gibt) die BIOS Seriennummer da sich die ja nur ändert wenn man das Mainboard wechselt (Oder ganz selten das Bios).
-
Ich habe vor fünf Jahren oder so mal für einen Kunden nach etwas derartigem gesucht und bin nach zwei Tagen Recherche zur einfachen Antwort "Nein" gekommen.
Vielleicht hat sich das seit damals auch geändert oder ich habe schlampig recherchiert. Aber könnte durchaus nach wie vor gelten.
Wobei die Idee mit der Verschlüsselung an sich schon eher kaputt klingt, wenn Du nicht irgendeinen Kopierschutz oä. schreibst. Wenn die Kopierschutzsache wichtig genug ist, um sie mit Entwicklungszeit zu bewerfen, bist Du vmtl. billiger und günstiger dran, wenn Du in irgendeinen Hardwaredongle investierst. (Nicht, dass ich die Dinger so unheimlich schätzen würde, aber der Kopieraufwand wird damit doch beträchtlich höher.)
-
Also wenn jetzt so viele sagen das es nicht so funktioniert, dann lass ich es lieber.
Damit wäre das Thema dann auch closed.
p.s. Falls ich doch ne Lösung finde melde ich mich.