Heips,
tuli oikeastaan eräänlainen logiikkakysymys eteen tietokantoja käsiteltäessä.
Minulla on tietokannassa yksi sarake, joka sisältää pätkän PHP:lla kryptattua tekstiä. Mikä olisi paras tapa etsiä, löytyykö aiemmin tallennettua identtistä arvoa?
Joku tehokkuutta ja käytännöllisyyttä tasapainotteleva ratkaisu olisi hienoa saada aikaiseksi.
Jos käytät kaikkiin samaa avainta, voit tietenkin kryptata haettavan tekstin ja verrata kryptattuja arvoja. Jos käytät eri avaimia, kovin käytännöllistä tapaa hakuun pelkästään noilla tiedoilla ei yleisessä tapauksessa ole. Tässä onkin yksi hyvä syy, miksi se tietokannan kryptaus omilla viritelmillä on hieman hölmöä. Jos tietoturva on oikeasti kynnyskysymys etkä voi luottaa datan olevan turvassa vieraalla palvelimella, pitäisi hankkia oma (virtuaali)palvelin ja kryptata koko tietokantaosio läpinäkyvästi.
Niin no haettavan tekstin kryptaaminen ja vertailu on vähän turhaa, koska samasta avaimesta huolimatta kryptatut tekstit ovat joka kerralla erilaisia.
Mietin, että yksi vaihtoehto kai olisi luoda kryptaamattomasta datasta hash-arvo toiseen sarakkeeseen ja vertailla sitten niitä syötettyyn dataan, mutta tiedä sitten, kärsiikö "näennäinen" turvallisuus tuosta. :)
Entä jos looppaisi rivejä läpi yksi kerrallaan ja decryptaisi? Miten tällaisen lausekkeen saisi tehokkaasti muotoiltua?
Niin, no jos olisit kertonut käyttämäsi kryptausmenetelmän, olisin voinut sanoa esimerkiksi "samaa avainta ja IV:tä".
Kaikkien rivien tutkiminen on joka tapauksessa niin hidasta, että "lausekkeen tehokkaasti muotoilu" ei siinä paljon auta. Optimointi olisi vain kikkailua sen suhteen, montako riviä kannattaa hakea kerralla ja miten haun saa tapahtumaan taustalla samalla, kun ensimmäisiä rivejä jo tarkistetaan.
Tiiviste tuskin haittaa tietoturvaa, eli jos voit sellaisen lisätä, se oikeastaan ratkaisee ongelman. Törmäysten varalta joudut silti hakemaan kaikki rivit, joilla on sama tiiviste, ja tarkistamaan sitten silmukalla dekryptatut tekstit. Käytännössä toki törmäys on aika epätodennäköinen.
Voit käyttää tiivisteen sijaan myös tekstin pituutta, jos se tuntuu tarpeeksi vaihtelevalta. Jos kryptausmenetelmä tuottaa aina N-merkkisestä syötteestä M-merkkisen tuloksen, et tarvitse edes muutoksia tauluun, vaan voit hakea sopivat ehdokkaat kryptatun datan pituuden perusteella. Jos tekstit ovat tyypillisesti suunnilleen yhtä pitkiä, tämän menetelmän hyöty jää heikommaksi, vakiopituisilla teksteillä nollaksi.
Heh, no ei tosiaan tullut mieleen tarkentaa kryptausmenetelmää.
Mutta tuo hash-varmistus kai on sitten se paras tapa lähteä ratkomaan asiaa. Tuo pituusvertailu ei valitettavasti onnistu tässä tapauksessa.
No harjoitusprojekti kuitenkin kyseessä, joten ehkä opitun pohjalta tulee kikkailtua entistä parempi systeemi tulevaisuudessa. :>
Aihe on jo aika vanha, joten et voi enää vastata siihen.