Permalänk
Medlem

Lagra känslig data i en fil?

Jag håller på med ett gymnasieprojekt där jag ska skapa ett C# program som ska kommunicera med ett par MySQL databaser. Tanken var att användaren själv ska få skriva in anslutnings detaljerna. Men hur lagrar jag då den datan i en fil på ett säkert sätt utan att någon obehörig kan få tillgång till den? En textfil duger inte då vem som helst kan läsa den.

Jag behöver en lösning där endast programmet kommer åt de filerna eller att de skyddas utav någon form utav lösenord?

Så jag undrar vad ni tycker och tror. Hur lagrar man känslig data på bästa sätt?

Permalänk
Medlem
Skrivet av Bosnic:

Hur lagrar man känslig data på bästa sätt?

I huvudet.

Enkel lösning vore ju att skapa en liten "container" i truecrypt och lägga textfilen där i, eller använda ett "nyckel program" som keepass där du kan lagra all data direkt.

Permalänk
Hedersmedlem

Du skulle kunna lagra dem i en databastabell som bara ditt program har tillgång till. Kräv autentisering med t ex lösenord för att ditt program ska plocka fram motsvarande rad i uppgiftstabellen. Precis som t ex Sweclockers vet vad din emailadress är, utan att andra kan se den.

Om du inte har någon sorts autentisering samtidigt som du ska lagra uppgifterna så ser du ju att det uppenbart blir problem. Om datorn inte vet om det är Nisse eller Kalle som frågar efter databasuppgifter, hur ska datorn veta om den ska visa Nisses eller Kalles databasuppgifter?

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Kryptera filen. Det är det enda sättet som funkar om du vill kunna vara riktigt säker på att ingen obehörig kan läsa filen.

Ett första steg är ju att bara ge en enskild användare rättigheter, då kan visserligen användare med högre rättigheter läsa den, men om din admin-användare inte är 'trustworthy' har du andra problem.

Kanske dessa kan hjälpa dig:
http://support.microsoft.com/kb/307010
http://stackoverflow.com/questions/740812/whats-the-easiest-w...

Edit: kom också ihåg att det nog inte räcker att lagra nyckeln i klartext i programmet, utan du måste knappa in den varje gång du startar upp den. En del OS lagrar även sakerna i $TMP och $RAM i klartext.

Permalänk
Medlem

Tack för alla förslag, har nog en del att testa sen när jag kommer hem.

Permalänk
Medlem

kryptera infon och sen avkryptera i programmet så kommer aldrig infon vara i ren text på din dator.
om dom nu får tillgång till filen så kan dom inte läsa den utan att ha nycklen.

Permalänk
Avstängd

Det enklaste sättet är att ha en hemlig nyckel i ditt program som du använder till att kryptera informationen. Sedan kan denna information lagras direkt i en fil utan krytering.

Permalänk
Medlem
Skrivet av lolight:

Det enklaste sättet är att ha en hemlig nyckel i ditt program som du använder till att kryptera informationen. Sedan kan denna information lagras direkt i en fil utan krytering.

Och hur säkrar du upp den "hemliga" nyckeln då?

Permalänk
Medlem
Skrivet av iXam:

Och hur säkrar du upp den "hemliga" nyckeln då?

Med en superhemlig nyckel!

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd
Skrivet av iXam:

Och hur säkrar du upp den "hemliga" nyckeln då?

Och hur ska du kunna kolla den har du tänkt?

Permalänk
Medlem
Skrivet av lolight:

Och hur ska du kunna kolla den har du tänkt?

Med en debugger exempelvis.
Det du föreslår är som att skriva en nyckeltext på ett papper och sen lägga det i ett kuvert med texten "hemlig nyckel" och sen gömma den i en valfri skrivbordslåda för att sen skrika ut att vad du har gjort men inte vart du har gömt den.

Permalänk
Medlem

Hemliga saker är inte speciellt hemliga i c#. Det är bara att dra ner Reflector så får du hela källkoden i klartext, mer eller mindre. Om programmet körs lokalt vette faen hur man ska göra det på ett bra sätt. Hade det var SQL Server du anslöt mot hade man kunnat köra med integrated security och logga på med windows-kontot, men jag tror inte det funkar för MySql?

Visa signatur

"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue

Permalänk
Avstängd
Skrivet av iXam:

Med en debugger exempelvis.
Det du föreslår är som att skriva en nyckeltext på ett papper och sen lägga det i ett kuvert med texten "hemlig nyckel" och sen gömma den i en valfri skrivbordslåda för att sen skrika ut att vad du har gjort men inte vart du har gömt den.

Och din lösning är? För ett enkelt projekt funkar det utmärkt. Om du inte vet att du har en massa snokande personer som sitter och glor på källkod/ debugger. Så är det en enkel lösning. Skriver man inte uppenbart i koden "Nyckel" eller "Lösenord" så kan det vara svårt att hitta var nyckeln finns i koden.

Permalänk
Medlem
Skrivet av lolight:

Och din lösning är? För ett enkelt projekt funkar det utmärkt. Om du inte vet att du har en massa snokande personer som sitter och glor på källkod/ debugger. Så är det en enkel lösning. Skriver man inte uppenbart i koden "Nyckel" eller "Lösenord" så kan det vara svårt att hitta var nyckeln finns i koden.

Min lösning är att man får skriva in lösenord för att komma åt datan. Och nej det är inte svårt att hitta koden. Med en debugger kan du söka reda på minnesreferenser på så sätt hitta det *lätt*, förutsatt att du vet vad du gör.
Tänk på att majoriteten av alla spel crackas på några dagar och de har betydligt mer avancerade sätt att försöka gömma och scrambla saker än vad som någonsin kommer snackas om här.

OP frågar hur man gör detta och då utgår jag ifrån att han/hon vill ett BRA sätt för ett dåligt sätt är ju i princip lika dåligt som cleartext. När folk sen ger dåliga lösningar så är det väl inte konstigt att mer kunniga personer (och här klankar jag INTE ner på dig!) säger ifrån.

Permalänk
Medlem

Om jag var du så skulle jag försöka göra någon slags HWID generator där tex md5 hashen räknas in.
Med ett HWID menar jag ett nummer som genereras speciellt till en dator, och sen sparar du den i en helt vanlig fil nånstans.
sen så kollar programmet HWID:n i filen (som skapas av dig / skapas första gången man kör programmet)

och sen kollar programmet även HWIDn i datorn och kör en jämförselse mellan dom två HWID.

För att komma på ett unikt HWID så kan du ta tex

Koden längst ner på "Kontrollpanelen\System och säkerhet\System"

det är en nyckel som har att göra med nyckeln du använde till att installera windows med, sen kan du ta varannan bokstav från den och mixa med varannan bokstav från mac adressen eller nått i den stilen

Permalänk
Avstängd
Skrivet av iXam:

Min lösning är att man får skriva in lösenord för att komma åt datan. Och nej det är inte svårt att hitta koden. Med en debugger kan du söka reda på minnesreferenser på så sätt hitta det *lätt*, förutsatt att du vet vad du gör.
Tänk på att majoriteten av alla spel crackas på några dagar och de har betydligt mer avancerade sätt att försöka gömma och scrambla saker än vad som någonsin kommer snackas om här.

OP frågar hur man gör detta och då utgår jag ifrån att han/hon vill ett BRA sätt för ett dåligt sätt är ju i princip lika dåligt som cleartext. När folk sen ger dåliga lösningar så är det väl inte konstigt att mer kunniga personer (och här klankar jag INTE ner på dig!) säger ifrån.

TS frågar efter ett sätt att lagra pw till en databas åt användare. Till ett gymnasieprojekt. Din lösning är att _inte lagra lösenorden alls. Dvs en ickelösning på ts problem.

Rätt sätt är att sätta rättigheter på servern på filnivå. Men det är inte alltid man kan göra det. Ett annat sätt är att ordna det i programmet. Det finns tekniker för det.
Men ett enkelt sätt som kanske duger, eller duger bättre än klartext. Är att lägga någon form av salt eller pw i källkoden som du använder för att kryptera lösenorden och sedan skriver dem till textfiler. Att en person som vill hacka detta kan göra det enkelt förstår vi. Men detta är ett gymnasieprojekt. Och vi vet inte vilken nivå ts bör använda här.

Permalänk
Medlem

Använd en key container.

"Asymmetric private keys should never be stored verbatim or in plain text on the local computer. If you need to store a private key, you should use a key container. For more information on key containers, see Understanding Machine-level and User-level RSA Key Containers."
http://msdn.microsoft.com/en-us/library/tswxhw92.aspx

Permalänk
Medlem

Faen det där såg smidigt ut. Den hade jag ingen koll på.

Visa signatur

"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue

Permalänk
Medlem
Skrivet av lolight:

TS frågar efter ett sätt att lagra pw till en databas åt användare. Till ett gymnasieprojekt. Din lösning är att _inte lagra lösenorden alls. Dvs en ickelösning på ts problem.

Rätt sätt är att sätta rättigheter på servern på filnivå. Men det är inte alltid man kan göra det. Ett annat sätt är att ordna det i programmet. Det finns tekniker för det.
Men ett enkelt sätt som kanske duger, eller duger bättre än klartext. Är att lägga någon form av salt eller pw i källkoden som du använder för att kryptera lösenorden och sedan skriver dem till textfiler. Att en person som vill hacka detta kan göra det enkelt förstår vi. Men detta är ett gymnasieprojekt. Och vi vet inte vilken nivå ts bör använda här.

"Jag behöver en lösning där ENDAST programmet kommer åt..."
"hur lagrar jag då den datan i en fil på ett SÄKERT sätt UTAN att någon obehörig KAN få tillgång till den..."
"Hur lagrar man känslig data på BÄSTA sätt?"

Det är hans frågor. "Min" så kallade "ickelösning" är den enda(?) SÄKRA lösningen. Din lösning är något som kallas "security by obscurity" vilket INTE är säkert och därför är din lösning även en "ickelösning".

Sen är det ju klart att din lösning kanske duger till hans projekt i slutändan.

En grej som inte någon reagerat på är om det är så att han direkt ska kommunicera med en MySQL-databas. Där kan vi ju ha ett säkerhetsproblem om det inte är så att personen har databasservern rejält uppsäkrad, vilket iofs inte ens det hjälpte för några versioner sedan pga en authenticeringsugg i MySQL.

Permalänk
Avstängd
Skrivet av iXam:

"Jag behöver en lösning där ENDAST programmet kommer åt..."
"hur lagrar jag då den datan i en fil på ett SÄKERT sätt UTAN att någon obehörig KAN få tillgång till den..."
"Hur lagrar man känslig data på BÄSTA sätt?"

Det är hans frågor. "Min" så kallade "ickelösning" är den enda(?) SÄKRA lösningen. Din lösning är något som kallas "security by obscurity" vilket INTE är säkert och därför är din lösning även en "ickelösning".

Sen är det ju klart att din lösning kanske duger till hans projekt i slutändan.

En grej som inte någon reagerat på är om det är så att han direkt ska kommunicera med en MySQL-databas. Där kan vi ju ha ett säkerhetsproblem om det inte är så att personen har databasservern rejält uppsäkrad, vilket iofs inte ens det hjälpte för några versioner sedan pga en authenticeringsugg i MySQL.

Inte för att vara tjötig eller så. Det finns inga helt säkra lösningar. Det finns bara mer eller mindre säkra lösningar.

Din lösning var ingen lösning alls imho, för man kunde då inte spara någon information alls. Min lösning var inte heller en ickelösning, då den löser problemet. Om än inte helt säkert. Kanske så säkert så att det räcker just där.

Det finns alltid folk som ska krångla till saker. Du ser tydligen inte att för mindre saker som inte ska användas i produktion, kan man gör detta. Det är långt bättre lösning än att inte ha någon lösning. Du får då träna på att skapa en sådan lösning. Denna lösning går också att förbättra så att den blir helt säker.

Sedan finns det naturligtvis andra lösningar, saker som OS kan hjälpa dig med.
När TS skriver bästa sätt, då kanske ts inte menar just säkraste sättet. Bästa är ett relativt begrepp. Men jag antar att ts har fått lite olika synvinklar, på saken.