Ik heb recentelijk een stuk analytische software ontwikkeld voor een hele specifieke doelgroep. Ik ben de eerste die dit op deze manier voor deze doelgroep ontwikkeld heeft en het programma heeft een hoge praktische waarde wat maakt dat ik er leuk geld aan kan verdienen. De eerste afnemers heb ik reeds en binnen afzienbare tijd ga ik over tot de eerste levering.
Het mooie is dat iedere gebruiker zijn eigen instellingen heeft: het programma draait daar volledig op. Zolang de gebruiker daar zelf geen wijziging in aan kan brengen (functionaliteit die de gebruiker niet nodig heeft), is kopieren totaal nutteloos: het zal voor een andere partij totaal geen waarde hebben.
De doelgroep bestaat uit enkele tientallen gebruikers, dat totaal géén IT-ers zijn. Ik wil het echter wel dusdanig goed beveiligen dat een slim neefje of een slimme buurjongen de klantspecifieke instellingen niet kan ontsleutelen en aan kan passen voor anderen, waardoor ik dus licentiegelden misloop. Binnen de doelgroep kent men elkaar en het programma heeft een hoog "dit móet ik hebben" gehalte, dus dit is best een reële 'angst'. Ik weet echter bar weinig van beveiliging of encryptie, vandaar dat ik hier post.
Het is een single workstation programma, modulair opgebouwd (men heeft ook de mogelijkheid bepaalde modules al dan niet aan te schaffen) en de gebruikersdata voor analyse wordt opgeslagen (om verscheidene redenen, maar kosten, toegankelijkheid en portabiliteit de drie belangrijkste) in een Access 2007 database (van een paar MB groot). De beveiliging daarvan is geen issue, aangezien men daar zelf verantwoordelijk voor is: als men een Excel-bestand met gevoelige informatie laat rondslingeren (totaal vergelijkbaar) dan is dat ook niet mijn probleem.
Maar hoe kan ik het beste de klant-specifieke instellingen opslaan en piraterij zo goed mogelijk tegengaan? Ik kan vanuit mijn gelimiteerde kennis 3 mogelijkheden bedenken:
1) De allermakkelijkste en snelste manier is een tweede Access DB gebruiken voor de klant-specifieke instellingen, die DB met een wachtwoord beveiligen en dat wachtwoord hardcoded in het programma zetten.
2) Werken met een versleuteld licentie- en instellingenbestand, dat iedere keer bij het opstarten van het programma ingelezen wordt. Ik zie dat .NET built-in ondersteuning heeft voor een varieteit aan algoritmes, waarbij met termen gegooid wordt als DES, DSA, MD5, RSA en SHA-1.
3) Een internetverbinding is essentieel voor het vergaren van de gegevens waarmee het programma de analyse gaat uitvoeren, dus ik zou iedere keer het programma verbinding kunnen laten maken met mijn server en de klant-specifieke instellingen laten downloaden op basis van een licentiecode, die gewoon open en bloot zichtbaar is (immers met de licentiecode worden de gegevens van mijn server gedownload, die ik alleen in kan stellen).
Bij 1 ben ik afhankelijk van de beveiligingskwaliteit van MS Access 2007. Afgezien van het feit dat dat me niet wenselijk lijkt: hoe goed is de beveiliging daarvan? Puur gevoelsmatig vind ik 3 ook niet correct: stel dat mijn server een keer niet werkt dan kan men het programma niet gebruiken, terwijl mijn server verder niet relevant is voor de werking van het programma. Men mag en moet kunnen verwachten dat het altijd en foutloos werkt.
Wat zouden jullie doen? Optie 2 met één van de versleutelingsalgoritmes? Welke zouden jullie dan kiezen? Of totaal iets anders?
Ook andere suggesties of opmerkingen zijn altijd welkom. Hartelijk dank!
Het mooie is dat iedere gebruiker zijn eigen instellingen heeft: het programma draait daar volledig op. Zolang de gebruiker daar zelf geen wijziging in aan kan brengen (functionaliteit die de gebruiker niet nodig heeft), is kopieren totaal nutteloos: het zal voor een andere partij totaal geen waarde hebben.
De doelgroep bestaat uit enkele tientallen gebruikers, dat totaal géén IT-ers zijn. Ik wil het echter wel dusdanig goed beveiligen dat een slim neefje of een slimme buurjongen de klantspecifieke instellingen niet kan ontsleutelen en aan kan passen voor anderen, waardoor ik dus licentiegelden misloop. Binnen de doelgroep kent men elkaar en het programma heeft een hoog "dit móet ik hebben" gehalte, dus dit is best een reële 'angst'. Ik weet echter bar weinig van beveiliging of encryptie, vandaar dat ik hier post.
Het is een single workstation programma, modulair opgebouwd (men heeft ook de mogelijkheid bepaalde modules al dan niet aan te schaffen) en de gebruikersdata voor analyse wordt opgeslagen (om verscheidene redenen, maar kosten, toegankelijkheid en portabiliteit de drie belangrijkste) in een Access 2007 database (van een paar MB groot). De beveiliging daarvan is geen issue, aangezien men daar zelf verantwoordelijk voor is: als men een Excel-bestand met gevoelige informatie laat rondslingeren (totaal vergelijkbaar) dan is dat ook niet mijn probleem.
Maar hoe kan ik het beste de klant-specifieke instellingen opslaan en piraterij zo goed mogelijk tegengaan? Ik kan vanuit mijn gelimiteerde kennis 3 mogelijkheden bedenken:
1) De allermakkelijkste en snelste manier is een tweede Access DB gebruiken voor de klant-specifieke instellingen, die DB met een wachtwoord beveiligen en dat wachtwoord hardcoded in het programma zetten.
2) Werken met een versleuteld licentie- en instellingenbestand, dat iedere keer bij het opstarten van het programma ingelezen wordt. Ik zie dat .NET built-in ondersteuning heeft voor een varieteit aan algoritmes, waarbij met termen gegooid wordt als DES, DSA, MD5, RSA en SHA-1.
3) Een internetverbinding is essentieel voor het vergaren van de gegevens waarmee het programma de analyse gaat uitvoeren, dus ik zou iedere keer het programma verbinding kunnen laten maken met mijn server en de klant-specifieke instellingen laten downloaden op basis van een licentiecode, die gewoon open en bloot zichtbaar is (immers met de licentiecode worden de gegevens van mijn server gedownload, die ik alleen in kan stellen).
Bij 1 ben ik afhankelijk van de beveiligingskwaliteit van MS Access 2007. Afgezien van het feit dat dat me niet wenselijk lijkt: hoe goed is de beveiliging daarvan? Puur gevoelsmatig vind ik 3 ook niet correct: stel dat mijn server een keer niet werkt dan kan men het programma niet gebruiken, terwijl mijn server verder niet relevant is voor de werking van het programma. Men mag en moet kunnen verwachten dat het altijd en foutloos werkt.
Wat zouden jullie doen? Optie 2 met één van de versleutelingsalgoritmes? Welke zouden jullie dan kiezen? Of totaal iets anders?
Ook andere suggesties of opmerkingen zijn altijd welkom. Hartelijk dank!
Geef mij maar een Warsteiner.