webForumDet fria alternativet

Kryptering i databas, men ändå sökbar?

Webbutveckling

8 svar · 2 614 visningar · startad av Kristianstad

Medlem sedan dec. 2002841 inlägg
Frågan#1

Har ett dilemma som jag inte riktigt vet hur jag ska lösa.

Ska bygga en sajt (PHP med mySQL) som lagrar känsliga meddelanden. Min tanke är att kryptera i PHP och sedan lägga in texterna i databasen.

Samtidigt vill jag att det ska vara möjligt att söka bland meddelandena. Och det blir ju svårt med SELECT * FROM tabell WHERE meddelande LIKE '%hej%' när "hej" inte står i klartext i databasen.

Hur skulle ni göra? För mig är det viktigt med en så stark kryptering som möjligt! Det finns ju mysql-funktionen AES_DECRYPT(), men är osäker på om krypteringen är så stark?

Medlem sedan juni 2009920 inlägg
#2

Först: Om du kan dekryptera strängen så är det inte en stark kryptering. Varför skulle det vara svårare för någon som lägga vantarna på databasen att dekryptera då, än för dig själv? Ta till exempel metodiken för att lagra lösenord (som de flesta kör med), där är det omöjligt för till och med innehavaren av databasen att ta reda på vad användarna har för lösenord, enda sättet att kontrollera om lösenordet stämmer är att kryptera en textsträng enligt samma algoritm och jämföra den med det lagrade krypterade lösenordet.

Kort version: Går strängen att dekryptera så är det inte en säker kryptering!

Men detta kan du kika på: http://stackoverflow.com/questions/7905313/how-to-store-query-able-encrypted-data-in-mysql

Medlem sedan dec. 2002841 inlägg
#3

Precis som jag anade. Hur gör större sajter som lagrar känslig information i databasen? Finns det verkligen ingen bra krypteringsmetod som kan kombinera god säkerhet och möjlighet att söka i databasen? Är det ett val mellan å ena sidan:
* Möjlighet att söka i databasen + Osäker kryptering
* Inte möjlighet att söka i databasen + Säker kryptering?

Medlem sedan feb. 20005 891 inlägg
#4

Kan du inte tänka om, t.ex. att envägskryptera ägaren av ett meddelande? Så det åtminstone inte går att enkelt koppla ihop texten till en användaren.

Medlem sedan dec. 2002841 inlägg
#5

Jo, det är ju en idé. Problemet är att även själva meddelandena är väldigt känsliga.

Medlem sedan juni 20004 308 inlägg
#6

Men alltså... vem har tillgång till databasen? Har obehöriga personer tillgång till att köra SQL-kommandon mot databasen har du ju verkliga problem. Om inte så är det ju ett icke-problem.

Medlem sedan juli 2003555 inlägg
#7

Nja, om vi utgår ifrån att data måste skyddas så är det inte ett fullgott skydd att ingen utomstående har rätt att exekvera sql emot databasen - ett säkerhetshål kan mycket väl finnas, och om så är fallet, och någon lyckas få tag på databasen så är skyddet borta. Data kan alltså behöva krypteras i en databas, t.ex. lösenord - ifall en databas skulle komma på villovägar så är det väldigt dumt om man kan få ut lösenorden i klartext.

Medlem sedan juni 2009920 inlägg
#8

Ja visst är det så, men problemet är att han ska kryptera informationen för att senare dekryptera. Då måste han kryptera det med någon nyckel som bara användaren själv kan generera upp, och inte går att knäcka bakvägen.

Medlem sedan juli 2003555 inlägg
#9

Mja, delvis, fast det är en annan fråga; det jag vände mig emot var att det skulle vara onödigt att kryptera någonting alls om ingen obehörig hade rätt att exekvera sql emot databasen.

Själva krypteringsnyckeln skulle man t.ex. kunna generera utifrån användarens lösenord, och man skulle, om man vill, även kunna indexera en användares meddelanden i ett eget, privat, krypterat index; om man har loggat in så vet man lösenordet, och med det lösenordet kan man få fram kryptonyckeln, som då kan användas för att dekryptera indexet, som då sedan kan sökas i. Bara en variant i mängden på tänkbara lösningar.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)