Hvis du krypterer data, skal du spørge dig selv, hvem der skal dekryptere dem. Hvis du bruger et asymmetrisk krypteringssystem (f.eks. RSA), så bruger kryptering den offentlige nøgle, og dekryptering bruger den tilsvarende private nøgle; "asymmetri" kommer fra det faktum, at den private nøgle ikke kan genberegnes fra den offentlige nøgle (selvom begge nøgler er matematisk forbundet med hinanden).
Asymmetrisk kryptering har en tendens til at have overhead. En første bemærkning er, at sådan kryptering skal have en tilfældig del i sig, fordi alle kan kryptere (den offentlige nøgle er, ja, offentlig):hvis krypteringsprocessen er deterministisk, så kan enhver kryptere alle mulige SSN'er (der er mindre end en milliarder af dem, hvilket er et meget lille tal for en moderne computer) og matcher de krypterede værdier. Derfor skal der tilføjes noget tilfældigt under krypteringen, og det krypterede SSN er større end SSN i almindelig tekst.
Kendte asymmetriske krypteringssystemer bruger matematiske strukturer, som har deres egne omkostninger. Grundlæggende, for RSA-krypteringssystemet, med en "stærk nok" nøgle, vil en krypteret meddelelse have en længde på mindst 128 bytes. Nogle krypteringssystemer klarer sig bedre; mens jeg holdt mig til akademisk forskning, kunne jeg gøre det på 41 bytes eller deromkring (med El-Gamal over NIST K-163 elliptiske kurve). Mindre virker sværere.
Så det er ikke underligt, at et givet databasesystem ikke ville inkludere en sådan funktion som standard.
For dit problem bør du først definere (og skrive), så klart som du kan:
- hvad er de data, du vil beskytte
- hvem indtaster dataene
- hvem skal læse data tilbage
og kun derefter bør du spørge dig selv, om kryptering er et passende værktøj til det. Kryptering er godt, når den forestillede angriber kan få fingrene i de rå, lagrede data. Det betyder, at angriberen har omgået operativsystembeskyttelsen. På det tidspunkt, hvad end operativsystemet ved, ved angriberen også. Hvis databasen er hostet på en maskine, og der er en grænseflade, hvorigennem det dekrypterede SSN kan fås, så "ved" den maskine, hvordan man henter dataene, og det samme gør angriberen... På den anden side, hvis værten maskinens operativsystem anses for at være modstandsdygtigt nok, så ser kryptering slet ikke ud til at være nødvendig.
Symmetrisk kryptering på databasen kan løse et svagere problem, hvor angriberen får en kopi af harddisken bagefter . Værtssystemet kender den symmetriske krypteringsnøgle, men det kender den kun i RAM. En angriber, der stjæler harddisken, vil ikke have den nøgle.