20. april 2004 - 21:40Der er
18 kommentarer og 1 løsning
Krypterer/dekrypter et password field
Jeg har et behov for at læse passwords i vores 3. parts systemdatabasen. Men da det er personfølsomme oplysninger der ligger i databasen, er det åbenbart krypteret. Er der i oracle en funktion eller procedure til at klare et sådan problem for mig, eller har vores leverandør selv lavet en form for kryptering?
Jeg er ganske ny i forbindelse med oracle, så bær venligst over med mig, hvis der kommer nogle mærkelige spg.
Denne sætning viser password og kundenummer Select navn, password from kreg where id=xxxxxxxxxx;
Bemærk af hensyn til vores datasikkerhed, så er denne sætning næsten rigtig. Fields og tabeller mv. er ændret.
Du kan læse den artikel jeg har skrevet om password kryptering (Password Systemer til husbehov) - den er skrevet med MsSQL kodeeksempler - men principperne gælder også Oracle (eller enhver anden database).
Grundlæggende - der er to former for kryptering - reversibel (som kan dekrypteres) og irreversibel (som ikke kan). De fleste login systemer benytter irreversibel kryptering og laver pwd kontrol ved at kryptere brugerens password og sammenligne med det krypterede.
Så hvis jeres leverandør har valgt en irreversibel algoritme, så kan han ikke hjælpe - og hvis han har valgt en simpel reversibel, så vil han sikkert ikke da det så bygger på security through obscurity og derfor ikke er særlig smart at oplyse om...
Det efterlader mulighed for bruteforce angreb - men det tager altså ret lang tid...
Start med at prøve at kontakte jeres leverandør og hør hvad han siger.
trer -> Ja, Jeg tænkte godt på at kontakte leverandør. Men det er et eksternt system, som jeg er ved at lave, og det er ikke sikkert det falder i god jord. Derfor vil jeg lige forsøge selv, inden jeg skal på knæ:) Du omtaler en artikel, vil du sætte et link.
jpvj -> hmm, jeg skal lige have oprettet en VPN tunnel til databasen. Jeg vender lige tilbage.
Jeg var ved at rode lidt rundt, og faldt over OCI(eller sådan noget(API)). Der var beskrevet noget med, at man kan kalde en metode(OpenWallet) som havde noget med passwords at gøre. Endvidere var der nogle metoder til crypt/encrypt. Jeg tænkte, om det kan være det er noget i den stil der er blevet brugt
Open Wallet bruges normalt i webapplicationer med SSL . Ved ikke om det er brugt i det system her??
hvis det er Oracles dba_users tabel du kigger på, er den irreversibel. Iøvrigt bliver krypteringen lavet ud fra dit username. Feks: har du 2 brugere x og y med samme password, vil de ikke have samme værdi i password kolonnen i dba_users.
Mht. din application er det jo nemt at se om der er en database trigger på din tabel. Hvis der er en trigger på som kryptere passwordet, kan du jo se hvad den gør. Hvis den kalder en function, må du ind og se om der bruges en eller anden bestemt nøgle.
Men det kan jo også være at det ligger oppe i din application, og så er du nok lidt på bar bund - da du så ikke har adgang til koden.
I Oracle har man f.eks. den pakke der hedder DBMS_OBFUSCATION_TOOLKIT. Her kan du lave reversibel passwords. Se dokumentationen på otn.oracle.com for mere info.
Her er passwordet: jpvj -> 1234 er blevet AZ5UX/WUk0r0o
Jeg håber det siger dig noget. Jeg skal måske for en god ordens skyld nævne, at det ikke kun er dette password jeg ønsker dekrypteret. Jeg skal bruge alt dette for at kunne validerer en kunde mod databasen.
pnielsen -> Vil du uddybe lidt mere omkring det med trigger. Jeg er stødt på det, men kunne ikke umiddelbart se, om det var noget jeg skulle bruge meget krudt på. Kan jeg få en oversigt over triggers i databasen?
En trigger en noget du kan sætte på din tabel -som udfører en handling når du f.eks. indsætter noget i din tabel. Så den kunne f.eks. kalde en function som kryptere din streng.
login i sqlplus som den bruger der ejer tabellen og se hvad din triggere gør ved at køre denne sql: select trigger_body from user_triggers where table_name='KREG'; Det forudsætter at du logger ind som den bruger og at din tabel virkeligt hedder KREG. Ellers login som en dba bruger på databasen og kør denne: select trigger_body from dba_triggers where table_name='KREG' and TABLE_OWNER='EJER'; Udskift ejer og tabel navn med det rigtige.
Og et lille tip; hvis du gentagne gange krypterer 1234 - får du så samme krypterede kode? Hvis du gør, så er det ret nemt at bryde da du så kan tage fx SLUUGs ordbogsfil, kryptere den og joine på de krypterede felter.
pnielsen-> Det lader ikke til, at der er nogen user_triggers tabel. Er der forskel på brugere. Mit problem er, at jeg er rimelig ny her på stedet, og at der ikke er dokumenteret særligt meget omkring opsætningen på Unixmaskinen(herunder oracle). Ja, faktisk ingen dokumentation overhoved. Så jeg kender kun en bruger. Kan man se brugernavnet på de forskellige brugere, da jeg formegentlig så kan finde frem til passwordet?
datamaker> du mangler vist rettigheder - Check ALL_USERS og se om du har adgang til DBA_USERS. Du kan også forsøge adgang til ALL_TRIGGERS eller ALL_OBJECTS (damn... det er længe siden jeg rigtig har rodet i Oracle, håber at jeg bruger de rigtige tabel-navne :-)
Ved at bruge all_users tabellen fandt jeg de forskellige brugere. Hmm, dette bliver ikke nemt. Jeg skal lige have fundet ud af, hvilket password de mon har fået i tidernes morgen:)
Er der nogen, som har et godt sted at begynde, hvis man skal i gang med at bruge oracle(sql+)?
thja - man kan finde en del på det der hedder metalinks - http://www.metalink.oracle.com - og på dine installations-cd'er bør der være en fuld dokumentation over pl/sql. Man kan også få nogle plakater i A2 størrelse over metadata tabeller i Oracle - men jeg aner ikke hvor man får dem fra...
du vil kun kunne se rækker i user-triggers såfremt triggerne er ejet af den bruger du er logget ind som. Prøv dba_triggers eller all_triggers i stedet (eller all_objects med object_type lig trigger).
nå, jeg kommer det vist ikke nærmere med den database jeg har. Vil I smide et svar, så I alle kan få nogle point.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.