C# Hoe regel ik autorisatie voor gebruikers

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Erik888
  • Registratie: Augustus 2004
  • Laatst online: 31-10-2023
Ik heb een C#-programma geschreven die het indelen van taken bij wedstrijden regelt. Dit programma wil ik nu gaan verkopen aan andere clubs. Deze clubs zijn te identificeren aan de hand van een unieke 4-cijferige clubcode. De gebruikers kunnen per jaar of voor meerdere jaren het programma aanschaffen. Ik wil nu een controle toevoegen op basis van de clubcode tot welke datum het programma gebruikt mag worden.

Bijvoorbeeld de clubcode is 1145, de controle vindt plaats en retourneert een datum van 1-8-2010. Op het scherm kan ik dan tonen: "Dit rpogramma is te gebruiken tot 1-8-2010".

De vraag is dus hoe kan ik de clubcode omsleutelen en controleren zonder dat ik de clubcodes en datums hardcoded op moet nemen in mijn programma.

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 23:29

BM

Moderator Spielerij
Webservice opzetten aan jou kant, waar die controle op plaats vind, en dan programma via die service laten authoriseren?
Datum versleutelen in een 'licentiesleutel', en die gebruiken bij installatie?

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • AB-Systems
  • Registratie: September 2005
  • Laatst online: 11-10-2023
Dit lijkt me op basis van de clubcode niet mogelijk.. Anders zou je namelijk bij 2 dezelfde data's 2 dezelfde clubcodes moeten gebruiken..
wellicht dat je iets van een licentie code moet gaan invoeren. Hierin kan je dan bijv 3 blokken van 4 letters gaan opnemen. Die laat je vervolgens per blok omrekenen tot daar totaal de datum uit komt..

bijv:
AEED - RCDJ - SRFU
=
10 - okt - 2009
(willekeurige letters / geen codering achter..)

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:25

TeeDee

CQB 241

Zoals boven aangegeven: een licentie sleutel maken met daarin niet alleen de datum maar ook de clubcode. Vervolgens zou je met dit aan de slag kunnen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Bedoel je dat een clubcode direct gekoppeld is aan een verloopdatum? Dat lijkt me niet handig. Wat als de koper de licentie van zijn programma wil verlengen? Dan klopt zijn vorige clubcode niet meer.

Misschien kun je (naast de clubcode) beter een registratie code gebruiken waarin een einddatum is versleuteld.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
zwippie schreef op maandag 31 augustus 2009 @ 13:54:
Bedoel je dat een clubcode direct gekoppeld is aan een verloopdatum? Dat lijkt me niet handig. Wat als de koper de licentie van zijn programma wil verlengen? Dan klopt zijn vorige clubcode niet meer.
Hoezo niet? Aan de clubcode zit een datum, dan pas je (op de server) gewoon die einddatum aan? Clubcode blijft dan gewoon hetzelfde.

Maar een 4 cijferige code lijkt me te eenvoudig - dan zouden anderen zo een andere code in kunnen vullen om van een ander zijn licentie gebruik te kunnen maken. Daar kun je wel iets geavanceerders bij gebruiken - een eenvoudige MD5 hash (oid) van de naam van de club + een willekeurige code bijvoorbeeld.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:25

TeeDee

CQB 241

YopY schreef op maandag 31 augustus 2009 @ 13:56:
[...]
een eenvoudige MD5 hash (oid) van de naam van de club + een willekeurige code bijvoorbeeld.
Volgens mij is het bij een licentiesleutel juist de bedoeling dat het 2-way is.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Jeroen V
  • Registratie: Februari 2004
  • Laatst online: 16-09 21:23

Jeroen V

yadda yadda yadda

Ik zie eigenlijk het probleem niet, maar een database(-je) waarin je netjes kan bijhouden tot welke datum een bepaalde gebruiker de applicatie kan/mag gebruiken. Met EntityFramework heb je dat in 5 minuten bij elkaar geclicked. En als je op de webserver geen mogelijkheid hebt om een database te gebruiken, dan kan je zou dat zelfs in een config bestandje kunnen plaatsen.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 22:59

Reptile209

- gers -

TeeDee schreef op maandag 31 augustus 2009 @ 13:57:
[...]

Volgens mij is het bij een licentiesleutel juist de bedoeling dat het 2-way is.
Hangt er vanaf: bij een hoop registraties moet je je aanmelden met bepaalde gegevens (naam, bedrijf, etc.). Bij de installatie moet je die gegevens + de ontvangen registratiekey letterlijk opnieuw invullen. De software kan dan de hash berekenen en controleren met de key en beschikt meteen over de door de gebruiker ingevulde plain-text gegevens. Zo hoef je dus nooit een 2-way systeem te hebben.
Risico is wel dat men je software gaat disassemblen, maar dat zal altijd een risico zijn.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

YopY schreef op maandag 31 augustus 2009 @ 13:56:
[...]


Hoezo niet? Aan de clubcode zit een datum, dan pas je (op de server) gewoon die einddatum aan? Clubcode blijft dan gewoon hetzelfde.
Ik bedoelde dan ook dat de onveranderlijke clubcode niet tegelijk een hardcoded versleutelde datum moet zijn/bevatten. :)

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • Erik888
  • Registratie: Augustus 2004
  • Laatst online: 31-10-2023
Jeroen V schreef op maandag 31 augustus 2009 @ 14:12:
Ik zie eigenlijk het probleem niet, maar een database(-je) waarin je netjes kan bijhouden tot welke datum een bepaalde gebruiker de applicatie kan/mag gebruiken. Met EntityFramework heb je dat in 5 minuten bij elkaar geclicked. En als je op de webserver geen mogelijkheid hebt om een database te gebruiken, dan kan je zou dat zelfs in een config bestandje kunnen plaatsen.
Het programma is een simpele exe en (nog) geen webservice.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Je programma hoeft ook geen webservice te zijn. Alleen de licenseserver is een webservice, en je programma bevat een hele simpele webclient.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Kan je ook meteen extra verkoop regelen middels bijvoorbeeld een online backup voor de data.

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
Eventuele oplossing zonder database of webserver:

Maak een MD-5 hash van de verloopdatum. De verloopdatum moet de 1e van een maand zijn.
Bijv. club VV Lutjebroek wordt dan string code = verloopdatum.ToUniversalTime().ToShortDateString();
Maak van de string een MD5-hash. Dit wordt bijvoorbeeld e4d909c290d0fb1ca068ffaddf22cbd0.
Deze code moeten ze dus invoeren: e4d9 09c2 90d0 fb1c a068 ffad df22 cbd0

Als ze deze code invoeren, bepaalt een algoritme in het programma de bijbehorende verloopdatum.
Dit doe je dan door alle 1e dagen van elke maand tot 10 jaar in de toekomst te lopen. Van elke dag maak je een MD5-hash van de datum in de lus. Match ie dan heb je de verloopdatum gevonden.

Dus samengevat:
Zij mailen jou de gewenste verloopdatum. Deze datum dient de eerste van een maand te zijn. Jij berekent de MD5-hash van de verloopdatum (universal time), en stuurt deze code op.
Deze moeten ze invoeren in het programma onder een knop bijv. "Verloopdatum verlengen". Deze MD5-code sla je op in het programma. Bij het starten van het programma lust hij door alle 1en van de maand tot 10 jaar in de toekomst, en zoekt de MD5-hash van de datum in de lus (universal time). Matcht ie dan is dat de verloopdatum. Matcht die bij geen enkele datum, dan is het een verkeerde datum.

Je moet wel geheim houden dat de code een MD-5 gecodeerde datum is. Bedenk zelf anders een andere variant of voeg wat toe aan de te coderen string...

[ Voor 6% gewijzigd door Mastermind op 31-08-2009 16:31 ]


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Een update moeten sturen om een licentieprobleem op te lossen is nooit grappig.

Als je het algoritme geheim moet houden kan je net zo goed een codering bedenken die je twee kanten op kan berekenen.

Acties:
  • 0 Henk 'm!

  • jmzeeman
  • Registratie: April 2007
  • Laatst online: 12-09 16:17
De vraag is ook hoe goed je programma beveiligd moet zijn. Wil je dat het absoluut niet te hacken is: succes, gaat je niet lukken. Wil je gewoon dat de gemiddelde gebruiker doorheeft dat z'n licentie verlopen is dit niet even snel kan 'cracken' en jou dan belt voor een nieuwe licentie dan zijn er genoeg opties. Handigst is waarschijnlijk om gewoon een licentie code te gebruiken, ik denk persoonlijk dat een licentieserver (en alle bijbehorende kosten) een beetje overkill is. Gebruik bijvoorbeeld de library van TeeDee of bedenk zelf wat voor je licentie sleutel.

Wat ik wel is heb gebruikt voor een licentie is asymetrische encriptie waarbij de public key in de exe is meegecompiled. Door de vervaldatum te encrypten met de private-key en deze als licentiekey te gebruikenen en in je applicatie deze met de meegecompilede public-key te controleren kan je dan controleren of een licentie geldig is en tot wanneer. Als iemand dan wat wil zullen ze op z'n minst je exe aan moeten passen, als iemand dat er voor over heeft vindt ik het niet meer de moeite waard om me daar nog tegen in te dekken. Als iemand het echt wil hacken ze het toch wel. Natuurlijk kan je nog allerlei truukjes (obfuscation, controleren van je applicatie hash) uithalen om het de hacker wat moeilijker te maken maar helemaal veilig wordt het nooit.
Pagina: 1