Autor | Beitrag |
---|
000 16.09.2010, 18:07 Felheart |
Hi, ich habe ein Programm welches auf einen Server verbindet und sich dort Authentifiziert. Bisher läuft das ganze so: Die Hardware ID kann auch eine Seriennummer oder sonstwas sein. Ich suche also eine minimalistische Möglichkeit mein Authentifizierungsverfahren Welche relativ simplen aber dennoch sicheren Header/Librarys würdet ihr empfehlen? -- |
Profil || Suche |
001 16.09.2010, 21:19 Prefect |
Noch einfacher: Solange du einfach nur an einer Stelle im Programm einen Aufruf der Form: Grundsätzlich musst du dir erstmal klarmachen, dass solche Maßnahmen einfach nie zu 100% dicht sein können. Das geht nicht. Wenn du das eingesehen hast kannst du dir dann überlegen, wie viel Energie du hineinstecken willst. Je mehr Energie du in Sicherungsmechanismen steckst, desto mehr Energie wird ein Cracker benötigen, sofern deine Maßnahmen auch qualitativ gut ist. An dem Beispiel oben siehst du z.B. dass eine Maßnahme, die nur durch Verschlüsselung "geschützt" ist, de facto eigentlich ungeschützt ist. Ich weiß nun nicht, was das für Software ist, an der du bastelst. Mit hoher Wahrscheinlichkeit würde ich aber davon abraten, zu viel Energie in die Geschichte hineinzustecken. Den Aufwand, den du in einen sichereren Schutz stecken müsstest, solltest du stattdessen in die Verbesserung deiner Software stecken. Ein primitiver Check hilft vollkommen, um ehrliche Kunden ehrlich zu halten und du solltest eher Energie rein stecken, ehrliche Kunden zu gewinnen und bei der Stange zu halten. --Widelands - Gemütliche Aufbaustrategie, Free Software Dieser Beitrag wurde am 16.09.2010 um 21:19 von Prefect bearbeitet. |
Profil || Suche |
002 16.09.2010, 22:12 Felheart |
Ich stimme dir in allen Punkten zu Perfect! Das eine Sicherung nie 100% sicher ist mir auch klar. Also, Vorschläge wie ich meine Verbindung Server<>Client |
Profil || Suche |
003 17.09.2010, 14:42 Prefect |
Alles klar. Also von der Perspektive ausgehend, dass dein Client nicht manipuliert wird sondern nur der Netzwerktraffic zwischen Client und Server: Du kannst dem Server ein kryptographisch verifizierbares Zertifikat geben. Der öffentliche Teil dieses Zertifikats müsste der Client dann fest gespeichert haben, und beim Verbinden eben prüfen, ob (a) das Zertifikat des Servers mit dem gespeicherten Zertifikat übereinstimmt und ob (b) der Server sich erfolgreich mit dem Zertifikat identifizieren kann (das ist ein kryptographischer Test mit dem Server beweist, dass er den privaten Teil des zugehörigen asymmetrischen Schlüssels kennt). Das sind alles Funktionen, die meines Wissens von SSL abgedeckt werden. Ein Experte in der Implementation davon bin ich aber nicht. An deiner Stelle würde ich versuchen, mich in OpenSSL einzuarbeiten - ich habe zwar ziemliche Horrorgeschichten über die Unverständlichkeit der API gehört, aber es ist nunmal die De facto-Standardimplementierung, die frei verfügbar und ziemlich genauer Prüfung unterworfen ist, d.h. ich würde diese Route wählen, wenn ich in deiner Position wäre. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
Profil || Suche |
004 17.09.2010, 16:26 Xardas |
Und SSL, und damit genau das was du beschrieben hast, basiert auf RSA. Das wäre der Teil, den du zu implementieren hast ;) http://www.di-mgt.com.au/rsa_alg.html Music Artist / 2D Artist / Mapper Dieser Beitrag wurde am 17.09.2010 um 16:31 von Xardas bearbeitet. |
Profil || Suche |
005 18.09.2010, 09:41 Prefect |
RSA selbst zu implementieren ist eine blöde Idee, zumindest wenn man es mit der Sicherheit ernst meint. RSA, so wie es im Lehrbuch meist steht, ist nämlich nicht sicher. Sicher wird es erst, wenn man eine ganze Reihe zusätzlicher Probleme berücksichtigt. Das wird zwar auf der Seite, die du verlinkt hast, auch erwähnt, aber schon Kleinigkeiten, die man leicht übersieht, führen bei kryptographischen Protokollen zu deutlichen Schwächen. Klar, wenn du dich Interesse halber mit Kryptographie beschäftigen willst, dann ist es eine nette Übung, RSA selber zu implementieren. Aber wenn du RSA verwenden willst, ist echt davon abzuraten. Dann sollte man eine existierende Bibliothek verwenden, bei der das Bugfixen schon gemacht wurde. Abgesehen davon basiert SSL bei weitem nicht nur auf RSA. RSA wird höchstens beim Handshake verwendet um den Schlüssel für eine symmetrische Block Cipher auszutauschen. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
Profil || Suche |
006 19.09.2010, 23:13 default |
was spricht gegen nen signierten hash von paar hardware eigenschaften?, kann man genausoleicht rauspatchen, aber der kram braucht keine internetverbindung --Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst. |
Profil || Suche |
007 22.09.2010, 16:09 Felheart |
Ich hab bereits ein System das so ähnlich arbeitet. Ich generiere (im Client) eine HardwareId+Timestamp (bsp: 1234-abcd), dann verschlüssel ich den. Der String wird mir zurückgeschickt, ich entschlüssle ihn. Ich prüfe ob der Timestamp nicht zu alt ist, dann überschreibe ich den Timestamp-teil des Keys mit dem Wert bis wann der neue Key gültig sein soll. Das ganze wird wieder verschlüsselt und zurückgesendet. Soweit so gut. SSL ist irgenwie nicht gerade einfach. |
Profil || Suche |
008 24.09.2010, 14:29 Prefect |
Da hast du default wohl falsch verstanden. Er hat ein System vorgeschlagen, bei dem überhaupt keine Netzwerkverbindung notwendig ist. Ich stimme ihm da auch grundsätzlich zu. Ich weiß ja nicht, woran du genau arbeitest, aber ich wette, dass du da gerade viel Zeit und Energie in etwas hineinsteckst, womit du höchstens ehrliche Menschen ärgern wirst, effektiv aber nichts gegen unehrliche Menschen erreichen kannst. Mit anderen Worten, du produzierst eine Lose-Lose-Situation. --Widelands - Gemütliche Aufbaustrategie, Free Software |
Profil || Suche |
009 24.09.2010, 17:20 default |
die api eigentlich schon, wenn man nicht grade ... aber das wirst du eh nicht machen. Ja, vergiss deine 'Lösung', sie schafft unlösbare Probleme. -- Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst. |
Profil || Suche |
010 24.09.2010, 22:44 Felheart |
@Perfect: Es sei denn du meinst das ich "vorregistrierte" Versionen verteile, dann handelt es sich um ein Missverständnis. Also eine Vollversion die per HardwareID usw. an einen Computer gebunden ist. Hier gestaltet sich dann aber eine Begrenzung der Nutzzeit auf eine gewisse Zeitspanne recht aufwändig. (Jedesmal wenn die Zeit um ist eine neue Version installieren ??) @default: Zum Thematik 'Sicherung von Netzwerktraffic': Vielen lieben Dank für die Antworten bisher! --Dieser Beitrag wurde am 24.09.2010 um 22:44 von Felheart bearbeitet. |
Profil || Suche |
011 25.09.2010, 02:21 Bluthund |
Wieso schreibst du jetzt eigentlich schon zum zweiten Mal "auf Sockets uebertragen"? Ueber welchen Mechanismus kommunizieren denn bei dir Client und Server im Moment miteinander? Und wie kommt der Schluessel fuer das symmetrische Verschluesselungsverfahren (was eben "DES und Konsorten" nunmal sind) dann zum Server damit er die Nachrichten vom Client entschluesseln kann? Wenn deine Antwort hierauf "hybrides Kryptosystem" lautet, kannst du den Schluessel fuer das symmetrische Verfahren auch gleich zur Laufzeit generieren und brauchst ihn ueberhaupt nicht erst in der Binaerdatei ablegen. Prefect und default haben eigentlich schon alles gesagt, was es zu sagen gibt. The C language combines all the power of assembly language with all the ease-of-use of assembly language. Dieser Beitrag wurde am 25.09.2010 um 02:29 von Bluthund bearbeitet. |
Profil || Suche |
012 25.09.2010, 19:41 default |
Ich würd mal gerne wissen um was für eine Perle es sich hier handelt, dass der Kopierschutz so komplex sein darf. Für die client/server Geschichte: Ich hab bisher nicht den Eindruck gewonnen, dass du überhaupt ne Grundlegende Idee von SSL hast. Wenn dir der nen Kopierschutz so wichtig ist, hashe paar Hardware Eigenschaften, Festplatten Seriennummer, Netzwerkinterface MAC, und Lizenzlaufzeit und *signiere* das. Am Ende sind es eh nur 2 Byte die gesetzt werden möchten, damit das auch ohne Lizenz geht, aber ein offline Lizenzverfahren ist halt weniger Hass für den Nutzer, daher eher weniger Lose-Lose. Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst. |
Profil || Suche |