Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Čuvanje i prikaz osetljivih informacija

[es] :: PHP :: Čuvanje i prikaz osetljivih informacija

Strane: 1 2

[ Pregleda: 5302 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Čuvanje i prikaz osetljivih informacija20.06.2010. u 15:16 - pre 168 meseci
Pozdrav,
iz nekog razloga, moj klijent, koji se bavi prodajom vode i ima na sajtu jednu order formu, pozeleo je da narudzbe smesta u bazu, a ne, kao dosad, da mu (samo) stizu na mejl.
Jedno od polja forme jeste i broj kreditne kartice, ukoliko korisnik izabere kreditnu karticu kao opciju za placanje.
Forma se nalazi u zasticenom direktorijumu (HTTPS protokol), nije integrisan nijedan online payment sistem (nisam ulazio u detalje kako lik zapravo naplacuje svoje usluge, ali, eto, treba mu broj kartice).

Sad sam ja, naravno, zabrinut za sigurnost podataka, nije problem napraviti bazu i skripticu koja ce izlistavati narudzbe (skripta ce biti zasticena .htaccesom i loginom), ali nisam siguran da je smestanje u bazu osetljivih podataka (i izlistavanje tih podataka), kao sto su brojevi kreditnih kartica, pozeljno sa stanovista sigurnosti...
Sta mogu da uradim, da li da ostavim ovo ovako, ili da predlozim neko bolje resenje?

Hvala!


UPOZORENJE: KOD I SAVETI KOJI SE MOGU PRONAĆI U TEMI MOGU DA IMAJU PROPUSTE. POSTAVKA SIGURNOG SISTEMA ZA ČUVANJE OSETLJIVIH INFORMACIJA KAO ŠTO SU BROJEVI KREDITNIH KARTICA ZAHTEVA ZAVIDNO ZNANJE I ISKUSTVO. SITNI PROPUSTI POPUT ŠEME POZIVANJA ŠIFRARA, NEDOVOLJNA SLUČAJNOST, LOŠE PODRAZUMEVANE VREDNOSTI U KODU ILI NEPOSOLJENI HEŠ MOGU DA OMOGUĆE CURENJE ZAŠTIĆENIH PODATAKA I NARUŠE SIGURNOST SISTEMA.




[Ovu poruku je menjao Goran Rakić dana 23.06.2010. u 13:46 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Cuvanje i prikaz osetljivih informacija20.06.2010. u 16:24 - pre 168 meseci
Možeš da uvedeš asimetričnu enkripciju. Neka onaj ko koristi te brojeve napravi par ključeva, ti enkriptuj ono što korisnik unese javnim ključem i tako upisuj u bazu, nemaš ni potrebe da poseduješ privatni ključ (ako ne koristiš te podatke).
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija21.06.2010. u 01:13 - pre 168 meseci
Evo jedan primer koda za simetrično šifrovanje 3DES algoritmom. Ako si OOP puritanac možeš da zamotaš sve u neku klasu koja će mcrypt da inicijalizuje u konstruktoru ne zagađujući globalni prostor imena. Ako koristite kod, obratite pažanju na uvodno upozorenje.
Code (php):
$mcrypt_td = NULL;

function encrypt_tripledes($data, $key) {
    global $mcrypt_td;
    if(!$mcrypt_td) $mcrypt_td = mcrypt_module_open('tripledes', '', 'ecb', '');

    mcrypt_generic_init($mcrypt_td, $key, 0);
    $data = base64_encode(mcrypt_generic($mcrypt_td, $data));
    mcrypt_generic_deinit($mcrypt_td);
    return $data;
}

function decrypt_tripledes($data, $key) {
    global $mcrypt_td;
    if(!$mcrypt_td) $mcrypt_td = mcrypt_module_open('tripledes', '', 'ecb', '');

    mcrypt_generic_init($mcrypt_td, $key, 0);
    // brišemo krajnje \0 dodate u poravnanju
    $data = rtrim(mdecrypt_generic($mcrypt_td, base64_decode($data)));
    mcrypt_generic_deinit($mcrypt_td);
    return $data;
}


Problem ostaje kako zaštititi ključ pošto se isti ključ koristi i za šifrovanje i za dešifrovanje. Džabe šifruješ podatke u bazi ako je dovoljno da napadač koji već nekako ima pristup tim podacima (recimo ukrao rezervnu kopiju od tvog pružaoca hosting) još:
1) uđe u veb aplikaciju i predstavi se kao tvoj klijent
2) uđe u veb server i pokupi ključ


Zato se koriste asimetrični algoritmi, kao što je RSA, koji radi sa parom ključeva. Javni ključ je na serveru i njime se šifruju podaci, ali tajni ključ kojim se oni dešifruju je kod klijenta. Sada napadč mora da uzme bazu sa servera i tajni ključ od klijenta, što je teže za izvesti. Dodatno, programeri koji održavaju aplikaciju i tehničari koji održavaju server sada nemaju pristup ključu, pa ne mogu oni da zloupotrebe podatke.

Generisanje para ključeva može da se uradi na klijentu (tako je po standardima, privatni ključ nikada ne treba da odlazi na server). Ako se odlučimo da je „dovoljno sigurno“ da par generišemo na serveru (pri tome nećemo da čuvamo privatni ključ na serveru) onda je OpenSSL kod:
Code (php):
<?php
$csr = array(
          "digest_alg" => "sha1",
          "public_key_bits" => 1024,
          "private_key_bits" => 1024,
          "encrypt_key" => true
);
$res=openssl_pkey_new($csr);
openssl_pkey_export($res, &$privatekey);
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
 
file_put_contents('keys_new/id_rsa.enc', $privatekey);
passthru($publickey);
?>


Za generisanje na klijentu, jedna varijanta je generisanje ključeva iz JavaScripta. Druga varijanta je upotreba nekog posebnog programa ili Java aplet/ActiveX u IE, prednost je što onda oni mogu da koriste ključeve u pametnoj kartici ili ključeve koji postoje na sistemu, ne mora da generiše novi par ključeva.

HTML5 definiše <keygen> tag tako da klijent može da napravi par ključeva o direktno kroz preglednik i pošalje javni ključ serveru. Postoji uputstvo kako generisati ključ i vratiti sertifikat koji se kasnije koristi za autentifikaciju. Ne znam da li postoji neki JavaScript omotač za šifrovanje privatnim ključem smeštenim u pregledniku i kako on može da se aktivira, to bi bio nedostajući odgovor na ovo pitanje. Drugo, ne znam ni da li preglednici dopuštaju da se umesto generisanja novog odabere postojeći ključ?

RSA šifrovanje možemo da radimo sa openssl_public_encrypt() i javnim ključem iz para, dešifrovanje sa openssl_private_decrypt() i privatnim ključem iz para. Funkcija openssl_public_encrypt() ne vraća tekst, ako se smešta u bazu treba pisati u BLOB ili koristiti base64_encode().

U jednom prolazu RSA algoritam može da šifruje samo podatke kraće od dužine ključa (u ovom primeru 1024 bitova). Zato se za šifrovanje koristi slučajno generisani ključ, na primer $newkey = uniqid('tajnideo', true); ili openssl_pkey_export(openssl_pkey_new()), $newkey); i onda kao ključ koristiš sha1($newkey, true);. Ovim ključem se podaci šifruju recimo TripleDES-om, a ključ koji je kraći od 1024 bitova (sha1 vraća heš od 160 bita) šifruje RSA algoritmom.


Ako je privatni ključ kod klijenta, ostaje problem i kako dešifrovati podatke. Sigurna varijanta je poslati šifrovani ključ i šifrovane podatke u preglednik i onda JavaScriptom odraditi dešifrovanje, ali to može da bude sporo i malo je nezgodno za korišćenje jer JavaScript podrazumevano nema pristup lokalnim datotekama, pa ni datoteci u kojoj je ključ, a kopiraj-ubaci može da nervira klijenta. Postoje nestandardni načini kako da se omogući pristup lokalnoj datoteci, pa ako se odlučiš za ovaj put to bi moglo da bude pravo rešenje. Bolja varijanta je da se koriste servisi operativnog sistema kroz pomenuto Java/ActiveX rešenje ili nekako da se kaže pregledniku da dešifruje podatke koristeći ključ u lokalnom skladištu, u čemu ja nemam iskustva i voleo bih da čujem više.


Ono što sam ja koristio jeste da dodatno privatni ključ napravim na serveru opisanim putem i prethodno provrtim kroz TripleDES sa nekom slučajnom lozinkom (passphrase). Onda pri dešifrovanju podataka dozvolim klijentu da pošalje šifrovani privatni ključ na server zajedno sa passphraseom, dešifrujem privatni ključ i uklonim poslatu datoteku sa servera, dešifrujem slučajan ključ za svaki podatak i dešifrujem podatke.

Takav sistem je ranjiv jer privatni ključ može lako da iscuri ako server nije siguran, ali isto tako napadač koji ima pristup serveru može da presretne i sirove podatke koji stižu iz HTML formulara i potpuno preskoči bilo kakvu dalju zaštitu.


@jablan: Jesi li radio nešto slično? Imaš li savet, predlog, komentar?

Ne znam kako je tvoj klijent do sada pristupao e-pošti i da li je sanduče na istom serveru kao i PHP skripta, ali u opštem slučaju e-pošta je sigurna kao i dopisivanje razglednicama. Koristiti to za prikuplaljanje brojeva kreditne kartice je neodgovorno.



[Ovu poruku je menjao Goran Rakić dana 26.06.2010. u 13:03 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

galahad
Slobodan Todorov
Radio-televizija Vojvodine,
Jack-Of-All-IT-Trades, Web redakcija
Novi Sad

Član broj: 20613
Poruke: 146
*.dynamic.isp.telekom.rs.

Jabber: galahad@elitesecurity.org
ICQ: 52020296
Sajt: www.todorowww.net


+4 Profil

icon Re: Čuvanje i prikaz osetljivih informacija22.06.2010. u 18:23 - pre 168 meseci
Mislim da oslanjanje na HTML5 koji je još uvek draft varijanta, i nije nešto, pitanje je kolika je podrška u browserima za <keygen> tag... Oko Java appleta/ActiveX da ne pričam...

Koliko sam ja upoznat, a to nije bog zna koliko, video sam samo par primera koji tako već rade, koristi se AES_CRYPT i AES_DECRYPT koji je ugrađen u sam MySQL...

Mislim, lepe su to teorije da se generiše neki kriptovani string koji se šalje preko mreže, ali ne znam koliko je to ostvarljivo... Najprostije je, a tako koliko vidim svi ozbiljni rade, koristiti HTTPS za prenos osetljivih podataka... Jeste da to nije baš jako imuno na man-in-the-middle napad, ali ne postoji 100% siguran način, posebno ako je neko uporan...

Dakle, bez preterane filozofije i komplikovanja, mislim da je dovoljno koristiti ugrađene MySQL funkcije AES_CRYPT i AES_DECRYPT, ili DES ekvivalente, DES_CRYPT i DES_DECRYPT... Prilikom registracije, svakom korisniku se definiše neki secret key, koji se kasnije koristi za kriptovanje njegovih podataka... Eventualno se doda neki salt, da se malo još začini cela stvar... Ja bih to tako radio...
- SKRati link - JaZaKraljevo.rs -

"I have never let my schooling interfere with my education." - Mark Twain
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija22.06.2010. u 18:39 - pre 168 meseci
AES_ENCRYPT() i AES_DECRYPT() su zamene za encrypt_tripledes() i decrypt_tripledes() date u prethodnom PHP kodu.

Mogući problem je što podaci onda između MySQL-a i PHP-a putuju nezaštićeni ako se ne koristi SSL konekcija. Ako su međutim oba na istom serveru ili se koristi SSH tunel ne bi trebalo da bude problema. PHP kroz MySQLi omogućava korišćenje SSL konekcije.

U svakom slučaju kod simetričnog šifrovanja problem je gde čuvati ključ. Komplikovano je imati poseban ključ za svaki red podataka, dakle obično postoji jedan ključ koji otključava sve podatke. To je veliki sigurnosni rizik. Asimetrično šifrovanje uspešno rešava ovaj problem kombinacijom sa simetričnim šifrovanjem sa slučajnim ključem kako je već opisano. Ako se koristi openssl_seal() onda može da postoji više privatnih ključeva (svaki administrator ima svoj, zgodno za audit pristupa poverljivim podacima) koji dešifruju podatke (prvo dešifruju simetrični ključ, pa onda podatke).

Problem sa čijim rešavanjem nemam praktičnog iskustva je kako efikasno odraditi generisanje ključeva i dešifrovanje podataka na strani klijenta pošto sve drugo predstavlja sigurnosni rizik.

Naravno komplikovana zaštita ništa ne vredi ako se ne preduzmu i druge mere. Džaba sve ovo ako napadač upadne na server i izmeni skriptu forme za poručivanje tako da pošalje broj kartice njemu e-poštom pre nego što je šifruje i smesti u bazu. Zato može da se koristi elektronsko potpisivanje PHP skripti uz neku automatsku proveru spolja koja bi detektovala i alarmirala ako dođe do neovlašćene promene PHP koda. Nemam praktičnog iskustva ni sa tim, voleo bih da čujem nešto više na tu temu.



Da dodam, za 128bitni AES u PHP-u treba koristiti 'rijndael-128' šifrar (engl. chiper) u mcrypt_module_open(). Koliko mi je poznato MySQL koristi ecb šemu, trebalo bi testirati.

[Ovu poruku je menjao Goran Rakić dana 26.06.2010. u 12:24 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija22.06.2010. u 19:09 - pre 168 meseci
Uh, hvala na svim prilozima.

Koliko vidim, bilo bi dobro imati dedicated server, htpps aktiviran (to u mom slucaju vec postoji, direktorijum sa formom je pod ovim protokolom), i izbeci desifrovanje na serveru (odnosno, odraditi to u cistom javaskriptu, ako je moguce; palo mi je na pamet i skuplje resenje - desktop aplikacija za desifrovanje; ne znam da li bi to moglo da se sklepa?)

Elem, ono moje ''resenje'' (Goranu sam poslao jedno stap i kanap resenje, ahahah) zadovoljava ovaj poslednji kriterijum, desifrovanje se radi na strani klijenta (cak se kreira random ''kljuc'' za svaku narudzbu), ahahah.
Jedino je samo sifrovanje malo potanko, a ako je privatni mejl (na koji bi se slao ''kljuc'', posebno generisan za svaku narudzbu) zaista siguran koliko i razglednica, i to ima izvesnih propusta.

@galahad, olaksavajuca okolnost je da nema registracije, nema korisnika, samo se narudzbe smestaju u bazu...

Upozoricu klijenta na sve moguce posledice, pa ako on ostane pri tome da zeli da uzima brojeve kreditnih kartica, a da ne zeli payment integraciju (spasonosno resenje, bar za mene), nek on preuzme i odgovornost.

 
Odgovor na temu

galahad
Slobodan Todorov
Radio-televizija Vojvodine,
Jack-Of-All-IT-Trades, Web redakcija
Novi Sad

Član broj: 20613
Poruke: 146
*.dynamic.isp.telekom.rs.

Jabber: galahad@elitesecurity.org
ICQ: 52020296
Sajt: www.todorowww.net


+4 Profil

icon Re: Čuvanje i prikaz osetljivih informacija22.06.2010. u 19:10 - pre 168 meseci
Pa da, džaba svo moguće obezbeđenje, ako server nije siguran...

I ja kažem, nisam morao nikad da radim ništa slično, obično se sav e-commerc obavljao preko nekog od payment procesora, tako da nisam morao da se bavim čuvanjem i kriptovanjem podataka...

U 90% slučajeva MySQL i PHP su na istom serveru, tako da prenošenje između PHP i MySQL ne bi trebalo da bude slaba karika... Sam prenos od klijenta do servera, i čuvanje podataka predstavlja "problem"... Mada, i dalje mislim da bi poseban ključ za svakog korisnika bio adekvatna zaštita, bez neke extra komplikacije, dešifrovanje bi bilo vršeno kada se korisnik uloguje, i kad vrši plaćanje...

E sad, ja ne znam koliko u praksi ti payment procesori kriptuju podatke sa klijentske strane, mislim da ne rade to, već se podaci prenose preko SSL konekcije, pa kriptuju na njihovim mašinama... Opet, ne mogu da znam da je to tako, ili nije, samo mi izgleda da je tako, obično ni jedan ne traži instalaciju nikakvih apleta, activex-a ili nekih drugih džidža-bidža...

Bilo bi jako lepo kad bi se našao neko ko je radio nešto ovako, pa da podeli sa nama kako to stvarno radi, ovako mi samo špekulišemo i teoretišemo...
- SKRati link - JaZaKraljevo.rs -

"I have never let my schooling interfere with my education." - Mark Twain
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija22.06.2010. u 19:19 - pre 168 meseci
Ne, ovde nije problem kako zaštititi broj kartice koji ulazi u bazu. To ide preko SSL.

Problem je kako zaštititi podatke koji se čuvaju u bazi. Na taj način smanjujemo rizik da haker u nekom trenutku pokupi masu validnih kartica koje su upisane u protekle dve godine ili da novi tehničar koji pravi rezervnu kopiju iznenadno ne dobije ideju da ode na neko egzotično ostrvo i ponese database dump sa sobom.

Treba međutim omogućiti pristup sačuvanim podacima kroz neki admin panel ovlašćenim osobama nakon autentifikacije.



Naravno treba imati u vidu i taj scenario i ne preterivati ;)

I dva linka sa foruma:
http://www.elitesecurity.org/t387244-Dvosmjerna-enkripcija (misli se na simetričnu)
http://www.elitesecurity.org/t...kripcija-stringova-web-service


[Ovu poruku je menjao Goran Rakić dana 22.06.2010. u 20:29 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija23.06.2010. u 00:33 - pre 168 meseci
Citat:
ili da novi tehničar koji pravi rezervnu kopiju iznenadno ne dobije ideju da ode na neko egzotično ostrvo i ponese database dump sa sobom


He, he, bas sam chatovao sa jednim nasim likom iz USA o ovom problemu - i prva njegova recenica je bila:
"Pa jesi ti normalan, to je, pre svega, ilegalno".


go daddy hostuje sajt, znam da se ljudi zale na njih, ali suvise su veliki da bi sebi dozvolili ovakve stvari (bar se nadam). Brine me mastoviti haker, vise od nekog tamo admina, tim pre sto je shared hosting.

Uh, sad videh ono upozorenje gore. Hvala, sad sam jos blizi konacnoj odluci u vezi sa ovim.

Edit: novi detalji - nema sanse za payment integraciju (Bermudi), bar lik tako tvrdi...

Sta da mu kazem na ovo:
"How about last 4 (digits) of card go on email - the rest to database? I like this one if doable."?



[Ovu poruku je menjao kelja dana 23.06.2010. u 01:47 GMT+1]
 
Odgovor na temu

galahad
Slobodan Todorov
Radio-televizija Vojvodine,
Jack-Of-All-IT-Trades, Web redakcija
Novi Sad

Član broj: 20613
Poruke: 146
*.dynamic.isp.telekom.rs.

Jabber: galahad@elitesecurity.org
ICQ: 52020296
Sajt: www.todorowww.net


+4 Profil

icon Re: Čuvanje i prikaz osetljivih informacija23.06.2010. u 19:25 - pre 168 meseci
Šta je ilegalno? Čuvanje broja kreditne kartice na serveru? Moguće, moguće Samo, ko se još obazire na legalne i ilegalne stvari :P

Elem, na ovo njegovo poslednje... Mislim... Nemam komentara... Lik je očigledno neki krivinaš, pa bi da uštedi što više, na pogrešnim mestima... Mislim, genijalan je on Nasmejao sam se baš na to poslednje, kao šatro, sejemo podatke pa ih je teže pokupiti A sve na istom serveru

Ne znam kolike pare pravi lik od prodaje vode, ili šta već reče da prodaje, ali možemo samo da se nadamo da neće privući pažnju maštovitih krimosa, koji će da mu drpe bazu sa brojevima, i zloupotrebe...

Sve u svemu, zlo i naopako...
- SKRati link - JaZaKraljevo.rs -

"I have never let my schooling interfere with my education." - Mark Twain
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija23.06.2010. u 19:56 - pre 168 meseci
Pa da, pokusao sam da objasnim...
Rekao sam mu da je najbolja opcija najskuplja, i da nisam sposoban za to...

On se zainteresovao za neko moje ''srednje'' resenje (slanje dela sifrovanog broja u bazu, a dela na privatni mejl (takodje sifrovanog), zajedno sa random kreiranim ''kljucem''; enkripcija na bebecem nivou, moj doprinos kriptografiji, ahahahah)... Ne znam, ako je mejl tako lako dostupan, ne bih se suvise uzdao u to...

Sve u svemu, ovo meni deluje kao najbolje resenje:
http://www.ubercart.org/forum/...dit_card_asymmetric_encryption

ali je daleko iznad mog znanja. Ako neko zna kako bi se ovo moglo izvesti, neka mi kaze okvirnu cifru na pp, pa da pokusam jos jednom da mu objasnim da je ono sto bi platio sad, daleko manje od onog sto bi mogao da placa u buducnosti...

 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija23.06.2010. u 20:03 - pre 168 meseci
Da, to sa linka bi bilo ovo o čemu smo pričali ali i dalje je lako napraviti grešku (ecb/cbc, početni vektor,...). I dalje treba zaštiti podatke pre šifrovanja, potpisati ili u jeftinijoj varijanti odraditi hash HTML formulara i PHP koda koji prima HTTPS POST i verifikovati ga automatski povremeno. Paziti na neki mogući XSS napad na stranici sa formularom kako tako podaci ne bi procureli.

Rešenje sa desktop aplikacijom je malo nezgodno za korišćenje, bolje onda da desktop aplikacija i prikazuje sadržaj baze. Lepše je JavaScriptom odraditi, a ključ čuvaš kao datoteku koju admin može da ponese sa sobom na USB flešu. Sigurnije i brže je koristiti ActiveX, XPCOM, NPAPI umesto JavaScripta, ključ onda može da bude i zaštićen na kartici, tokenu,... ali ja to ne znam kako bi se izvelo. Pretpostavljam da tu većina koristi neka gotova komercijalna rešenja.

Vodi računa da u nekim državama možeš kao programer da budeš materijalno odgovoran za eventualnu štetu. Obavezno traži da potpišete sva moguća odricanja od svake odgovornosti.


[Ovu poruku je menjao Goran Rakić dana 23.06.2010. u 21:14 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija24.06.2010. u 15:27 - pre 168 meseci
Eh, mislim da sam nasao resenje. Nasao sam jednu zgodnu RSA klasu na phpclasses.org...

Malo je njakanje za klijenta: instalacija wampa, generisanje javnog i privatnog kljuca, slanje meni javnog kljuca, i kasnije rad u skriptici za dekodiranje brojeva kartica, koji bi bio malo naporan copy-paste posao, ali je daleko najbolje/najsigurnije resenje, koje bih ja mogao da izvedem.

Pa verovatno ce biti tako... ali, hajde, cisto na teoretskom nivou, da vidimo sta bi moglo da napravi problem...

Da se preslisam, jope:
1) saljem mu skripte za generisanje kljuceva i dekodiranje koje stavi na svoj WAMP. U skripti za generisanje kljuceva imamo formu sa dva polja, za dva ekstremno velika prosta broja po klijentovom izboru. Skript radi ovako:
Code (php):
include('rsa.class.php');
$RSA = new RSA();
$keys = $RSA->generate_keys ('$prostbroj1', '$prostbroj2', 1);


2) Dakle, on dobija parove kljuceva, samo javni par salje meni, i ja ih stavljam u skriptu za procesiranje forme:
Code (php):
$encoded = $RSA->encrypt ($broj_kartice, $keys[1], $keys[0], 5);


3) Dakle, na serveru su dostupni samo enkodirani brojevi kartica i sam skript; u najgorem slucaju, neko ko se docepa baze i/ili skripta (skine php fajl), docepace se brojeva i javnog para kljuceva. U loginom zasticenom direktorijumu, dostupni su, opet, samo sifrovani brojevi, pored ostalih, manje bitnih podataka.

Klijent ih kopira, i onda:
4) na svom racunaru, na localhostu, ubacuje enkodirani broj kartice i privatni par kljuceva u formu i skript dekodira brojeve:
Code (php):
$decoded = $RSA->decrypt ($encoded, $keys[2]-tajni kljuc, koji ima samo klijent, $keys[0]);


Eto, tako sam nekako zamislio... Da li je moguce doci do privatnog kljuca pomocu javnog para, ili vec nekim drugim uber-metodama, ne znam... I da, onda ostaje kao najslabija tacka sam prenos broja od forme do baze (ako https nije tu dovoljan)...

Hvala mnogo svima, ako od ovoga ne bude nista, bar sam naucio nesto novo, o sigurnosti i zastiti podataka.



[Ovu poruku je menjao Goran Rakić dana 26.06.2010. u 12:45 GMT+1]
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1571 Profil

icon Re: Čuvanje i prikaz osetljivih informacija24.06.2010. u 15:48 - pre 168 meseci
Ne znam koliko je pametno da se bakćeš sa svim tim, ako nešto pođe naopako, postaješ saučesnik u ozbiljnom kriminalu.

Svako ko insistira da dobije broj kreditne kartice klijenta online je izuzetno sumnjiv, ma kakvo opravdanje da ima za to.

Čak i da mu to napravis samo će budale da mu daju broj kartice.

 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija26.06.2010. u 12:37 - pre 168 meseci
Ne postoje dva para ključeva u terminologiji. Tajni ključ je (n,d) što ide kao argument decrypt() poziva, javni ključ je (n,e) koji ide u encrypt(). Ove delove ključa (n i e u prvom primeru) možemo da zapišemo i kao jedan argument koji će biti rastavljen na dva dela pri upotrebi, što je zgodnije za prenošenje. Tajni i javni ključ čine jedan par ključeva.

Sigurnost algoritma leži u tome da ta dva prosta broja čiji je proizvod n budu veliki i slučajni kako napadač ne bi mogao da rastavi n i isproba sve kombinacije. To ne smeju biti neki od par stotina brojeva objavljenih na Vikipediji, ne neki od prvih par prostih brojeva ili uzastopni prosti brojevi. Ovo je veoma osetljiv korak gde je mudro koristiti proverena rešenja, a čak i tu se dogodi propust.

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija26.06.2010. u 12:49 - pre 168 meseci
Da, hvala na ispravci glede terminologije.
A, naravno, jasno mi je da su (verovatno) veliki prosti brojevi sa neta uredno pokupljeni od strane onih koji se time bave.

Mislio sam da koristim random generisane proste brojeve od 512 cifara, i, naravno, ne bi bili uzastopni.
Ali, eto, sad, posle svega, izgleda da cu se muciti sa onim open_ssl funkcijama.

A ni to nije sigurno, ahahahaha, kako kazu na ovom Goranovom linku. Opcija ''delete'' u admin panelu cim klijent dobije mejl o unosu mi sad deluje kao najbolja zastita.


[Ovu poruku je menjao kelja dana 26.06.2010. u 14:01 GMT+1]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija26.06.2010. u 13:34 - pre 168 meseci
OpenSSL na Debian GNU/Linux distribuciji je imao propust da generiše „loše“ ključeve između septembra 2006. i maja 2008. kada je greška otkrivena i ispravljena. To što ti predlažeš je nerazumno, pretpostavljam da se samo šališ.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija26.06.2010. u 13:54 - pre 168 meseci
Ma, naravno da se zezam...
Nego, klijent ima Meka. Taj mora da generise samo validne random brojeve. ;)
Sad sam se malo igrao, pa sam stavio da velicina prostih brojeva (p i q) bude 2048 bita... ~7-8 minuta, mozda manje, trebalo je za generisanje kljuceva...
(inace, skript zapravo kreira random string, pa se zatim odradi nekoliko bazicnih operacija, sa opet izvesnom randomizacijom, uz pomoc bcmath funkcija, i tek tada, se, iz tako izvedenog broja dobija random prost broj)
Enkodiranje za nekoliko sekundi, dekodiranje jos traje... :)
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Čuvanje i prikaz osetljivih informacija26.06.2010. u 14:02 - pre 168 meseci
OpenSSL (kod dat u trećoj poruci) generiše ključeve za ispod 1s.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Čuvanje i prikaz osetljivih informacija26.06.2010. u 14:19 - pre 168 meseci
Verujem da je tako, kad radi.
 
Odgovor na temu

[es] :: PHP :: Čuvanje i prikaz osetljivih informacija

Strane: 1 2

[ Pregleda: 5302 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.