Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
ajutor

Whisky for Mac

Xiaomi 14 Gpay

Izolare zid exterior de scandura
 Dezinstalare drivere W11 23H3

Recomandare masina de spalat fiab...

BSOD din cauza Intel Audio DSP dr...

De ce sunt oamenii nostalgici
 Cum vand casa fara factura Hidroe...

Scor FICO minim

Tonometru compensat CAS?

polita RCA ONLINE
 Termostat frigider - verificare

Mai au PC-urile vreun viitor?

Centrala termica immergas

Amenda in Lipsa ?
 

Algoritm sistem licentiere

- - - - -
  • Please log in to reply
38 replies to this topic

#1
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016
Salut!
Doresc să fac un sistem de licențiere, însă nu m-am decis încă ce algoritm să folosesc.

Eu m-am gândit așa:
Cheia sa aibă 64 caractere a câte 32 separate în format MD5.
Ex: 6814629f652726d3a96037625c5df007ec9f6871e71229bad4c968647fae2a9e

Primele 32 caractere vor contine ID-ul utilizatorului, care va fi stocat intr-o baza de date MySQL si va fi verificat cu ajutorul unui script PHP, iar celelalte 32 vor contine data creearii si data expirarii.

Baza de date va avea un tabel numit 'keys' care va avea coloanele "id" , "create/expire date" , "hash" .
Cand voi verifica hash-ul cu scriptul PHP, acesta va cauta dupa acel hash si va arata ca output ID-ul atribuit si data creearii/data expirarii cheii.

In aplicatie eu voi decripta primele 32 de caractere si apoi voi verifica daca output-ul script-ului PHP corespunde cu valoarea decriptata, la fel voi face si cu celelalte 32 caractere pentru data expirarii.

Daca server-ul este blocat in fisierul hosts sau validarea nu este realizata cu succes din anumite motive, programul se va inchide.

Ce ziceti? Ar functiona? Alte idei mai bune?

Edited by red46, 17 April 2017 - 21:54.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,423
  • Înscris: 10.08.2005
ID + CREATE_DATE + EXPIRE_DATE = 32 + 16 + 16

Cum anume vrei sa decriptezi ID - ul ?

#3
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016

 MarianG, on 17 aprilie 2017 - 21:57, said:

ID + CREATE_DATE + EXPIRE_DATE = 32 + 16 + 16

Cum anume vrei sa decriptezi ID - ul ?
CREATE_DATE si EXPIRE_DATE sunt intr-un singur hash de 32 caractere.
Rezultatul decriptat ar arata asa: 01/02/2007-05/07/2016 .
ID-ul il aflu din primul sir de 32 caractere. Verific daca exista hash-ul in baza de date prin intermediul scriptului PHP, apoi acest script va returna ID-ul atribuit hash-ului.
Apoi in aplicatie voi decripta hash-ul si voi verifica daca rezultatul scriptului PHP (output = ID) este acelasi cu hash-ul decriptat.
Deci hash-ul reprezinta ID-ul criptat utilizand MD5.

#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,423
  • Înscris: 10.08.2005
userul trimite un hash, tu trimiti un id
vrei sa decriptezi md5 in aplicatie ?
Si vrei s-o faci de fiecare data cand pornesti aplicatia ?

Edited by MarianG, 17 April 2017 - 22:48.


#5
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
Nu prea ai ce sa decriptezi la md5 :), cred ca trebuie sa-ti revizuiești un pic ce vrei sa faci acolo

#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 red46, on 17 aprilie 2017 - 22:41, said:

Apoi in aplicatie voi decripta hash-ul
Am o idee mai bună: îți cumperi o carte despre criptografie, apoi te pui cu burta pe ea. Și stai așa pe ea, până când ți de imprimă titlul pe piele. Apoi te ridici, îți faci o baie fierbinte, și te apuci de programarea acestui sistem de licențiere.

E sfatul cu cele bune intenții pe care îl poți primi.

Alternativ, dacă nu ai 6-12 luni de stat "degeaba", plătești pe cineva care să ți-l facă, sau măcar să ți-l conceapă.

#7
f300

f300

    30k si ma duc

  • Grup: Senior Members
  • Posts: 30,000
  • Înscris: 27.09.2008
Daca vrei sa faci aplicatia sa mearga exclusiv dupa ce s-a conectat cu succes la serverul tau nu are rost sa reinventezi roata, ii dai userului ID si parola (ca si pe forum de exemplu, sint sigur ca sint tone de librarii pentru asta) si stochezi pe serverul tau id, hash parola, data de expirare + ce mai vrei (email pentru recuperarea parolei, etc). Daca nu e o aplicatie ce depinde esential de serverul tau e oricum o idee foarte proasta, prima zi cind ai serverul pe jos toti clientii o sa fie nemultumiti.

Oricum la cum pui problema eu zic sa te bucuri daca o sa foloseasca cineva programele tale chiar si gratis. Nu ca as descuraja pe cineva sa programeze, indiferent de nivel. Doar ca pina la licente platite si verificate online e mare distanta.

#8
DaculScoril0

DaculScoril0

    Senior Member

  • Grup: Senior Members
  • Posts: 6,670
  • Înscris: 03.12.2014

 red46, on 17 aprilie 2017 - 22:41, said:

CREATE_DATE si EXPIRE_DATE sunt intr-un singur hash de 32 caractere.
Rezultatul decriptat ar arata asa: 01/02/2007-05/07/2016 .
ID-ul il aflu din primul sir de 32 caractere. Verific daca exista hash-ul in baza de date prin intermediul scriptului PHP, apoi acest script va returna ID-ul atribuit hash-ului.
Apoi in aplicatie voi decripta hash-ul si voi verifica daca rezultatul scriptului PHP (output = ID) este acelasi cu hash-ul decriptat.
Deci hash-ul reprezinta ID-ul criptat utilizand MD5.
ideal ar fi să nu furnizezi și în clar și criptate (eu așa înțeleg că vrei să faci)
IDul ar trebui să fie știut de utilizator,  nu văd ce rost ar avea să-l criptezi. Folosește numai un hash format dată/oră/ce vrei tu pe care-l verifici în baza ta de date.

Dar mai bine mai citește, sunt o grămadă de algoritmi de genul ăsta explicați în tot soiul de lucrări și articole despre criptografie.

#9
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016

 OriginalCopy, on 18 aprilie 2017 - 08:10, said:

Am o idee mai bună: îți cumperi o carte despre criptografie, apoi te pui cu burta pe ea. Și stai așa pe ea, până când ți de imprimă titlul pe piele. Apoi te ridici, îți faci o baie fierbinte, și te apuci de programarea acestui sistem de licențiere.

E sfatul cu cele bune intenții pe care îl poți primi.

Alternativ, dacă nu ai 6-12 luni de stat "degeaba", plătești pe cineva care să ți-l facă, sau măcar să ți-l conceapă.
Da, recunosc, am gresit spunand ca MD5 e criptare.
Insa n-are rost sa citesc acum carti de criptografie, atat timp cat vreau sa fac doar un banal sistem de licentiere doar pentru teste. Nu-ti trebuie cine stie ce cunostite pentru a cripta/decripta un hash cu librarii gata facute.
Toate la timpul lor.

M-am gandit sa folosesc AES256 ca criptare.
Voi face un script PHP care la cerere va verifica daca acel hash exista, apoi va afisa restul infomatiilor (ID, Create/expire date).
In aplicatie voi decripta acel hash AES256 si voi verifica daca ID-ul corespunde cu cel afisat de catre script-ul PHP. Apoi voi citi restul informatiilor primite de la server (username, create/expire date etc..) din baza de date).

Daca as fi facut doar o simpla verificare, iar scriptul sa afiseze "VALID KEY" sau "INVALID KEY" atunci traficul ar fi putut fi redirectionat catre o adresa locala si raspunsul sa fie falsificat foarte usor.
Nimeni nu va sti cheia de decriptare sau ID-ul hash-ului.

Edited by red46, 18 April 2017 - 11:25.


#10
f300

f300

    30k si ma duc

  • Grup: Senior Members
  • Posts: 30,000
  • Înscris: 27.09.2008
Hash-ul nu se decripteaza ci se verifica.

Poti sa stochezi encriptat anume informatii, cu o anume cheie. Cred ca cel mai simplu incepi prin a spune ce si unde stochezi ca nu e clar deloc.

#11
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016
Bun.
Folosesc AES256 ca criptare pentru "cheia de licenta".
Primul pas: pe server fac o baza de date MySQL care va avea un tabel numit "keys", si 3 coloane numite "id", "license_key" si "create-expire_date" (intr-un singur string, date separate prin "-")
ID-ul va fi format din 8 cifre si este aleatoriu, LICENSE_KEY va contine ID-ul criptat folosind AES256, rezultatul fiind in Base64, iar create-expire_date va contine data creearii licentei si data expirarii, intr-un singur string, separate printr-o linie (cum am spus mai sus: 01/02/2007-05/07/2016 .

Al 2 lea pas: fac un script PHP care la cerere (ex: serveraddr.com/licenseman/check.php?key=REZULTATUL_CRIPTAT_AES256) va cauta cheia de licenta si va arata informatiile atribuite ei in baza de date (ID, data creeare/expirare).

Cheie de licenta = rezultatul criptarii AES256 in Base64 .
Ultimul pas: in aplicatie voi pune utilizatorul sa-si introduca cheia primita, apoi voi decripta cheia de licenta cu o cheie de criptare universala, setata de mine, apoi voi compara rezultatul decriptarii (ID-ul cheii) cu ID-ul afisat de catre scriptul PHP. Daca informatiile nu corespund (aka cheie de licenta falsa), aplicatia va afisa un mesaj de atentionare si se va inchide.

Prin urmare metoda redirectionarii traficului catre localhost in fisierul "hosts" cade atat timp cat in tot algoritmul asta exista si o cheie de decriptare.
Deci nu pot fi create chei de licenta false pentru ca nu stiu ce cheie de decriptare sa puna.

Edited by red46, 18 April 2017 - 12:12.


#12
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Cea mai buna idee din univers: nu face nici un sistem de licentiere. Cu toti am folosit programe "cracuite" de cind lumea si pamintul, la ce crezi ca ar ajuta sistemul tau?

Daca programul tau e destinat firmelor, o sa ti-l cumpere oricum, pentru ca mai nou se tem de controale. Daca e destinat hahalerelor de pretutindeni, oricum n-o sa ti-l cumpere nimeni, daca n-are chef sa-l cumpere, pentru ca are nus ce constiinta de inalta spetza. Daca e un program util cu siguranta o sa ti-l sparga cineva cit ai spune peste si n-o sa mai verifice serverul tau care poa sa contine cele mai tari criptari din galaxie :w00t:

Mai mult, ca sa faci licentiere online trebuie sa te asiguri ca serverul tau e tot timpul online, ceea ce e o gluma proasta daca ai un host obisnuit. O sa stea userii tai si o sa se uite ca prostii cum nu le porneste aplicatia pentru ca serverul tau e mort pe undeva pe la edomenii & co...

#13
andrei_0

andrei_0

    fishy

  • Grup: Moderators
  • Posts: 3,990
  • Înscris: 15.02.2006

 red46, on 18 aprilie 2017 - 11:51, said:

Bun.
Folosesc AES256 ca criptare pentru "cheia de licenta".
Primul pas: pe server fac o baza de date MySQL care va avea un tabel numit "keys", si 3 coloane numite "id", "license_key" si "create-expire_date" (intr-un singur string, date separate prin "-")
ID-ul va fi format din 8 cifre si este aleatoriu, LICENSE_KEY va contine ID-ul criptat folosind AES256, rezultatul fiind in Base64, iar create-expire_date va contine data creearii licentei si data expirarii, intr-un singur string, separate printr-o linie (cum am spus mai sus: 01/02/2007-05/07/2016 .

Al 2 lea pas: fac un script PHP care la cerere (ex: serveraddr.com/licenseman/check.php?key=REZULTATUL_CRIPTAT_AES256) va cauta cheia de licenta si va arata informatiile atribuite ei in baza de date (ID, data creeare/expirare).

Cheie de licenta = rezultatul criptarii AES256 in Base64 .
Ultimul pas: in aplicatie voi pune utilizatorul sa-si introduca cheia primita, apoi voi decripta cheia de licenta cu o cheie de criptare universala, setata de mine, apoi voi compara rezultatul decriptarii (ID-ul cheii) cu ID-ul afisat de catre scriptul PHP. Daca informatiile nu corespund (aka cheie de licenta falsa), aplicatia va afisa un mesaj de atentionare si se va inchide.

Prin urmare metoda redirectionarii traficului catre localhost in fisierul "hosts" cade atat timp cat in tot algoritmul asta exista si o cheie de decriptare.
Deci nu pot fi create chei de licenta false pentru ca nu stiu ce cheie de decriptare sa puna.
Te-ai adancit in detalii nesemnificative dar ai pierdut din vedere esentialul. Sistemul asta al tau va fi hecuit de orice tantilica in stare sa intre pe facebook.

#14
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016

 andrei_0, on 18 aprilie 2017 - 13:34, said:

Te-ai adancit in detalii nesemnificative dar ai pierdut din vedere esentialul. Sistemul asta al tau va fi hecuit de orice tantilica in stare sa intre pe facebook.
Detaliaza.

#15
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,423
  • Înscris: 10.08.2005

Quote

Al 2 lea pas: fac un script PHP care la cerere (ex: serveraddr.com/licenseman/check.php?key=REZULTATUL_CRIPTAT_AES256) va cauta cheia de licenta si va arata informatiile atribuite ei in baza de date (ID, data creeare/expirare).
Daca informatiile nu corespund (aka cheie de licenta falsa), aplicatia va afisa un mesaj de atentionare si se va inchide.
Si ce mesaj transmite serverul catre client OK / NOK ?

#16
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016

 MarianG, on 18 aprilie 2017 - 14:17, said:

Si ce mesaj transmite serverul catre client OK / NOK ?
Va transmite ID-ul cheii de licenta si data de expirare.
Cheia de licenta reprezinta ID-ul criptat.
Aplicatia va decripta cheia de licenta si va compara rezultatul trimis de server cu rezultatul decriptarii.

#17
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,232
  • Înscris: 24.02.2007

 red46, on 18 aprilie 2017 - 14:36, said:

Aplicatia va decripta ...

Orice pui in aplicatia client se poate sparge/trece peste in timpi de ordinul minutelor (pentru protectii nu extrem de complexe)

Edited by dani.user, 18 April 2017 - 17:02.


#18
red46

red46

    Senior Member

  • Grup: Senior Members
  • Posts: 4,549
  • Înscris: 06.03.2016

 dani.user, on 18 aprilie 2017 - 17:01, said:

Orice pui in aplicatia client se poate sparge/trece peste in timpi de ordinul minutelor (pentru protectii nu extrem de complexe)
Față de metodele de stocare a cheilor de licență în mediul local, validarea online complică într-un fel sau altul toată treaba asta.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate