2009-04-17 8 views
4

Ich habe eine XML-Datei, die den Namen des Unternehmens beschreibt, für das das Produkt lizenziert ist, die Version und einige zusätzliche Informationen.Wäre es mit dieser Art der Überprüfung einer Lizenz in Ordnung?

Blick so etwas wie dieses

<Licence> 
    <Name>sdfsdf</Name> 
    <Version>1.2.1.1</Version> 
    <NumberOfServer>4</NumberOfServer> 
</Licence> 

ich dann dieses fiel unterzeichnen einen privaten Schlüssel und

<Licence> 
    <Name>sdfsdf</Name> 
    <Version>1.2.1.1</Version> 
    <NumberOfServer>4</NumberOfServer> 
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
     <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
     <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
     <Reference URI=""> 
     <Transforms> 
      <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
     </Transforms> 
     <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <DigestValue>M368eFB9ydifttSxX26sB6XiPV4=</DigestValue> 
     </Reference> 
    </SignedInfo> 
    <SignatureValue>TTYP6d+zESn6/2PtL5ikN+7E9u8Njm32vYVyVANC5U0EGLBwS//3yPjUoBx3glJXHClzPQBQEUi0LJNauTFvo1IBYwLjAuaYGtleti4IXpjrQCVaIudETSv5Z7oB8+C/+nsqsC26fXf9vWxvaKXJJzcep88r0wIfVe31HSd18FU=</SignatureValue> 
    </Signature> 
</Licence> 

bekomme ich dann in der Anwendung mit dem öffentlichen Schlüssel versenden und die Datei lesen, um sicherzustellen, dass sie haben Sie die richtige Version und "NumberOfServers" wie der Lizenzschlüssel ist.

Was sind die Nachteile dieses Ansatzes?

Dank

Antwort

1

Eine Sache, die ich vorschlagen würde, ist Ihre eigene Methode der Unterzeichnung der XML-Datei rollen. Ich verwendete ursprünglich die SignedXml-Klasse für die Lizenzierung, erkannte dann aber, dass es für jeden unglaublich einfach war, abzuleiten, was ich gerade tat, indem ich die XML-Datei selbst betrachtete (da die Algorithmen und dergleichen spezifiziert sind).

Also, stattdessen habe ich jedes Stück Daten (Kundennummer, Lizenzschlüssel und Version in meinem Fall) kombiniert, es gehashed und signierte das Ergebnis, anstatt die gesamte XML-Datei. Dann verschleierte ich es ein wenig mehr und fügte die Daten als einzelnes "Daten" -Element in der Lizenz hinzu.

Nur durch das Betrachten ist es unmöglich, irgendeine Art von Indikator zu sehen, welche Algorithmen oder Prozesse ich verwendet habe. Natürlich könnte jeder meine Baugruppe in Reflector öffnen und sehen, wie sie verifiziert wird. Da jedoch eine Kopie jeder Lizenz in der Datei gespeichert ist, kann ich, wenn ich den Verdacht hege, dass ein Kunde die Lizenz geändert hat, um ihnen mehr Möglichkeiten zu geben, deren Kopie mit mir überprüfen und ihnen jegliche weitere Unterstützung verweigern und/oder rechtliche Schritte einleiten.

+0

Hmm ... OK ... Aber das musst du irgendwie "verdächtigen"? Sie können wirklich zur Laufzeit herausfinden, für welche Version etc die Lizenz eigentlich ist? Alles was Sie wirklich tun können, ist zu überprüfen, dass der hased-Wert der selbe ist, den Sie bekommen, wenn Sie dieselben Eingaben zur Laufzeit haben? Wenn ich Sie richtig verstehe, denke ich nicht, dass das wirklich das ist, was ich tun möchte. – Riri

+1

Ich signiere immer noch die Daten mit einem Schlüsselpaar, aber anstatt die XML-Datei selbst zu signieren, unterzeichne ich den Hash der Daten auf meine eigene Art und Weise. Dann verschleiere ich es mit Base64 oder etwas und schreibe es auf ein einzelnes Tag. Die Rohdaten (Kundennummer, Version, usw.) sind immer noch in der XML-Datei, aber ich habe jetzt eine Signatur, die nicht einfach verifiziert werden kann, indem man sich die Struktur der XML-Datei anschaut (wie bei der SignedXml-Klasse)). –

+0

Aha ich sehe! Das ist eine gute Idee. – Riri

3

Was sind die Nachteile dieses Ansatzes sind?

Darin liegt das Problem des eigenen Rollens. Sie werden den Nachteil nicht kennen, bis es auf dem Feld versucht wurde. Für eine Gelegenheitsanwendung mit einer kleinen Benutzerbasis könnte diese gut funktionieren, aber wenn es genügend Motivation gibt (gelesen $$$$), um es zu brechen, dann kann es wahrscheinlich und wird gebrochen werden. Die Geschichte zeigt uns das. Ich würde persönlich mit einer bewährten Lösung versuchen. Ich habe LM-X from X-Formation in der Vergangenheit verwendet und es scheint ruhig vernünftig.

+0

Danke. Dies ist für eine kleine App. die nur von <100 Firmen verwendet werden. ABER ich möchte, dass es möglich ist, es herunterzuladen, ohne eine Lizenz zu haben und es auszuprobieren. – Riri

5

Ein Problem: Ein Angreifer kann ein Schlüsselpaar, eine Lizenz generieren, die Lizenz mit diesem privaten Schlüssel signieren und dann den öffentlichen Schlüssel in der Anwendung durch ihren eigenen ersetzen. Es mag weit hergeholt klingen, aber es ist die Art von Dieben.

Wenn Sie versuchen, etwas zu schützen, das an eine unehrliche Zielgruppe verkauft wird (z. B. Kinder, die den Wert der Integrität noch nicht kennen gelernt haben), sind Dongles robuster.

Wenn Sie an Personen oder Unternehmen verkaufen, die sich um ihren Ruf kümmern, ist dies ausreichend, um ihnen zu helfen, ehrlich zu bleiben und den Überblick über ihre Lizenzen zu behalten.

+0

Ja. Aber ich habe daran gedacht, und ich werde auch einen Schlüssel verwenden, um die tatsächliche Versammlung zu unterzeichnen, die es schwerer machen sollte, sie zu ändern. Vielen Dank. – Riri

3

Woran möchten Sie sich schützen? Gelegenheitskopierer oder die Genialeren? (Sie können sich nicht vor den Besten schützen, genauso wenig wie Sie die fähigsten Einbrecher aufhalten können.) Wie schlimm wäre es, wenn Leute Ihre Software illegal benutzen würden? Wer ist die Zielgruppe, Start-ups oder Fortune-500-Unternehmen? Wie sehr sind Sie bereit, Ihre legitimen Nutzer zu verärgern?

Ohne zu denken, dieses Schema zu brechen, würde ich darüber nachdenken, den öffentlichen Schlüssel zu finden und einen anderen mit einem Hex-Editor zu ersetzen, dann den XML-Code zu ändern und ihn neu zu signieren. Alternativ richten Sie eine Lizenzserver-Umgebung mit einem falschen Firmennamen ein (aber Sie erhalten es zur Überprüfung) oder vielleicht mehr als einen, um weitere Lizenzen zuzulassen.

Das ist, was mir sofort einfällt, und ich weiß sehr wenig darüber, Lizenzprobleme zu untergraben. Ich weiß nicht, ob Sie diese Probleme behandelt haben oder nicht.

Und wie Shane C. Mason darauf hinweist, kennen Sie die Schwachstellen nicht, es sei denn, Sie sind ein versierter Black Hat. Ich würde auch vorschlagen, dies wie Krypto zu behandeln, und empfehlen dringend, dass Sie ein allgemein verfügbares und weit verbreitetes Schema verwenden.

+0

Es wird von 500 wie Unternehmen verwendet werden. Es sind Preise um die 2000 Dollar, und wenn ich auch die Versammlung unterzeichne, die es schwerer machen sollte, den öffentlichen Schlüssel zu ändern, sollte ich in Ordnung sein für das, was ich tun möchte. Vielen Dank! – Riri