Ako šifrovať ID objektov/údaje rubrika: Programování: PHP

3 pooler
položil/-a 2.8.2017
 
upravil/-a 4.8.2017

Zdravím,

ak riešite šifrovanie ID, identifikátor záznamu tak ako presne ?
https://github.com/ivanakimov/hashids.php alebo https://github.com/KevBurnsJr/pseudocrypt alebo niečo ine ?

V DB ukladať ID záznamu alebo len výsledný string(šifrované ID) ?

moje požiadavky by boli:

  • možnosť spätne zistiť o aké ID/aký údaj sa jednalo
  • výsledný string jedinečný min. na miliardu záznamov
  • výsledná string má iba znaky 2-9, A-Z bez (I, L, O)
  • dlžka stringu ideálne 6-10 znakov
  • na šifrovanie sa použije jedinečný vygenerovaný public string
  • na dešifrovanie sa použije jedinečný vygenerovaný private string

prípadne to isté - ako šifrovať ale kombináciu údajov (údaj 1 = 1-2 znaky, údaj 2 = 1-5 znakov, údaj 3 = 6-10 znakov) .. celková dlžka údajov je cca 8-17 znakov

EDIT:
Dôvod prečo to robiť takto je mať univerzálny identifikátor, ktorý bude obsahovať min. identifikátor databázy a id objektu.
Ďalší dôvod prečo to tak chcem je, aby bolo možné zašifrovať určité údaje, ktoré by som následne vedel offline odšifrovať a skontrolovať. Tento výsledný string má byť teda čo najkratší.

Príklad č. 1: id klienta = 1469, id objektu = 486783599 -> zašifrujem a výsledny string bude napr. 2e3r6t4w ... spätne to viem odšifrovať a zistiť pôvodne údaje.
Príklad č. 2: poradové číslo = 44, číslo vstupenky = 674935985, id predstavenia = 67936 -> zašifrujem a výsledny string bude napr. 9t8k3q4 .. spätne to viem offline odšifrovať a overiť keďže poznám dešifrovací kľúč

Možné riešenie pre príklad č.1:
a, hashids
b, výsledný string niečo ako $A$BO$C, kde $A = dvojpísmenkový identifikátor objektu/tabuľky, $B = base31(ID objektu), O = separátor, $C = base31(ID klienta)
base31 preto, lebo výsledná abeceda znakov bude obsahovať iba veľké písmena (bez ILO) a čísla (bez 0,1,2)

  • spoločná šifra pre všetkých klientov bude náhodné poradie 31 písmen (použitá abeceda znakov)

Komentáře

  • arron : Otázečka. Bude se to při ověřování dívat do db? A když, ne, podle čeho se ověří, že ta data jsou validní? 3.8.2017
  • Anonym : pokud to chceš mít bezpečné, tak se obávám, že výsledný string 6-10 znaků je strašně málo - tzn. buď bude to výsledné ID o hodně delší nebo se rozluč s offline rozkódováním ... nebo se rozluč s bezpečností :-) 3.8.2017
  • pooler : Mám tam v podstate 2 zadania(príklady) ... pri jednom skladám ID klienta a ID objektu - tam sa pozerám vždy do DB ... a v druhom skladám ID predstavenia, ID vstupenky, a poradové číslo brány - tam sa nepozerám do DB, musí to byť overené offline. V zadaní je že dlžka výsledného stringu má byť IDEALNE ... ak by bola nakoniec napr. 12-15 znakov, tak sa to ešte dá ... ale už napr. 20 znakov je veľmi veľa 4.8.2017
  • harrison314 : Co tak pouzit QR kod? 4.8.2017
  • Anonym : Máš v tom offline ověření možnost použít hashovací funkce, např. nějakou SHA-2 nebo obecně kryptografické funkce? Mě přijde asi nejlepší udělat to co navrhuje Taco s tím saltem a Ještě k tomu připojit co nejdelší přijatelný substtring z hashe. Tzn. rozšifruješ údaje + ověříš část hashe vytvořených ze vstupních dat a nějakého tajného klíče. Případně nějaké varianty zašifrovaných údajů a substringu hashe / podpisu priv. klíčem. 4.8.2017
  • pooler : Bijective funckiu viem použiť, avšak iba ak chcem "zmenšiť počet znakov veľkého čísla" ... viem to použiť len ako časť riešenia. Pri offline overovaní viem použiť rôzne šifry, overuje sa to cez mobilnú aplikáciu. 4.8.2017
  • archenroot : muzu se zeptat, proc tam nesmi byt ty znaky a cisla ve vysledne forme? Me to nedava smysl z pohledu sifrovani :-), ale asi tam nejaky je, kdyz to pozadujete 2.12.2017
  • pooler : znaky I, L, O .. a čísla 0,1 ... sú čiastočne podobné a občas sa stáva že pri hovorení daného celého reťazca nastane preklep (teda namiesto 0 by zákazník povedal O) ... je lepšie tieto znaky vynechávať 3.12.2017
odkaz
7 harrison314
odpověděl/-a 2.8.2017

Poloz si otazku, ci ma vobec zmysel hashovat/sifrovat ID (hovorim o umelom ID).

Aj pri sifrovanom vies spetne zistit väzby, lebo musi byt vsade sifrovany rovnako, tak aku pridanu hodnotu ma?
Ak nechces aby si mal predikovatelne ID-cka, pouzi GUID-y.

Komentáře

  • pooler : GUID je na to príliš dlhý a obsahuje aj znaky, ktoré nechcem aby tam boli. Dôvod prečo to robiť takto je mať univerzálny identifikátor, ktorý bude obsahovať min. identifikátor databázy a id objektu. Ďalší dôvod prečo to tak chcem je, aby bolo možné zašifrovať určité údaje, ktoré by som následne vedel offline odšifrovať a skontrolovať. Tento výsledný string má byť teda čo najkratší. 2.8.2017
  • harrison314 : Napis konkretny Use case, pretoze co ma ID cpolcne zo zafrovanymi datami? 2.8.2017
  • harrison314 : Mozes tie ID-cka generovat "rucne" napriklad z SHA-2* mozes zobrat lubovlnych X bitov a pouzit ich na transformaciu do vlastneho ID-cka len s povlenych znakov. 2.8.2017
  • pooler : Príklad č. 1: id klienta = 1469, id objektu = 486783599 -> zašifrujem a výsledny string bude napr. 2e3r6t4w ... spätne to viem odšifrovať a zistiť pôvodne údaje. Príklad č. 2: poradové číslo = 44, číslo vstupenky = 674935985, id predstavenia = 67936 -> zašifrujem a výsledny string bude napr. 9t8k3q4 .. spätne to viem offline odšifrovať a overiť keďže poznám dešifrovací kľúč 2.8.2017
  • harrison314 : Ak chces mat data nozaj chranene proti zmene tak by som nesaskoval a pouzil hmac-sha256, akekolvek tvoje vlastne riesenie bude ovela nachilnejsie na prelomenie ak sa ti dostanu ku kodu. 2.8.2017
  • pooler : chránené to bude, keďže na šifrovanie/odšifrovanie budem používať ďalšie stringy (public/private) 2.8.2017
  • harrison314 : Tak potm chces zneuzivat ID na nieco na co by pouzite byt nemalo. 2.8.2017
  • pooler : asi sa nejako nechápeme 2.8.2017
  • harrison314 : Podla toho co si doplnil (konecne use case), tak by uplne malo stacit to, ze cloveku das na vstupenku vsteky potrebne informacie, a kod vstupenky, co by bol nejaky hash ID predsatvenia, ID vstupenky, ID brany a shared secret (ktory si vemenis s poskytovetlom bezpecnym kanalom pri inicilizacii, respektyve vytvarni predsatvenia). To na overnie cloveka staci. 4.8.2017

Pro zobrazení všech 7 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.