Om du krypterar data måste du fråga dig själv vem som ska dekryptera den. Om du använder ett asymmetriskt krypteringssystem (t.ex. RSA) använder kryptering den offentliga nyckeln och dekryptering använder motsvarande privata nyckel; "asymmetri" kommer från det faktum att den privata nyckeln inte kan beräknas om från den publika nyckeln (även om båda nycklarna är matematiskt sammanlänkade).
Asymmetrisk kryptering tenderar att ha overhead. En första anmärkning är att sådan kryptering måste ha någon slumpmässig del i sig, eftersom alla kan kryptera (den publika nyckeln är, ja, offentlig):om krypteringsprocessen är deterministisk kan vem som helst kryptera alla möjliga SSN:er (det finns mindre än en miljarder av dem, vilket är ett väldigt litet antal för en modern dator) och matchar de krypterade värdena. Därför måste det läggas till något slumpmässigt under krypteringen, och det krypterade SSN:et är större än SSN:et i klartext.
Kända asymmetriska krypteringssystem använder matematiska strukturer som har sina egna kostnader. I grund och botten, för RSA-krypteringssystemet, med en "tillräckligt stark" nyckel, kommer ett krypterat meddelande att ha en längd på minst 128 byte. Vissa krypteringssystem fungerar bättre; samtidigt som jag höll mig till de vältrampade vägarna för akademisk forskning, kunde jag göra det på 41 byte eller så (med El-Gamal över NIST K-163 elliptiska kurvan). Mindre verkar svårare.
Så det är inte konstigt att ett givet databassystem inte skulle inkludera en sådan funktion som standard.
För ditt problem bör du först definiera (och skriva), så tydligt du kan:
- vilken data vill du skydda
- vem som matar in data
- vem som ska läsa tillbaka data
och bara då bör du fråga dig själv om kryptering är ett lämpligt verktyg för det. Kryptering är bra när den tänkta angriparen kan lägga vantarna på den råa, lagrade datan. Det betyder att angriparen har kringgått operativsystemets skydd. Vid den tidpunkten, vad operativsystemet än vet, vet angriparen också. Om databasen är värd på en maskin och det finns ett gränssnitt genom vilket det dekrypterade SSN:et kan erhållas, då "vet" den maskinen hur man skaffar data, och det gör angriparen också... Å andra sidan, om värden maskinoperativsystem anses vara tillräckligt motståndskraftigt, då verkar kryptering inte behövas alls.
Symmetrisk kryptering på databasen kan lösa ett svagare problem, där angriparen får en kopia av hårddisken efteråt . Värdsystemet känner till den symmetriska krypteringsnyckeln, men det känner till den endast i RAM. En angripare som stjäl hårddisken kommer inte att ha den nyckeln.