Gnomes Keyring und KDEs Kwallet unterstützen den Anwender schon länger beim Umgang mit Passwörtern und Schlüsseln. Das im Entwurfsstadium befindliche Secrets Service API soll nun die Standardschnittstelle für Vertrauliches werden – für Gnome, KDE und beliebige andere Software.
Gute Security-Software sollte so sicher sein wie ein Tresor, aber so einfach zu bedienen wie die heimische Wohnzimmertüre. Diesen Vergleich verwendet der US-Amerikaner Stef Walter, Entwickler von Gnome-Keyring [1], gerne in seinen Vorträgen.
Geheim-Dienste
Walters Software will Security bedienungsfreundlicher machen und speichert für den Desktop-Anwender zentral Passwörter, Schlüsseldateien und Zertifikate, die er für allerlei Anwendungen benötigt. Auf den Keyring-Dienst greifen Gnome-Anwendungen wie Empathy, Evolution und Network-Manager zu, das Frontend Seahorse [2], im deutschen Gnome-Menü »Passwörter und Verschlüsselung« genannt, dient zum Verwalten von PGP- und SSH-Schlüsseln. Analoges leistet in der KDE-Desktopumgebung die Passwort-Tasche Kwallet [3] für Anwendungen wie Konqueror oder Knetattach.
Beide Dienste speichern die Sammlungen vertraulicher Informationen verschlüsselt und mit einer Passphrase versehen, sind aber zueinander inkompatibel. Doch bereits 2009 beschlossen Stef Walter und der Kwallet-Entwickler Michael Leupold gemeinsame Sache zu machen. Die Idee für die neue, gemeinsame Schnittstelle Secrets Service API war geboren.
Die neue Schnittstelle soll nicht nur für die Anwendungen der großen Desktopumgebungen da sein, auch Dritte sollen mit ihren Programmen andocken dürfen. Noch befindet sich das Dokument [4] im Entwurfsstadium und gelegentlich ändern sich Details in der Entwicklerversion [5]. Die grundlegende Architektur ist aber schon festgelegt.
Das Secrets Service API ermöglicht es Anwendungen, geheime Informationen durch eine Anfrage an einen Dienst zu speichern. Dieser speichert die Geheimnisse verschlüsselt und gibt sie auf Anfrage wieder an die Applikationen zurück. Der Informationsaustausch zwischen dem Service und seinen Clients lässt sich ebenfalls verschlüsseln.
Der Dienst läuft innerhalb der Login-Sitzung des Benutzers. Unter KDE soll er »ksecretserviced« heißen, in Gnome-Versionen ab 2.30 ist der API-Entwurf bereits im »gnome-keyring-daemon« und in Anwendungen wie dem Webbrowser Epiphany oder dem Chat-Client Empathy implementiert.
D-Bus-Objekte
Die Software speichert mehrere Geheimnisse in einer Sammlung, ein Konzept, das sich bisher in den Begriffen Keyring und Wallet ausdrückte. Im verwendeten D-Bus-Framework zur Interprozesskommunikation [6] bildet sich eine solche Sammlung als das Objekt »collection« ab. Es lässt sich mit Collection-Methoden anlegen oder löschen und enthält die einzelnen Geheimnisse als »item«. Sammlungen sind über ihren Objektpfad zu identifizieren, beispielsweise in der Form »/org/freedesktop/secrets/collection/Objekt«, wobei Objekt eine abgeschnittene Version des Collection-Namens sein kann. Daneben lassen sich auch Aliase auf Objekte erzeugen.
Die geheimen Werte speichert die Software als Byte-Array, bei Geheimnissen mit mehreren Feldern und Werten kann darin auch XML stehen. Zusammen mit den Werten lassen sich (nicht verschlüsselte) Attribute speichern, die zum leichteren Auffinden des Item mit der Methode »SearchItems()« dienen.
Beim Anlegen, Löschen und anderen Aktionen können Benutzereingaben erforderlich sein. Dafür ruft die Client-Anwendung die Prompt-Methode auf, um einen Eingabedialog anzuzeigen. Per Window-ID ordnet der Entwickler den Dialog dem Anwendungsfenster zu.
Daneben sieht das Secrets Service API einen Locking-Mechanismus vor: Items und Collections lassen sich sperren und entsperren. Bei einer Sperrung ist weder das gespeicherte Geheimnis zugänglich, noch lässt es sich durch ein Client-Programm verändern. Gnomes Keyring-Frontend Seahorse (Abbildung 1) bietet dem Anwender einige Locking-Einstellungen an, beispielsweise um eine Collection zu sperren, wenn der Benutzer länger als die vorgegebene Zeitspanne nichts tut. Zum Entsperren kann eine Benutzereingabe erforderlich sein.

Abbildung 1: Seahorse setzt auf Gnome-Keyring auf und bietet eine Oberfläche für die Verwaltung von GPG- und SSH-Schlüsseln.
Vertrauliche Sitzungen
Um dem Dienst ein Geheimnis anzuvertrauen oder eines zu lesen, öffnet die Client-Anwendung eine Session mit dem Dienst. Sie endet entweder mit dem expliziten Aufruf der »Close()«-Methode oder wenn sich die Applikation von ihrer D-Bus-Sitzung abmeldet. Innerhalb dieser Sitzung findet der Austausch der geheimen Informationen statt.
Das API sieht dafür zwar auch einen einfach zu implementierenden Klartext-Modus vor, empfiehlt für die Praxis aber dringend den Einsatz von Verschlüsselung. Das API spezifiziert dafür Schlüsseltausch im Diffie-Hellman-Verfahren, dann AES-128-Verschlüsselung im Chained-Block-Cipher-Modus und Padding der Daten laut PKCS #7.
Soweit die Spezifikation. Stef Walter hat sie schon fast vollständig in Gnome-Keyring umgesetzt. Die Bibliothek Libgnome-keyring implementiert die Client-Seite des API und kommt in zahlreichen Gnome-Anwendungen zum Einsatz. Walter plant für später eine Neuauflage der Bibliothek, vielleicht unter dem Namen Gsecrets, die erweiterte Features unterstützt.
Ksecretserviced
Bei KDE arbeitet Michael Leupold derzeit an Ksecretserviced, einer vollständigen Neuentwicklung, da der Vorgänger Kwalletd seiner Meinung nach nicht für das neue API taugt. Unter anderem eigne sich die alte Software nicht zum Entsperren geheimer Informationen durch Einstecken einer Smartcard. Er plant die erste Release des neuen Daemon für die KDE-Version 4.6, die für Januar 2011 angekündigt ist. Voraussichtlich wird sie noch nicht alle gewünschten Features umsetzen. “Dennoch soll sie als vollständiger Ersatz für Kwallet dienen und den Anwendern keine Regressionen bescheren”, gibt Leupold dem Linux-Magazin zu Protokoll.
Ksecretserviced soll mehrere Front- und Backends verwenden (Abbildung 2). Frontends dienen der Kommunikation mit dem Client, eines davon soll das neue API umsetzen, ein anderes aus Kompatibilitätsgründen noch die alte Kwallet-Schnittstelle. Beiden gemeinsam ist die Verwendung von D-Bus. Daneben sind weitere Frontends für andere Clients möglich. Die Backends kümmern sich um das Speichern und Auslesen der Geheimnisse. Das erste Backend, derzeit in Entwicklung, wird sie in einem neuen Dateiformat mit der Endung ».ksecret« speichern. Daneben arbeiten die KDE-Programmierer daran, ebenfalls das Gnome-Keyring-Format zu unterstützen. In Zukunft sollen sich auch Smartcards oder verschlüsselbare Wechseldatenträger mit der Software benutzen lassen.

Abbildung 2: Die Architektur für Ksecretserviced sieht Frontends für das neue und das alte API sowie Backends für verschiedene Speichermethoden vor.
Kontakt zur Außenwelt
Könnten Anwendungsprogrammierer außerhalb von KDE und Gnome ihre Programme bereits an das API anschließen? “Die Spezifikation befindet sich derzeit noch im Fluss”, stellt Stef Walter fest, und Michael Leupold meint: “Wir wollen nach Fertigstellung der Gnome- und KDE-Implementierung eine offizielle Version der Spezifikation herausbringen. Dann wäre es toll, andere Desktopumgebungen, aber auch Softwareprojekte wie beispielsweise Mozilla einzubeziehen.”
|
Infos |
|---|
|
[1] Gnome-Keyring: [http://live.gnome.org/GnomeKeyring] [2] Seahorse: [http://projects.gnome.org/seahorse/] [3] Kwallet: [http://utils.kde.org/projects/kwalletmanager/] [4] Secrets Service API, Draft 0.1: [http://people.gnome.org/~stefw/secrets/html/] [5] Git-Entwicklerversion des API: [http://gitorious.org/+xdg-secrets-api/xdg-specs/secrets-xdg-specs] [6] D-Bus: [http://www.freedesktop.org/wiki/Software/dbus] |





