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?
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!
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?
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.
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.
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.
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