Laden...

Verschlüsselungsempfehlung gesucht

Erstellt von sven22 vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.221 Views
S
sven22 Themenstarter:in
154 Beiträge seit 2005
vor 16 Jahren
Verschlüsselungsempfehlung gesucht

DB: MSSQL 2000 eventuell MSSQL 2005

Hi ich suche eine Ansatz für folgendes Problem:

Daten sollen online über ein Webfrontend in eine Datenbank eingetragen werden.
Da die Daten aber ggf kritisch sind, sollen sie nicht über dritte (zb dem Admin des Providers) eingesehen werden können.

Nun würde ich die Daten am liebsten verschlüsseln. Gibt es da eine Empfehlung bzw Artikel welche Verschlüsselungsart man am besten nimmt?

Stelle mir derzeit eine eingermasse performante Verschlüsselung auf Datenbankebene vor. Macht das Sinn oder wäre etwas anderes empfehlenswert?

Gruß

Sven

D
496 Beiträge seit 2005
vor 16 Jahren

Ich weiss zwar nicht um was für daten es sich handelt
aber ich benutze zum verschlüsseln von passwörtern im
die folgende class die dann nur mit dem entsprechenden
key wieder zu entschlüsseln ist.

der nachteil: ich weiss nicht ob dir das proffessionell genug ist.
der vorteil: es ist datenbank unabhängig, da das ver und ent-schlüsseln vorher stattfindet.

hier die klasse:


using System;
using System.Collections.Generic;
using System.Text;

namespace OOP2
{
    //=============================
    //This Class is used for
    //crypting and decrypting
    //Passwords by using the
    //Key: dein key
    //=============================

    class CryptAndDecrypt
    {

        #region Class variables

        private string key;

        #endregion


        #region Properties

        public string Key
		{
			get { return key; }
		}
 
		public CryptAndDecrypt(string cle)
		{
			key = cle;
        }

        #endregion



        #region encryption

        /// <summary>
        /// Encrypts string
        /// </summary>
        /// <param name="ChaineaEncoder">uncrypted String to crypt</param>
        /// <returns>crypted string</returns>
		public string Encrypt(string ChaineaEncoder)
		{
			string encrypt = null;
  
			for (int i = 0; i < ChaineaEncoder.Length; i++)
			{
				encrypt +=           Convert.ToString(Convert.ToChar((Convert.ToInt16(key[i % key.Length]) + Convert.ToInt16(ChaineaEncoder[i])) % 65536));
			}
  
			return encrypt;
        }

        #endregion


        #region decryption

        /// <summary>
        /// Decrypts string
        /// </summary>
        /// <param name="ChaineaDecrypter">crypted string to decrypt</param>
        /// <returns>uncrypted string</returns>
		public string Decrypt(string ChaineaDecrypter)
		{
			string decrypt = null;
	  
			for (int i = 0; i < ChaineaDecrypter.Length; i++)
			{
				decrypt += Convert.ToString(Convert.ToChar(((Convert.ToInt16(ChaineaDecrypter[i]) - Convert.ToInt16(key[i % key.Length])) % 65536)));
			}
	  
			return decrypt;
        }

        #endregion
    }
}

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

S
sven22 Themenstarter:in
154 Beiträge seit 2005
vor 16 Jahren

Danke demondriver235 🙂

Das ist auf jeden Fall schon mal ein interessanter Ansatz!
Habe noch ein wenig Kopfzerbrechen darüber wie 2-n User ein und denselben Datensatz sharen können. Dazu müsste ich ja dann einen neuen Schlüssel generieren und die Daten mit dem neuen Schlüssel verschlüsseln.

Bloss wo packe ich den / die hin?
Es ist in der Anwendung möglich, dass ein Nutzer verschiedene Daten mit verschiedenden Usern shared (m:n). Das bedeutet auch, dass ich dann pro User n-Schlüssel verwalten muss - oder sehe ich gerade was falsch? Wenn ich damit
richtig liege - wie verwalte ich das dann? Die Schlüssel kann ich ja nicht in die gleiche DB packen und Cookies ...

Hintergrund:
Ich möchte eine Community-Anwendung bauen bei der jeder User sein Wissen über bestimmte Dinge mit anderen bei Bedarf teilen kann. Je nach Lage kann es auch nur eine geschlossene Gruppe sein(oder auch nur er selbst), die Zugriff auf die Daten hat. Das soll dann jeder Nutzer entscheiden. Da nun dadurch aber nicht jeder zum gläsernen User werden soll, wollte ich das halt auch in der DB verschlüsseln. Von daher gefällt mir die Idee schon sehr gut die Daten vorher zu verschlüsseln.

G
84 Beiträge seit 2007
vor 16 Jahren

Du solltest Dich erstmal entscheiden, ob Du bestimmte Daten wie Passwörter verschlüsseln willst - dafür kannst du ne Einweg-Verschlüsselung wie MD5 o.ä. benutzen oder, was ich eher vermute, ob Du eine verschlüsselte Verbindung (SSL) einsetzen willst.

Bei SSL brauchst Du Dir keine Gedanken über die eigtl. Verschlüsselung zu machen, du baust einfach die Verbindung auf, und schickst die Daten drauf.
Ich habs noch net gemacht, aber denke nicht dass es besonders schwer ist^^

S
sven22 Themenstarter:in
154 Beiträge seit 2005
vor 16 Jahren

SSL schützt die Daten ja nicht davor, dass beispielsweise ein DBA sich bequem die Daten anschauen oder der Provider Datenmissbrauch mit den Daten der Datenbank anstellt. Beispielsweise Userprofile erstellen etc

Es geht also hauptsächlich um die Verschlüsselung der Daten innerhalb der Datenbank.
Bei der Übertragung an den Client kann man dann noch SSL benutzen aber das ist das kleinere Problem.

G
84 Beiträge seit 2007
vor 16 Jahren

Ok, verstehe.

Dann sehe ich aber keinen Einsatz für eine PKI (Public Key Infrastucture) - so habe ich Deine Aussage mit den div. Schlüsseln und m:n Beziehungen zumindest verstanden.

Weil das Problem ist ja, wenn du die Daten X mit dem Schlüssel K1 verschlüsselst, kannst Du sie nur mit dem privaten Schlüssel PK1 entschlüsseln ...
Eigentlich würde es ja reichen, wenn Deine App die jeweiligen Schlüssel kennt zum ver- und entschlüsseln ... die Rechte wer was lesen darf kannst Du ja normal über die Datenbank definieren ...

S
sven22 Themenstarter:in
154 Beiträge seit 2005
vor 16 Jahren

stimmt! guter Hinweis. 8)

Bleibt nur das Problem, dass wenn die App den Schlüssel kennen soll das Ganze wieder leicht zu knacken ist indem man den Code kennt. Der Hoster oder ein Hacker könnte sich also Zugang zu der App verschaffen und den Schlüssel rausfinden. Damit wären dann auf einen Schlag alle Daten freigelegt. Oder kann ich das so stark obfuskieren, dass es keiner mehr lesen / auswerten kann?

1.274 Beiträge seit 2005
vor 16 Jahren

Hallo,

warum einfach wenn es auch Kompliziert geht,
der SQL Server bietet so was **OUT-OF-THE-BOX **

siehe den Link MSDN Switzerland

lg
LastGentleman

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

G
84 Beiträge seit 2007
vor 16 Jahren

Tja - das ist halt immer das Problem - irgendwo muss der Schlüssel stehen.
Die einzige Lösung ist, dass Du die Verschlüsselung nicht beim Client machen kannst, sondern Serverseitig - also durch einen Webservice o.ä.
Dort kannst du dann den Schlüssel in einer DLL o.ä. verpacken - was natürlich auch net 100%ig sicher ist, aber für Deinen Anwendungsfall wohl ausreicht, oder?

S
sven22 Themenstarter:in
154 Beiträge seit 2005
vor 16 Jahren

danke für den msdn link eventuell könnte ich das benutzen

doch auch diese schlüssel müsste ich ja irgendwo sicher ablegen.

hm muss wohl wirklich den schlüssel in die anwendung packen.

danke für eure tipps 🙂!