Eine CSV Datei in eine MySQL Datenbank importieren

Neulich wollte ich eine CSV Datei in eine kleine MySQL Datenbank einfügen. Doch wie war das doch gleich? Die CSV Datei hatte 5 Spalten und entspechend viele Elemente. Im Editor sieht soetwas ungefähr so aus.

CSV Datei:

text1,text2,text3,text4,text5
text2,text3,text4,text5,text6

Damit die MySQL Datenbank auch etwas mit den Daten anfangen kann, muss einmal eine Datenbank bestehen, wo die Daten hinein geladen werden sollen. Weiter müssen die Tabellen in der Datenbank eingerichtet sein. Die Datenbank heißt in diesem Fall iplist. Die Tabelle habe ich auch iplist genannt. Der Anwender erkennt das leicht anhand des Punkt-Operators iplist.iplist unten in der Erzeugung der Tabellen. Nungut, die Tabellen habe ich wie unten gezeigt erzeugt. Der Datentyp VARCHAR sollte bekannt sein, die Programmierer denken an dieser Stelle gerne an einen String. In Klammern ist die Größe, bzw. die maximale Länge definiert. Details zum Rest gibt es in der MySQL Doku.

CREATE TABLE `iplist`.`iplist` (
`eins` VARCHAR( 15 )
CHARACTER SET latin1
COLLATE latin1_german1_ci NOT NULL ,

`zwei` VARCHAR( 27 )
CHARACTER SET latin1
COLLATE latin1_german1_ci NOT NULL ,

`drei` VARCHAR( 2 )
CHARACTER SET latin1
COLLATE latin1_german1_ci NOT NULL ,

`vier` VARCHAR( 50 )
CHARACTER SET latin1
COLLATE latin1_german1_ci NOT NULL ,

`fuenf` VARCHAR( 2 )
CHARACTER SET latin1
COLLATE latin1_german1_ci NOT NULL
) ENGINE = MYISAM ;

So, die Tabellen sind erzeugt und nun kann entsprechend die CSV Datei geladen werden. Das wird wie unten gezeigt vollführt.

LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/datei.csv'
INTO TABLE iplist
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(eins, zwei, drei, vier, fuenf);

In Worten bedeutet das ungefähr soetwas, das die Datenbank Daten extern laden soll. Diese befinden sich in einer lokalen Datei. Diese Daten sollen in die Tabelle iplist übertragen werden. In dieser Datei sind die einzelnen Datensätze mit einem Komma getrennt. So spaltet die Datenbank gleich unsere Strings einander auf. Optional mit einem Hochkomma abgeschlossen. In Klammern stehen entsprechend die Spaltenbezeichner der Tabelle, damit die Datenbank weiß, worein sie die Daten zu schreiben hat. Das wars schon.

CAPI einrichten unter Ubuntu 10.04

Nachdem beschrieben wurde, wie die Fritz!Card ISDN A1 PCI Karte unter Linux zum Laufen gebracht werden kann, werden nun weitere Schritte beschrieben, die zeigen sollen, wie die CAPI unter Linux zu konfigurieren ist, dass schlußendlich auch Hylafax damit arbeiten kann.

Der Anwender editiert die Datei /etc/isdn/capi.conf und kommentiert aus dieser Liste die Raute in der Zeile für fcpci aus. Hierzu sind ebenfalls root-Rechte von Nöten.

# pico /etc/isdn/capi.conf

So sieht schließlich diese eine Zeile final aus. (nach dem Entfernen der Raute vorne)
fcpci - - - - - -
Die anderen Zeilen für andere AVM Karten gedacht, die hier nicht weiter behandelt werden.

Nun müssen in die Datei /etc/modules einige Zeilen eingefügt werden, damit die Module beim Systemstart geladen werden. Hierbei handelt es sich um das Modul capi und capidrv. Bei Ubuntu 9.04 sowie älteren Versionen muss zusätzlich fcpci angegeben werden. An dieser Stelle ist das unter Ubuntu 10.04 nicht nötig.

# pico /etc/modules

capidrv
capi

Hinter dem Wort capi im Editor bitte ein abschließendes Enter. Jetzt das System neu starten. Das funktioniert schön mit dem Befehl reboot.

# reboot

Nun wiederum als root in die Console sich einloggen und die CAPI Schnittstelle testen. Dies kann einfach mit capiinit und capiinfo erledigt werden. capiinit initialisiert die CAPI Schnittstelle und sorgt dafür, dass alles entsprechend gestartet und betriebsbereit ist. capiinfo gibt alle Informationen zur CAPI Schnittstelle des Systems aus. Darunter liegen auch die Informationen zu den B-Kanälen und dem D-Kanal. Geprüft werden sollte umbedingt, ob beide B-Kanäle und der D-Kanal korrekt erkannt wurde.

# capiinit
# capiinfo

Number of Controllers : 1
Controller 1:
Manufacturer: AVM GmbH
CAPI Version: 2.0
Manufacturer Version: 3.11-07 (49.23)
Serial Number: 1000001
BChannels: 2
Global Options: 0x00000039
	internal controller supported
	DTMF supported
	Supplementary Services supported
	channel allocation supported (leased lines)
B1 protocols support: 0x4000011f
	64 kbit/s with HDLC framing
	64 kbit/s bit-transparent operation
	V.110 asynconous operation with start/stop byte framing
	V.110 synconous operation with HDLC framing
	T.30 modem for fax group 3
	Modem asyncronous operation with start/stop byte framing
B2 protocols support: 0x00000b1b
	ISO 7776 (X.75 SLP)
	Transparent
	LAPD with Q.921 for D channel X.25 (SAPI 16)
	T.30 for fax group 3
	ISO 7776 (X.75 SLP) with V.42bis compression
	V.120 asyncronous mode
	V.120 bit-transparent mode
B3 protocols support: 0x800000bf
	Transparent
	T.90NL, T.70NL, T.90
	ISO 8208 (X.25 DTE-DTE)
	X.25 DCE
	T.30 for fax group 3
	T.30 for fax group 3 with extensions
	Modem
	
0100
0200
39000000
1f010040
1b0b0000
bf000080
00000000 00000000 00000000 00000000 00000000 00000000
01000001 00020000 00000000 00000000 00000000

Supplementary services support: 0x000003ff
	Hold / Retrieve
	Terminal Portability
	ECT
	3PTY
	Call Forwarding
	Call Deflection
	MCID
	CCBS

Solch eine Meldung sollte erscheinen. Funktioniert etwas nicht, so erscheint eine Fehlermeldung. Dann sollte der Anwender prüfen, ob die CAPI Schnittstelle unter /dev/capi* (/dev/capi20 in diesem Falle) existiert und dort ein Gerät angebunden ist. Die vorherigen Schritte auf Tippfehler prüfen und weiter probieren. Wurde das Kernel-Modul richtig eingebunden? Läßt es sich mit modprobe richtig laden und entladen? Alle Pakete korrekt installiert? Normalerweise sollte aber alles glatt gegangen sein und der Anwender freut sich über die wunderschöne Ausgabe. 🙂

Und woran sieht man, dass alles erkannt wurde? „LAPD with Q.921 for D channel X.25“ hier steckt im wesentlichen drin, dass die D-Kanal Funktionalität gegeben ist. Unten auf der Ausgabe steht etwas wie: „T.30 for fax group 3“ und „T.30 for fax group 3 with extensions“ und „Modem„. Hieran erkennt der Anwender rasch, dass entsprechend die Karte Voice-Modem Emulation unterstützt, wie auch das übliche ISDN Fax selbst, also ein Fax der Klasse 3.

Im nächsten Eintrag wird die Installation von CAPI4Hylafax beschrieben. Bald kann Linux faxen machen. 🙂

Mehr dazu bei: Installation von CAPI4Hylafax
Auch nützlich hierzu: Installation einer AVM Fritz!Card unter Linux

Autologin mit Windows 7 – Automatisches Anmelden eines Benutzers

Es wird hier kurz beschrieben werden, wie ein automatisches Anmelden eines Benutzer ohne die Eingabe eines Kennwortes unter Windows 7 zu konfigurieren ist. Nützlich ist diese Funktion beispielsweise für das Bereitstellen eines öffentlichen Rechners auf einer Party für die Musikgestaltung.

Der Anwender öffne das Startmenü (das Windows-Logo unten links) und gebe in die Suchmaske „Ausführen“ ein. Das System beginnt mit der Suche und wird rasch oben „Ausführen“ anzeigen. Dort draufklicken. Anschließend öffnet sich ein Fenster mit der Überschrift Ausführen. Schneller geht es mit der Tastenkombination Windows Taste + R. Nun folgendes dort eingeben:

control userpasswords2

Nun öffnet sich die Benutzerkonteneinstellung. Dort den Benutzer markieren, der sich automatisch Anmelden soll und oben den Hacken „Benutzer müssen Benutzernamen und Kennwort eingeben” entfernen. Jetzt „Übernehmen“ drücken und fertig. Verwendet der Anwender sein System in einer Domäne, erscheint der Hacken oben in der Benutzerkonteneinstellung nicht.

Installation einer AVM!Fritz ISDN PCI Karte unter ubuntu 10.04

Für Anfänger ist die Installation einer ISDN Karte nicht immer einfach. Es gibt viele verschiedene Kartentypen, einige sind sehr günstig zu beschaffen, einige weniger. In erster Linie wird hier die Installation einer A1 Karte (PCI) behandelt. Besser, allerdings auch teurer, arbeitet die B1 Karte, da sie das System durch eine interne CPU weniger belastet und zusätzlich die Treiberunterstützung besser sein soll. Zu meinem Erstaunen hat AVM keine vernünftig funktionierde Treiber für A1 Karten für die aktuellen Linux Versionen bereitgestellt. Mit den Suchmaschinen konnte schließlich eine Variante von Lutz Willek, die für die Kernelversionen 2.6.24 bis 2.6.28 gepatched wurde, beschafft werden. Kubuntu/Ubuntu 10.04 hat einen neueren Kernel. Auch mit diesem funktionieren die Treiber einwandfrei.

Der Treiber kann hier geladen werden: fritz-fcpci-src-2.6.31.zip
Nun wird von vorne begonnen. Die Kubuntu bzw. Ubuntu 10.04 Installation ist normal abgeschlossen und alles funktioniert soweit. Für das Ändern von Textdateien kann pico/nano oder schlicht der Midnight Commander (mc) verwendet werden. Die Pakete müssen ebenso nachinstalliert werden. Hat der Anwender einen Editor seiner Wahl, dann sollte dieser installiert werden.

Als erstes müssen die Kernel-Header installiert werden, damit der Treiber kompilieren werden kann. Das erledigt fix apt-get mit entsprechenden root-Rechten. Der Anwender gibt ein:

# apt-get install linux-headers-2.6.32-21-generic

An dieser Stelle muss angemerkt werden, dass dies die Kernel-Header von der Kubuntu 10.04 sind. Wurde ein anderer Kernel installiert, so müssen entsprechend diese Header installiert werden. Nun werden die benötigten Teile des Compilers installiert, damit überhaupt etwas übersetzt werden kann. Die nötigen Bestandteile werden mit dem Paket build-essential installiert. Der Anwender gibt ein:

# apt-get install build-essential

Nun wird die Linux CAPI installiert, damit die ISDN Karte auch später mit der Außenwelt sprechen kann. Dazu sind drei Pakete nötig: capi-utils, libcapi20-3 und libcapi20-dev. Dazu wird das Paket pppdcapiplugin installiert. Dazu gibt der Anwender ein:

# apt-get install capi-utils
# apt-get install libcapi20-3
# apt-get install libcapi20-dev
# apt-get install pppdcapiplugin

Das Paket libcapi20-3 wird sehr wahrscheinlich in Abhängigkeit mit capi-utils automatisch mitinstalliert. Das Eingeben des Befehls schadet nicht, es erscheint ggf. die Meldung, dass dieses Paket bereits installiert worden ist.

Nun ist es an der Zeit die Sourcen des Fritz-Karten Treibers zu entpacken. Geeignet ist das Home-Verzeichnis des normalen Benutzers. Entpackt werden kann entsprechend mit Root, entsprechende Rechte werden für die Kompilierung benötigt. Nun kopiert der Anwender die komprimierte Datei in ein Verzeichnis seiner Wahl. Bei .tar.gz Dateien lautet das Parameter -xvzf. Zum Entpacken wird folgendes eingegeben:

Originalfile von Lutz Willek:
# tar -xvjf fritz-fcpci-src-2.6.31.tar.bz2

Oben zur Verfügung gestelltes Zip-File:
# unzip fritz-fcpci-src-2.6.31.zip

Jetzt muss definiert werden, um welche Prozessor-Architektur es sich handelt, worauf der Treiber kompiliert und gestartet werden soll. Handelt es sich um einen 32-Bit Prozessor, so muss die 32-fcpci-lib.o verlinkt werden. Kann der Prozessor 64-Bit Befehle verarbeiten und ist auch ebenso ein entsprechender Kernel installiert, was meist bei der Installation automatisch entschieden wird, so muss die Datei 64_fcpci-lib.o verlinkt werden. Beispielsweise handelt es sich bei einem Pentium 4 um einen 32-Bit Prozessor, während ein AMD Phenom 64-Bit fähig ist. Besteht an dieser Stelle Unsicherheit, so hilft Wikipedia entsprechend weiter. Der Anwender wechselt in das lib-Verzeichnis des Source-Codes.

# cd fritz-fcpci-src-2.6.24-2.6.31
# cd lib

In diesem Verzeichnis existieren zunächst einmal drei Dateien, nämlich 32_fcpci-lib.o, 64_fcpci-lib.o und fcpci-lib.o. Bei der letzten Datei handelt es sich um einen Dummy, der ausgetauscht wird durch einen sog. symbolischen Link, der auf eine der anderen Dateien verweisen wird. Die Dummy-Datei hat 0 Byte. Der Dateiname wird kurz gemerkt und die Datei wird gelöscht.

# rm fcpci-lib.o

Nun muss ein neuer symbolischer Link erzeugt werden, der entsprechend Zugriffe auf diesen Namen zu einer anderen Datei umleitet.

# ln -s 64_fcpci-lib.o fcpci-lib.o
Für 64-Bit Prozessoren eingeben

# ln -s 32_fcpci-lib.o fcpci-lib.o
Für 32-Bit Prozessoren eingeben

Soll überprüft werden, ob die Verlinkung funktioniert hat, so kann dies leicht mit dem Befehl ls -l gemacht werden. Hat alles geklappt findet sich ein Eintrag, ähnlich wie dieser: fcpci-lib.o -> 64_fcpci-lib.o

Nun ist die Voreinstellung abgeschlossen. Jetzt wird entsprechend in das Verzeichnis fcpci-3.11.07 gewechselt.

# cd ..
# cd fcpci-3.11.07

In diesem Verzeichnis befinden sich entsprechend die c-Dateien und die make-Dateien. Falls mit dem Code bereits gearbeitet wurde, sollte vorhei ein make clean ausgeführt werden, um alte Binärdateien zu löschen. Der Befehl make all erzeugt nun automatisch die entsprechend Kernelobjekte.

# make all

Hat alles geklappt ist nun viel auf dem Bildschirm erschienen und es existieren einige neue .ko Dateien im gleichen Verzeichnis. Jetzt müssen die Dateien an die richtige Stelle kopiert werden. Dazu wird zunächst ein Verzeichnis angelegt, wo diese Objekt für den Kernel abgelegt werden. Der Anwender gibt ein:

# mkdir /lib/modules/`uname -r`/extra

Jetzt werden die Kernel-Objekts in dieses Verzeichnis kopiert. Entsprechend wird folgendes eingegeben:

# cp fcpci.ko /lib/modules/`uname -r`/extra

Nun muss entsprechend das neue Objekt eingerichtet werden. Dies erledigt der Befehl depmod.

# depmod -a

Jetzt ist das Kernel-Objekt bereit und kann geladen werden. Der Befehl modprobe wird Kernel-Objekte laden und entladen. Es wird zunächst das Kernel-Modul geladen und anschließend getestet, ob es auch geladen worden ist.

# modprobe -rf fcpci
# modprobe -v fcpci

Hat alles geklappt, nun freuen. Oft funktioniert es an dieser Stelle gerade nicht. Es erscheint eine Fehlermeldung …device or ressource busy… Kein Grund zur Panik. Ein anderes Kernel-Modul verhindert das Laden von fcpci. Dabei handelt es sich häufig um das Modul mit dem Namen avmfritz. Dies kann wiederum mit modprobe entladen werden. Anschließend der neue Versuch mit den neuen Treibern.

# modprobe -r avmfritz
# modprobe -rf fcpci
# modprobe -v fcpci

Hat alles funktioniert, so erscheint unten im Text eine entsprechende zweizeilige Erfolgsmeldung. Das ist schonmal ganz gut, allerdings wird beim Neustart des System das Problem wieder auftreten. Damit das vermieden wird, so ist es nötig entsprechend dem System klar zu machen, dass es das Modul avmfritz nicht mehr lädt. Das Setzen von avmfritz auf eine Blacklist schafft dauerhaft Abhilfe und fcpci kann beim Start normal laden. Es wird eine neue Datei erzeugt.

# pico /etc/modprobe.d/blacklist-avmfritz.conf

In dieser Datei wird folgendes eingetragen:

blacklist avmfritz

Die Zeile bitte mit einem Enter abschließen, so dass der Cursor links unter dem Text steht. Nun speichern und neu starten. Entsprechend wieder einloggen und in die Root-Console wechseln.

Die ISDN Karte ist nun installiert. Jetzt muss die CAPI eingerichtet werden. Hierzu gibt es einen seperaten Blogeintrag.

Mehr dazu bei: Installation von CAPI4Hylafax
Auch nützlich hierzu: CAPI einrichten unter Ubuntu 10.04

X: cannot stat /etc/X11/X (No such file or directory), aborting.

In Ubuntu 6.06 ließ sich trotz normaler Installation nicht der XServer starten. Es erschien, folgende Fehlermeldung.

X: cannot stat /etc/X11/X (No such file or directory), aborting.

Erscheint dieser Fehler oben, so fehlt etwas wichtiges, nämlich der X-Server. Der Splashscreen anfangs erscheint, der so ein wenig grafisch ist, aber nichts mit dem X-Server zu tun hat. Der Anfänger sollte sich hier nicht täuschen lassen. Anschließend versucht gdm oder kdm bzw. der Manager Ihrer Wahl den X zu starten. Das klappt aber nicht. Nicht immer wird eine Ausgabe erzeugt. Hat sich der Benutezr unter der Console eingeloggt (Strg+Alt+1 usw.) so bekommt er meist mit startx etc. eine entsprechende Meldung wie oben.

Warum auch immer der X-Server bei der Installation nicht immer mitinstalliert wurde… Abhilfe schafft das Packet xserver-xorg, dass folgendermaßen installiert wird.

# apt-get install xserver-xorg

Nun befindet sich der xorg X-Server auf dem System und kdm, wdm, gdm und so weiter sollte nun entsprechend starten. Natürlich sollte ein Window-Manager ihrer Wahl nicht fehlen, kde bzw. gnome oder fluxbox sollte ebenso installiert werden. Natürlich gibt es auch die stark resourcenschonenden Oberflächen, falls RAM und Leistung sehr knapp sind, aptitude hilft entsprechend bei der Auswahl.

Aktivieren des universe APT Repository in Ubuntu 6.06 für PHP4

Ich habe sehr alte Skripte, die nur unter PHP4 laufen. Natürlich könnten diese auf PHP5 angepasst werden, aber dazu ist keine Zeit und vermutlich auch sehr wenig Lust vorhanden. Also ein älteres Linux mit PHP4 ausstatten und gut ist. Natürlich lassen wir die Sicherheitsaspekte an dieser Stelle außen vor. Das System sollte intern verwendet werden und möglich keinen Internetzugang haben. Sonst ist man möglicherweise fix nicht mehr alleine.

Der Benutzer wird schnell feststellen, dass nach der einfachen Ubuntu 6.06 Installation kein PHP4 Paket mit apt-cache angezeigt wird. Eine kleine Anpassung in /etc/apt/sources.list schafft hier Abhilfe.

Editieren der Datei mit root-Rechten.
# pico /etc/apt/sources.list

Folgende Zeilen sollten dort vorhanden sein:

deb http://archive.ubuntu.com/ubuntu/ dapper main restricted
deb-src http://archive.ubuntu.com/ubuntu/ dapper main restricted

Diese Zeilen etwas anpassen, etwa so:

deb http://archive.ubuntu.com/ubuntu/ dapper main restricted universe
deb-src http://archive.ubuntu.com/ubuntu/ dapper main restricted universe

Speichern und folgendes ausführen:
# apt-get update

Dies updated das Repository und fügt entsprechend alle Dateien, die in universe vorhanden sind in apt ein.

PGP – Pretty Good Privacy

Was ist Pretty Good Privacy?

Pretty Good Privacy (PGP) bedeutet auf deutsch etwa „Ziemlich Gute Privatsphäre“. PGP ist ein von Phil Zimmermann entwickelte Software zur Ver- und Entschlüsselung und zum Unterschreiben von Daten.

Was macht PGP?

PGP verwendet ein sogenanntes Public-Key-Verfahren. Hierbei gibt es ein eindeutig zugeordnetes Schlüsselpaar:

Verwendet wird im Public-Key-Verfahren ein öffentlicher Schlüssel, mit dem jeder die Daten für den Empfänger verschlüsseln kann. Dazu wird ein privater geheimer Schlüssel verwendet, der nur dem Empfänger bekannt ist und der zusätzlich durch ein Kennwort geschützt ist.

Die Nachrichten werden an einen Empfänger mit seinem öffentlichen Schlüssel verschlüsselt und können somit ausschließlich durch den privaten Schlüssel des Empfängers entschlüsselt werden. Das Verfahren wird aus diesem Grund auch asymmetrisches Verfahren genannt. Der Sender und Empfänger verwenden zwei unterschiedliche Schlüssel. Dies erleichtert den Schlüsselaustausch.

Die erste Version von PGP wurde 1991 entwickelt und verwendet einen RSA-Algorithmus zur Verschlüsselung der Daten. Spätere Versionen verwenden den Diffie-Hellman-Schlüsselaustausch (DH/DSS).

Wie verschlüsselt PGP?

PGP verschlüsselt nicht die ganze Nachricht asymmetrisch, dies wäre viel zu rechenintensiv und daher bei größeren Datenmengen auch mit heutigen Rechnern unpraktikabel. Stattdessen wird die eigentliche Nachricht mit einem symmetrischen Algorithmus chiffriert und nur der verwendete Schlüssel asymmetrisch verschlüsselt. Dies nennt man aus diesem Grund eine Hybride Verschlüsselung. Für diesen Zweck wird jedes Mal ein symmetrischer Schlüssel zufällig erzeugt.

Der symmetrische Schlüssel wird per RSA- oder Elgamal-Verfahren mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und zur Nachricht eingebettet. Aus diesem Grund ist es hiermit möglich, eine Nachricht für mehrere Empfänger gleichzeitig zu verschlüsseln und zu versenden. Eine für mehrere Empfänger verschlüsselte Nachricht sieht dann grafisch folgendermaßen aus:

asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger 1
asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger 2
asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger 3
asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger n
symmetrisch verschlüsselte Nachricht

Das Web of Trust

PGP basiert hierbei auf dem sogenannten Web of Trust. Anders als bei anderen Herangehensweisen gibt es keine zentrale Zertifizierungsinstanz, sondern Ketten des Vertrauens aus überprüften Benutzern. Jeder Benutzer trägt Sorge dafür, das der Schlüssel auch zu der Person gehört, der ihn angeblich erzeugt hat. Der Fingerprint dieses Schlüssels kann entsprechend angezeigt und vergleichen werden.

Funktionsweise von PGP

Der Anwender kann mit PGP wahlweise eine Nachricht verschlüsseln, signieren, oder verschlüsseln und signieren. Die Signatur der Nachricht dient dazu, die Echtheit dieser Nachricht dem Empfänger zu garantieren. Auf diese Weise kann gewährleistet werden, das kein Dritter den Inhalt trotz Verschlüsselung verändert hat. In der Praxis ist es sinnvoll Nachrichten, wenn man sie schon verschlüsselt auch immer zu signieren. Hingegen sind signierte unverschlüsselte Nachrichten teils in Newsgruppen verbreitet.

Erzeugen einer digitalen Signatur

Um genau sicherzustellen, dass eine abgefangene Nachricht nicht ersetzt oder verändert wurde, muss der Sender zuerst einmal Authentizität und Integrität der Nachricht mittels einer digitaler Signatur erzeugen. Hierbei wird auf die Klartextnachricht oder die Klardaten eine Hash-Funktion, wie zum Beispiel MD6, MD5 oder SHA-1, angewendet. Durch das Hashen entsteht ein „Message Digest“, ein eindeutiger Fingerprint der Nachricht, der aufgrund des verlustbehafteten Kompression des Hash-Algorithmus wesentlich kürzer ist, als die Nachricht in Bytes selbst. Daher nimmt die Generierung der Digitalen Signatur für eine Nachricht sehr wenig zusätzlichen Platz ein.

Anschließend wird aus dem Fingerprint der Nachricht, dem Message Digest (was nichts anderes ist, als der Hash-Wert) unter der Verwendung des privaten Schlüssels des Senders eine Nachrichten-Signatur erzeugt. Hierbei wird ein anderer Algorithmus angewendet. DSA bzw. RSA wird am häufigsten zur Erzeugung von Signaturen verwendet. Das mit Abstand bekannteste und auch am meisten verwendete digitale Signaturverfahren ist RSA.

Die Sicherheit von RSA basiert auf der Schwierigkeit, große Zahlen in ihre Primfaktoren zu zerlegen. (Faktorisierungsproblem) Das aktuelle Vertrauen in die Sicherheit von Signaturverfahren wie RSA oder DSA basiert vor allem auf der Tatsache, dass diese trotz 30 Jahre umfangreicher Forschung nicht gebrochen werden konnten.

Verschlüsselung

Im zweiten Schritt kann der Sender nun die Verschlüsselung der Nachricht vollführen. Hierbei wird der Klartext der Nachricht und die Digitale Signatur zusammen aus dem ersten Schritt genommen und komprimiert. Dies dient zur Reduktion der Größe und zusätzlich der Erschwerung der Kryptoanalyse. Diese komprimierten Bytes werden nun mit dem zufällig generierten Session Key mit einem symmetrischen Verfahren zum Ciphertext verschlüsselt. Damit der Empfänger diese Nachricht lesen kann, muss der zufällig erstellte Einmalschlüssel dem Empfänger mitgeteilt werden.

Hierzu wird der Schlüssel (Session Key) mit dem öffentlichen Schlüssel des Empfängers mit einem asymmetrischen Verfahren verschlüsselt und an die jetzt verschlüsselte Nachricht angefügt. Sollen die Daten per E-Mail versendet werden müssen die Bits des Ciphertextes und des verschlüsselten Schlüssels noch entsprechend encodiert werden. Dazu wird Datenblock mittels BASE64 in ASCII-Zeichen codiert. Jetzt kann die Nachricht entsprechend durch einen Client weiterverarbeitet und versendet werden.

Entschlüsselung

Zu Beginn muss der Empfänger die vorliegenden ASCII-Zeichen mit BASE64 wieder decodieren, um an den ursprümglichen Ciphertext und den verschlüsselten Session Key zu gelangen. Nun kann jetzt der Session Key durch den privaten Schlüssel des Empfängers entschlüsselt werden. Mit diesem Schlüssel wird wiederum gleich anschließend der Ciphertext wieder in die komprimierte Daten bestehend aus Klartextnachricht und Digitale Signatur entschlüsselt werden. Damit die Nachricht gelesen werden kann, muss diese nur noch entkomprimiert werden. Nun muss nur noch die Authentizität des Senders und die Integrität der Nachricht überprüft werden.

Hierzu wird auf den Klartext die gleiche Hash-Funktion, wie auch beim Sender angewandt. Die ergibt einen Hashwert, der zwischengespeichert wird. Anschließend wird die digitale Signatur mit dem öffentlichen Schlüssel des Senders mittels einer Umkehrfunktion des Signaturalgorithmus dechiffriert. Wurde zum Erzeugen der Signatur tatsächlich der zugehörige private Schlüssel verwendet, stimmen die beiden Klartexte des Message Digests überein. An dieser Stelle kann man mit hoher Wahrscheinlichkeit davon ausgehen, dass die Nachricht nicht verändert wurde und tatsächlich von einem bestimmten Sender stammt.

PDF-Exploit 2.1 ;-) – ohne Sicherheitslücken

Auf meiner heutigen Heise-Reise durch die seichten Tiefen des Internets bin ich auf folgenden Artikel gestoßen. Hier der Link dazu. heise.de: PDF-Exploit funktioniert ohne konkrete Sicherheitslücke

Ist das nicht interessant? Das dort befindliche Archiv habe ich gleich mal heruntergeladen. Das findet sich hier. Ausgeführt und gespannt gewartet. Bei mir öffnete sich die Eingabeaufforderung nicht sofort. Das System zeigte entsprechend eine Warnung und zeigte mir die auszuführende Befehlszeile an. Ich habe eine recht aktuelle Version vom Adobe Acrobat Reader installiert. Nachdem ich das zugelassen habe, klappte es auch. Unter dem FoxIt Reader scheint es an dieser Stelle keine Warnung zu geben. Hier befindet sich die Seite des Autors. Das zeigt sehr einfach, wie anfällig auch Systeme sind, die ein Zweitprodukt verwenden. Der Schutz muss früher beginnen, ein PDF Dokument sollte erst gar nicht ohne Userinteraktion geöffnet werden dürfen. Auf diese Weise vermeidet der Benutzer überhaupt, das seltsame PDF Dokumente plötzlich Schabernack anrichten.

Wie bringe ich Firewire-Festplatten unter Vista und Windows 7 zum laufen?

Diese Frage hatte mich eine ganze Zeit beschäftigt und irgendwie habe ich eine ganze Weile keine Lösung gefunden. Die Lösung ist nun da und irgendwie sehr einfach. 🙂 Was es auch ist, es scheint ein Treiberproblem zu sein. Also anderer Treiber. Woher? Von dem Rechner selbst.

Im Prinzip öffnet der Benutzer den Geräte-Manager und sucht sein Firewire-Gerät. Meist befindet sich unter dem Eintrag IEEE 1394 Bus-Hostcontroller entsprechend die dort zugeordneten Geräte. Erscheint dort nichts, stimmt generell etwas mit den Treibern nicht,… weil dann sind sie erst gar nicht installiert worden. Der Benutzer sucht den Eintrag „OHCI-konformer 1394-Hostcontroller“ und wählt mit der rechten Maustaste „Treibersoftware aktualisieren“. Nun wählt der Benutzer „Auf dem Computer nach Treibersoftware suchen.“ anschließend „Aus einer Liste von Gerätetreibern auf dem Computer auswählen“. Nun den neuen Treiber auswählen, nämlich OHCI-konformer 1394-Hostcontroller (alt). Ja, genau, den neuen alten Treiber. Und poff, die Festplatten werden erkennt und können verwendet werden.

Der Problem soll, zumindest nach einigen Foreneinträgen und Erzählungen gerne unter VIA auftreten. Ob das stimmt kann ich nicht sagen, aber beide meiner Maschinen haben VIA Controller drin.

PDF Exploit 2.0

Vor einigen Tagen hatte ich einen kleinen Artikel zu PDF Exploits geschrieben und heute wurde ich durch heise.de auf ein aktuelles Problem aufmerksam. heise.de hat hier durchaus einen recht lesenswerten Artikel geschrieben, der auf eine Publikation von Hovav Shacham verweist. Dieser Exploit veröffentlicht von jduck ist wirklich sehr bemerkenswert und eine gute Arbeit.

Somit kann gesagt werden, dass ein Exploit existiert, der die Speicherschutzfunktion unter Windows, die Data Execution Prevention (DEP), aushebelt. Bisher hätte ich nicht gedacht, dass dies geht, aber nun sehe ich: Ja, es geht.

Damit ist es nur eine Frage der Zeit, bis dies Anwendung in der Verbreitung von Schadsoftware findet. Da auch völlig normale Webseiten Schadcode beinhalten können, so ist es sinnvoll, sensible Systeme vollständig vom Netzwerk zu trennen. Hat man nichts sensibles, kein Online-Banking oder etwas in der Art, so sollte darüber nachgedacht werden, in wie weit es möglich ist, sich vor gängigen Exploits, wie dem PDF Exploit zu schützen. Angemerkt werden muss ebenso, das auch seltene Fremdprodukte angreifbar sind, sei es auch OpenSource Software. Der Griff zu einer anderen Marke bringt unter Umständen nicht viel.

Angriffe können auch dynamisch erfolgen, so wird nicht umsonst geprüft, welchen Browser der Benutzer mit welchen Erweiterungen nutzt.

Weitere lesenswerte Dinge zu diesem Thema:

2010-03-18: The Latest Adobe Exploit and Session Upgrading
Adobe Acrobat Bundled LibTIFF Integer Overflow
Understanding DEP as a mitigation technology part 1
The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86) By Hovav Shacham
Memory Protection Technologies
Bypassing Windows Hardware-enforced Data Execution Prevention
Exploits für alle: Metasploit unterstützt nicht nur beim Finden sondern auch beim Ausnutzen von Sicherheitslücken