Datenverschlüsselung

Eine TopLogic-Anwendung ist in der Lage bestimmte Anwendungsdaten verschlüsselt in der Datenbank abzulegen. Hierzu muss die Verschlüsselung persistenter Daten aktiviert werden. Dies erfordert, dass bei jedem Start der Anwendung ein Anwendungspasswort für die Datenentschlüsselung eingegeben werden muss, bevor ein Login in die Anwendung möglich ist.

Verschlüsselbare Daten

Die folgenden Daten sind verschlüsselbar

  • Dokumente
  • Die Journal-Historie
  • Speziell ausgezeichnete Attributwerte von Objekten.
    • Ein Attribut kann nur dann verschlüsselt werden, wenn die Anwendung nicht von datenbankbasierten Suchen nach Werten dieses Attributs abhängt.
    • Es können insbesondere keine Attribute verschlüsselt werden, welche als Basis für eine Datenbankindizierung dienen.
    • Ebensowenig können Beziehungen zwischen Objekten (oder deren Attribute) verschlüsselt weden.
    • Storages sind ebenso von der Verschüsselung ausgenommen.

Aktivierung der Verschlüsselung

Modell

Damit Attribute verschlüsselt werden können, müssen diese im sog. Flex-Storage gespeichert werden. Sie dürfen also nicht als normale Knowledge-Objekt-Attribute definiert sein. U.U. muss das Anwendungsmodell so geändert werden, dass alle sicherheitsrelevanten Daten im Flex-Storage gespeichert werden. Hierfür kann es notwendig sein, die Meta-Schemata der Anwendung so anzupassen.

Anwendungskonfiguration

Das Feature "Verschlüsselung" lässt sich aktivieren, indem das Konfigurationsbundle top-logic.encrypted.xml in die metaConf.txt der Anwendung eingebunden wird:

top-logic.encrypted.xml

Dieses Konfigurationsbundle besteht aus den im folgenden beschriebenen Teilen.

Verzögerter Anwendungsstart

Bei eingeschalteter Verschlüsselung muss während des Anwendungsstarts vom Administrator das Verschlüsselungspasswort eingegeben werden. Diese Eingabe erfolgt ebenfalls über die Web-Schnittstelle der Anwendung. Allerdings können vor der Eingabe des Verschlüsselungspassworts noch nicht alle Services gestartet werden. Technisch muss die Web-Anwendung daher den Start der Services solange verzögern, bis das Verschlüsselungspasswort eingegeben ist.

Der verzögerte Start wird in der Konfiguration für den StartStopListener aktiviert. Technisch wird dadurch beim Anwendungsstart der DeferredBootService gestartet, welcher zu einem späteren Zeitpunkt die Anwendungsdienste starten kann. Alle Dienste, die für die Passworteingabe selbst notwendig sind, müssen als Abhängigkeiten des DeferredBootService angegeben werden.

Bevor die Anwendung vollständig hochgefahren ist, leitet sie alle Anfragen an die beim DeferredBootService konfigurierte deferredBootLocation weiter.

<section name="StartStopListener">
   <entry name="deferredBoot" value="true" />
</section>

<section name="DeferredBootService">
   <!-- Application password page requires DB-Access. -->
   <entry name="dependency:com.top_logic.basic.sql.DBProperties$Module" value="enabled" />

   <!-- Redirect directly to the password input page. -->
   <entry name="deferredBootLocation" value="/applicationPassword.jsp" />
</section>
Verschlüsselungsdienst

Das Key-Handling für die Verschlüsselung wird durch den EncryptionService übernommen. Für die Verschlüsselung mit einem vom Nutzer gewählten Passwort muss der PasswordBasedEncryptionService gewählt werden. Über Konfigurationsoptionen können die Verschüsselungsalgorithmen für den Schlüssel und die Anwendungsdaten eingestellt werden.

<section name="EncryptionService">
   <entry name="class" value="com.top_logic.knowledge.service.encryption.pbe.PasswordBasedEncryptionService" />

   <!-- The password based encryption algorithm for encrypting the encryption key. -->
   <entry name="pbeAlgorithm" value="PBEWithSHAAndTwofish-CBC" />
   <entry name="saltLength" value="16" />
   <entry name="iterations" value="100000" />

   <!-- The algorithm for data encryption -->
   <entry name="encryptionAlgorithm" value="Blowfish" />

   <!-- The digest algorithm to produce (symmetric) signatures with. -->
   <entry name="signatureDigestAlgorithm" value="SHA1" />
</section>
Verschlüsselung von Flex-Attributen

Die Flex-Attribute von Objekten werden durch einen FlexDataManager gespeichert. Verschlüsselte Speicherung wird durch die Wahl der EncryptedFlexDataManagerFactory für den FlexDataManagerFactory-Dienst erreicht.

<section name="FlexDataManagerFactory">
   <entry name="class" value="com.top_logic.knowledge.service.encryption.data.EncryptedFlexDataManagerFactory" />
</section>
Selektive Attribut-Verschlüsselung

Es ist möglich, selektiv, einzelne Typen (Knowledge-Base-Typen) bzw. deren Flex-Attribute von der Verschlüsselung auszunehmen (oder die Verschlüsselung nur für ausgewählte Typen oder Attribute einzuschalten):

<section name="FlexDataManagerFactory">
   <entry name="dataManager.default" value="include"/>
   <entry name="dataManager.type.UIConfig" value="exclude"/>
   <entry name="dataManager.attribute.DemoTypesC.stringInBAndC" value="exclude"/>
</section>

Über eine solche Konfiguration können Datenbanksuchen auf einzelnen Flex-Attributen trotz eingeschalteter Verschlüsselung ermöglicht werden.

Journal in verschlüsselten Flex-Attribut-Tabellen

Damit die Journal-Historie verschlüsselt gespeichert wird, muss diese in Flex-Attribut-Tabellen geschrieben werden. Hierfür muss der FlexJournalManager als JournalManager aktiviert werden.

<section name="JournalManager">
   <entry name="class" value="com.top_logic.knowledge.journal.FlexJournalManager"/>
</section>

<section name="ApplicationTypes">
   <entry name="provider:com.top_logic.knowledge.journal.FlexJournalManager$JournalTypes" value="enabled"/>
</section>
Verschlüsselung des File-Repositories

Damit die Dateien im File-Repository verschlüsselt werden, muss der EncryptedDataSourceAdaptor für den DataAccessService verwendet werden. Der EncryptedDataSourceAdaptor verwendet den EncryptionService. Daher muss eine zusätzliche Abhängigkeit in den DataAccessService eingetragen werden.

<section name="DataAccessService">
   <entry name="dependency:com.top_logic.basic.encryption.EncryptionService$Module" value="enabled" />

   <entry name="repository" value="com.top_logic.dsa.impl.EncryptedDataSourceAdaptor" />
   <entry name="repository.xproperties" value="repository" />
</section>

<section name="repository">
   <entry name="wrapped" value="com.top_logic.dsa.repos.RepositoryDataSourceAdaptor" />
</section>
Signaturdienst zum Schutz vor gefälschten Login-Daten

Nutzerpasswörter werden als Signatur (Einwegverschlüsselung) gespeichert. Normalerweise wird hierfür ein Schlüsselpaar verwendet, das im Anwendungsverzeichnis abgelegt wird. Um bei eingeschalteter Verschlüsselung zu verhindern, dass ein Datenbankadministrator einen Passwort-Hash selbst berechnen und in die Datenbank speichern kann, um sich danach mit dem gefälschten Login an der Anwendung anzumelden, werden die Nutzerpasswörter mit dem Verschlüsselungsschlüssel signiert (verschlüsselter Hash des Passworts gespeichert).

<section name="SignatureService">
   <entry name="class" value="com.top_logic.knowledge.service.encryption.EncryptionSignatureService"/>
</section>

Es steht ein Utility zur Verfügung, mit dem man unter Angabe des Anwendungspassworts einen signierten Nutzerpassworthash generieren kann. Hiermit ist es möglich ein vergessenes Administratorpasswort direkt über die Datenbank zurückzusetzen:

    java com.top_logic.base.security.util.CreatePasswordHash -w <application-root-dir>

Administration

Java-Installation mit Unlimited-Stength-Encryption

Damit sinnvolle Verschlüsselungspasswörter mit starken Verschlüsselungsalgorithmen vergeben werden können, muss die "Unlimited-Strength-Encryption" in der Java-Installation freigeschaltet werden. Hierzu müssen die Dateien

local_policy.jar
US_export_policy.jar

in das entsprechende Verzeichnis der Java-Installation kopiert werden (bzw. die dort vorhandenen ersetzt werden):

jdk1.5.0_xx\jre\lib\security

Die notwendigen Dateien sind bei Oracle in folgendem Archiv erhältlich:

jce_policy-1_5_0.zip
jce_policy-6.zip

Siehe auch: \\tl\tl\Infrastructure\BaseInstall\Java\jce\.

Anwendungsinstallation

Nach dem ersten Start einer Anwendung mit Datenverschlüsselung muss das initiale Anwendungspasswort vergeben werden. Damit nicht der erste Nutzer, der eine Verbindung zu einer neuinstallierten Anwendung aufbaut, das initale Anwendungspasswort vergeben kann, ist hierfür ein Produktschlüssel notwendig. Ein Produktschlüssel hat nichts mit dem Lizenzschlüssel zu tun (welcher der Administration bei der technischen Installation der Anwendung zur Verfügung stehen muss). Der Produktschlüssel ist eine Art Passwort, welches zur Vergabe (und Wechsel) des Anwendungspassworts berechtigt.

Vergabe des Anwendungspassworts

Nach dem ersten Start einer neuinstallierten Anwendung leitet diese auf eine Maske zur Eingabe des Anwendungspassworts weiter. In dieser Maske müssen die folgenden Daten eingegeben werden:

  • Produktschlüssel
  • Initiales Anwendungspasswort
  • Initialpasswörter für alle vorkonfigurierten Nutzer (root/admin)
Eingabe des Verschlüsselungspassworts

Nach jedem Neustart einer Anwendung mit Datenverschlüsselung muss das Verschlüsselungspasswort eingegeben werden. Hierfür leitet die Anwendung nach dem Start auf eine spezielle Maske weiter.

Änderung des Anwendungspassworts

Von der Maske für die Eingabe des Anwendungspassworts ist eine Seite erreichbar, mit der das Anwendungspasswort geändert werden kann. Hierfür sind die folgenden Eingaben erforderlich:

  • Produktschlüssel
  • Altes Anwendungspasswort
  • Neues Anwendungspasswort